Skip to content

Commit cc439da

Browse files
Merge pull request #8 from jupyter-robotics/dev
Restore lint check
2 parents 87a3793 + 0b5f302 commit cc439da

File tree

4 files changed

+241
-214
lines changed

4 files changed

+241
-214
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
- name: Linting
3434
if: ${{ matrix.os == 'ubuntu-latest' }}
3535
run: |
36-
echo "FIXME: yarn run lint:check"
36+
yarn run lint:check
3737
3838
- name: Check docs can be build + links
3939
if: ${{ matrix.os == 'ubuntu-latest' }}

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33

44
export * from './version';
55
export * from './widget';
6-
export * from './qimessaging';
6+
export * from './qimessaging';

src/qimessaging.ts

Lines changed: 188 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -1,168 +1,200 @@
11
/*
2-
** Copyright (C) Aldebaran Robotics
3-
** See COPYING for the license
4-
**
5-
** Author(s):
6-
** - Laurent LEC <llec@aldebaran-robotics.com>
7-
**
8-
*/
9-
import io from "nao-socket.io";
2+
** Copyright (C) Aldebaran Robotics
3+
** See COPYING for the license
4+
**
5+
** Author(s):
6+
** - Laurent LEC <llec@aldebaran-robotics.com>
7+
**
8+
*/
9+
import io from 'nao-socket.io';
10+
11+
interface replyType {
12+
__MetaObject?: any;
13+
[key: string]: any;
14+
}
15+
16+
interface signalType {
17+
connect?: any;
18+
disconnect?: any;
19+
setValue?: any;
20+
value?: any;
21+
}
1022

