Skip to content

Commit 6361b0d

Browse files
committed
Some waiting with result
1 parent 0cda3c5 commit 6361b0d

File tree

2 files changed

+66
-19
lines changed

2 files changed

+66
-19
lines changed

ipynao/nao_robot.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@
1111
from ipywidgets import DOMWidget
1212
from traitlets import Unicode, Bool
1313
from ._frontend import module_name, module_version
14-
14+
from time import sleep
1515
import asyncio
1616

1717

18+
1819
class NaoRobotService():
1920
name = None
2021
widget = None
@@ -24,6 +25,7 @@ def __init__(self, widget, service_name):
2425
self.widget = widget
2526

2627
def create_service_msg(self, method_name, *args, **kwargs):
28+
self.widget._response = None
2729
data = {}
2830
data["command"] = "callService"
2931
data["service"] = str(self.name)
@@ -35,7 +37,6 @@ def create_service_msg(self, method_name, *args, **kwargs):
3537
self.widget.send(data)
3638

3739
def __getattr__(self, method_name):
38-
# TODO: some very basic input validation (maybe)
3940
return lambda *x, **y: self.create_service_msg(method_name, *x, **y)
4041

4142

@@ -49,6 +50,7 @@ class NaoRobotWidget(DOMWidget):
4950
_view_module = Unicode(module_name).tag(sync=True)
5051
_view_module_version = Unicode(module_version).tag(sync=True)
5152

53+
_response = None
5254
value = Unicode('Hello World').tag(sync=True)
5355
connected = Unicode("Disconnected").tag(sync=True)
5456
status = Unicode("Not busy").tag(sync=True)
@@ -57,11 +59,16 @@ class NaoRobotWidget(DOMWidget):
5759
def __init__(self, **kwargs):
5860
super().__init__(**kwargs)
5961
self.on_msg(self._handle_frontend_msg)
62+
self.observe(self._handle_value_change, names="status")
6063

6164
def _handle_frontend_msg(self, model, msg, buffer):
6265
print("Received frontend msg: ")
6366
print(msg)
64-
# TODO:
67+
self._response = msg
68+
69+
def _handle_value_change(self, change):
70+
print("HANDLE HANDLE HANDLE", change)
71+
self.status = change['new']
6572

6673
def wait_for_change(widget, value_name):
6774
future = asyncio.Future()
@@ -72,6 +79,19 @@ def get_value_change(change):
7279

7380
widget.observe(get_value_change, names=value_name)
7481
return future
82+
83+
async def set_after(self, future, delay, value):
84+
self._response = None
85+
86+
for i in range(15):
87+
print(i, " Sleep a blink ... ", self.status)
88+
await asyncio.sleep(delay)
89+
print("fjdlkjf")
90+
if i == 10:
91+
print("setting the future")
92+
future.set_result(self._response)
93+
94+
self._response = None
7595

7696

7797
async def go_sleep(self, tSeconds=2):
@@ -80,7 +100,13 @@ async def go_sleep(self, tSeconds=2):
80100
data["tSeconds"] = tSeconds
81101
self.send(data)
82102

83-
return self.wait_for_change("synco")
103+
loop = asyncio.get_running_loop()
104+
future = loop.create_future()
105+
106+
print("hello ...")
107+
loop.create_task(self.set_after(future, 0.1, '... world'))
108+
109+
return future
84110

85111

86112
def connect(self, ip_address="nao.local", port="80"):

src/widget.ts

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,6 @@ export class NaoRobotModel extends DOMWidgetModel {
105105
this.changeStatus('Unavailable');
106106
}
107107

108-
async Testing() {
109-
this.qiSession = new QiSession();
110-
const tts = await this.qiSession.service('ALTextToSpeech');
111-
// let msg : any = Object.getOwnPropertyNames(tts);
112-
const aThing: any = this.send(tts);
113-
console.log('A thing: ', aThing);
114-
console.log('JS sent something');
115-
}
116108

117109
private async createService(
118110
serviceName: string,
@@ -149,24 +141,58 @@ export class NaoRobotModel extends DOMWidgetModel {
149141
return;
150142
}
151143

144+
let serviceResponse;
152145
this.changeStatus('Running method ' + methodName);
153146

154147
const servicePromise = this._services[serviceName][methodName](...args);
155-
await servicePromise.then(
156-
() => {
148+
serviceResponse = await servicePromise.then(
149+
(resolution: any) => {
157150
this.changeStatus('Task completed');
151+
return resolution;
158152
}
159153
).catch(
160154
(rejection: string) => {
161155
this.changeStatus(rejection);
162156
}
163157
);
164158

159+
console.log("OOO received response ", serviceResponse);
160+
if (serviceResponse !== undefined) {
161+
this.send(serviceResponse);
162+
}
163+
}
164+
165+
async goSleep() {
166+
this.changeStatus("Going to sleep.");
167+
const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms));
168+
169+
await sleep(1000);
170+
this.changeStatus("Slept for a second");
171+
this.set('synco', '1 second');
172+
this.save_changes();
173+
this.send('its been a second');
174+
175+
await sleep(1000);
176+
this.changeStatus("Slept for 2 seconds");
177+
this.set('synco', '2 seconds');
178+
this.save_changes();
179+
this.send('its been 2 whole seconds');
180+
181+
await sleep(1000);
182+
this.changeStatus("All awake now");
183+
this.set('synco', '3 seconds');
184+
this.save_changes();
185+
this.send('its been too long');
165186
}
166187

167188
private async onCommand(commandData: any, buffers: any) {
168189
console.log('REMOVE onCommand', commandData);
169190
const cmd = commandData['command'];
191+
192+
if (cmd === "goSleep") {
193+
await this.goSleep();
194+
return;
195+
}
170196

171197
switch (cmd) {
172198
case 'connect':
@@ -200,7 +226,6 @@ export class NaoRobotModel extends DOMWidgetModel {
200226
// Add any extra serializers here
201227
};
202228

203-
// var qiSession = // TODO:
204229
static model_name = 'NaoRobotModel';
205230
static model_module = MODULE_NAME;
206231
static model_module_version = MODULE_VERSION;
@@ -232,10 +257,6 @@ export class NaoRobotView extends DOMWidgetView {
232257
this.synco.textContent = 'it should be here';
233258
this.el.appendChild(this.synco);
234259

235-
console.log('RENDERING');
236-
console.log(this.model.get('connected'), ' CONNECTED');
237-
console.log(this.model.get('synco'), ' SYNCO');
238-
239260
this.value_changed();
240261
this.model.on('change:connected', this.value_changed, this);
241262
this.model.on('change:status', this.value_changed, this);

0 commit comments

Comments
 (0)