1123
export class QiSession {
12-
connected: Boolean = false;
13-
disconnected: any;
14-
host: any;
15-
service: any;
16-
17-
constructor(ipAddress: string = "nao.local", port: string = "80") {
18-
console.log("DBG Emile qim about to connect w/17");
19-
// @ts-ignore
20-
window["oioi"] = io;
21-
let _socket = io.connect(
22-
"nao:nao@" + ipAddress + ":" + port,
23-
{ resource: "libs/qimessaging/2/socket.io",
24-
'force new connection': true });
25-
// console.log("DBG Emile qim connecting..");
26-
let _dfd = new Array();
27-
let _sigs = new Array();
28-
let _idm = 0;
29-
30-
interface MetaObject {
31-
__MetaObject?: any;
24+
connected: any;
25+
disconnected: any;
26+
host: any;
27+
service: any;
28+
_dfd: Array<any>;
29+
_sigs: Array<any>;
30+
_idm: number;
31+
_socket: any;
32+
33+
constructor(
34+
ipAddress = 'nao.local',
35+
port = '80',
36+
connected?: 'function',
37+
disconnected?: 'function'
38+
) {
39+
this.connected = connected;
40+
this.disconnected = disconnected;
41+
console.log('DBG Emile qim about to connect w/17');
42+
this._socket = io.connect('nao:nao@' + ipAddress + ':' + port, {
43+
resource: 'libs/qimessaging/2/socket.io',
44+
'force new connection': true,
45+
});
46+
console.log('DBG Emile qim connecting..');
47+
this._dfd = [];
48+
this._sigs = [];
49+
this._idm = 0;
50+
51+
this._socket.on('reply', (data: any) => {
52+
console.log('DBG Emile qim reply');
53+
54+
const idm = data['idm'];
55+
if (
56+
data['result'] !== undefined &&
57+
data['result']['metaobject'] !== undefined
58+
) {
59+
const replyObject: replyType = {
60+
__MetaObject: data['result']['metaobject'],
61+
};
62+
63+
const pyobj = data['result']['pyobject'];
64+
this._sigs[pyobj] = [];
65+
const methods = replyObject.__MetaObject['methods'];
66+
67+
for (const i in methods) {
68+
const methodName = methods[i]['name'];
69+
replyObject[methodName] = this.createMetaCall(
70+
pyobj,
71+
methodName,
72+
'data'
73+
);
3274
}
3375

34-
_socket.on('reply', function (data : any) {
35-
// console.log("DBG Emile qim reply"); REMOVE
36-
let idm = data["idm"];
37-
if (data["result"] != null && data["result"]["metaobject"] != undefined) {
38-
// let o = new Object();
39-
let o : MetaObject = {
40-
__MetaObject: data["result"]["metaobject"],
41-
}
42-
43-
let pyobj = data["result"]["pyobject"];
44-
_sigs[pyobj] = new Array();
45-
let methods = o.__MetaObject["methods"];
46-
47-
for (let i in methods) {
48-
let methodName = methods[i]["name"];
49-
// @ts-ignore
50-
o[methodName] = createMetaCall(pyobj, methodName, "data");
51-
}
52-
let signals = o.__MetaObject["signals"];
53-
for (let i in signals) {
54-
let signalName = signals[i]["name"];
55-
// @ts-ignore
56-
o[signalName] = createMetaSignal(pyobj, signalName, false);
57-
}
58-
let properties = o.__MetaObject["properties"];
59-
for (let i in properties) {
60-
let propertyName = properties[i]["name"];
61-
// @ts-ignore
62-
o[propertyName] = createMetaSignal(pyobj, propertyName, true);
63-
}
64-
_dfd[idm].resolve(o);
65-
}
66-
else {
67-
if (_dfd[idm].__cbi != undefined) {
68-
let cbi = _dfd[idm].__cbi;
69-
_sigs[cbi["obj"]][cbi["signal"]][data["result"]] = cbi["cb"];
70-
}
71-
_dfd[idm].resolve(data["result"]);
72-
}
73-
delete _dfd[idm];
74-
});
75-
_socket.on('error', function (data : any) {
76-
// console.log("DBG Emile qim error"); REMOVE
77-
if (data["idm"] != undefined) {
78-
_dfd[data["idm"]].reject(data["result"]);
79-
delete _dfd[data["idm"]];
80-
}
81-
});
82-
_socket.on('signal', function (data : any) {
83-
// console.log("DBG Emile qim signal"); REMOVE
84-
let res = data["result"];
85-
let callback = _sigs[res["obj"]][res["signal"]][res["link"]];
86-
if (callback != undefined) {
87-
// @ts-ignore
88-
callback.apply(this, res["data"]);
89-
}
90-
});
91-
_socket.on('disconnect', function (data : any) {
92-
// console.log("DBG Emile qim disconnect"); REMOVE
93-
for (let idm in _dfd) {
94-
_dfd[idm].reject("Call " + idm + " canceled: disconnected");
95-
delete _dfd[idm];
96-
}
97-
// @ts-ignore
98-
if (this.disconnected) {
99-
// disconnected();
100-
console.log("DBG Isabel disconnected");
101-
}
102-
});
103-
function createMetaCall(obj : any, member : any, data : any) {
104-
return function () {
105-
let idm = ++_idm;
106-
let args = Array.prototype.slice.call(arguments, 0);
107-
let promise = new Promise(function (resolve, reject) {
108-
_dfd[idm] = { resolve: resolve, reject: reject };
109-
});
110-
if (args[0] == "connect") {
111-
_dfd[idm].__cbi = data;
112-
}
113-
_socket.emit('call', { idm: idm, params: { obj: obj, member: member, args: args } });
114-
return promise;
115-
};
76+
const signals = replyObject.__MetaObject['signals'];
77+
for (const i in signals) {
78+
const signalName = signals[i]['name'];
79+
replyObject[signalName] = this.createMetaSignal(
80+
pyobj,
81+
signalName,
82+
false
83+
);
11684
}
11785

118-
interface sObject {
119-
connect?: any;
120-
disconnect?: any;
121-
setValue?: any;
122-
value?: any;
86+
const properties = replyObject.__MetaObject['properties'];
87+
for (const i in properties) {
88+
const propertyName = properties[i]['name'];
89+
replyObject[propertyName] = this.createMetaSignal(
90+
pyobj,
91+
propertyName,
92+
true
93+
);
94+
}
12395

124-
};
125-
function createMetaSignal(obj : any, signal : any, isProperty : any) {
126-
// let s = new Object();
127-
let s : sObject = {};
128-
_sigs[obj][signal] = new Array();
129-
s.connect = function (cb : any) {
130-
// @ts-ignore
131-
return createMetaCall(obj, signal, { obj: obj, signal: signal, cb: cb })("connect");
132-
};
133-
134-
// @ts-ignore
135-
s.disconnect = function (l) {
136-
delete _sigs[obj][signal][l];
137-
// @ts-ignore
138-
return createMetaCall(obj, signal, "data")("disconnect", l);
139-
};
140-
if (!isProperty) {
141-
return s;
142-
}
143-
s.setValue = function () {
144-
let args = Array.prototype.slice.call(arguments, 0);
145-
// @ts-ignore
146-
return createMetaCall(obj, signal, "data").apply(this, ["setValue"].concat(args));
147-
};
148-
s.value = function () {
149-
// @ts-ignore
150-
return createMetaCall(obj, signal, "data")("value");
151-
};
152-
return s;
96+
this._dfd[idm].resolve(replyObject);
97+
} else {
98+
if (this._dfd[idm].__cbi !== undefined) {
99+
const cbi = this._dfd[idm].__cbi;
100+
this._sigs[cbi['obj']][cbi['signal']][data['result']] = cbi['cb'];
153101
}
102+
this._dfd[idm].resolve(data['result']);
103+
}
104+
delete this._dfd[idm];
105+
});
106+
107+
this._socket.on('error', (data: any) => {
108+
console.log('DBG Emile qim error');
109+
if (data['idm'] !== undefined) {
110+
this._dfd[data['idm']].reject(data['result']);
111+
delete this._dfd[data['idm']];
112+
}
113+
});
154114

155-
this.service = createMetaCall("ServiceDirectory", "service", "data");
156-
// let _self = this;
157-
_socket.on('connect', function () {
158-
// console.log("DBG Emile qim connect"); REMOVE
159-
// @ts-ignore
160-
if (this.connected) {
161-
// connected(_self);
162-
console.log("DBG Isabel already connected");
163-
164-
}
165-
});
166-
// console.log("DBG Emile qim done with init"); REMOVE
115+
this._socket.on('signal', (data: any) => {
116+
console.log('DBG Emile qim signal');
117+
const result = data['result'];
118+
const callback =
119+
this._sigs[result['obj']][result['signal']][result['link']];
120+
if (callback !== undefined) {
121+
callback.apply(this, result['data']);
122+
}
123+
});
124+
125+
this._socket.on('disconnect', (data: any) => {
126+
console.log('DBG Emile qim disconnect');
127+
for (const idm in this._dfd) {
128+
this._dfd[idm].reject('Call ' + idm + ' canceled: disconnected');
129+
delete this._dfd[idm];
130+
}
131+
132+
if (this.disconnected) {
133+
this.disconnected();
134+
}
135+
});
136+
137+
this.service = this.createMetaCall('ServiceDirectory', 'service', 'data');
138+
139+
this._socket.on('connect', () => {
140+
console.log('DBG Emile qim connect');
141+
if (this.connected) {
142+
this.connected(this);
143+
}
144+
});
145+
146+
console.log('DBG Emile qim done with init');
147+
}
148+
149+
createMetaCall(obj: any, member: any, data: any) {
150+
return (...serviceArgs: any[]) => {
151+
++this._idm;
152+
153+
const promise = new Promise((resolve, reject) => {
154+
this._dfd[this._idm] = { resolve: resolve, reject: reject };
155+
});
156+
if (serviceArgs[0] === 'connect') {
157+
this._dfd[this._idm].__cbi = data;
158+
}
159+
this._socket.emit('call', {
160+
idm: this._idm,
161+
params: { obj: obj, member: member, args: serviceArgs },
162+
});
163+
return promise;
164+
};
165+
}
166+
167+
createMetaSignal(obj: any, signal: any, isProperty: boolean) {
168+
const signalObject: signalType = {};
169+
this._sigs[obj][signal] = [];
170+
signalObject.connect = (cb: any) => {
171+
return this.createMetaCall(obj, signal, {
172+
obj: obj,
173+
signal: signal,
174+
cb: cb,
175+
})('connect');
176+
};
177+
178+
signalObject.disconnect = (args: any) => {
179+
delete this._sigs[obj][signal][args];
180+
return this.createMetaCall(obj, signal, 'data')('disconnect', args);
181+
};
182+
183+
if (!isProperty) {
184+
return signalObject;
167185
}
186+
187+
signalObject.setValue = (...valueArgs: any[]) => {
188+
return this.createMetaCall(obj, signal, 'data').apply(
189+
this,
190+
['setValue'].concat(valueArgs)
191+
);
192+
};
193+
194+
signalObject.value = () => {
195+
return this.createMetaCall(obj, signal, 'data')('value');
196+
};
197+
198+
return signalObject;
199+
}
168200
}

0 commit comments

Comments
 (0)