9
9
import io from 'nao-socket.io' ;
10
10
11
11
export class QiSession {
12
- connected : Boolean = false ;
12
+ connected : any ;
13
13
disconnected : any ;
14
14
host : any ;
15
15
service : any ;
16
-
17
- constructor ( ipAddress : string = 'nao.local' , port : string = '80' ) {
16
+ _dfd : Array < any > ;
17
+ _sigs : Array < any > ;
18
+ _idm : number ;
19
+ _socket : any ;
20
+
21
+ constructor (
22
+ ipAddress : string = 'nao.local' ,
23
+ port : string = '80' ,
24
+ connected ?: any ,
25
+ disconnected ?: any
26
+ ) {
27
+ this . connected = connected ;
28
+ this . disconnected = disconnected ;
18
29
console . log ( 'DBG Emile qim about to connect w/17' ) ;
19
- let _socket = io . connect ( 'nao:nao@' + ipAddress + ':' + port , {
30
+ let _socket = this . _socket = io . connect ( 'nao:nao@' + ipAddress + ':' + port , {
20
31
resource : 'libs/qimessaging/2/socket.io' ,
21
32
'force new connection' : true ,
22
33
} ) ;
23
34
console . log ( 'DBG Emile qim connecting..' ) ;
24
- let _dfd = new Array ( ) ;
25
- let _sigs = new Array ( ) ;
26
- let _idm = 0 ;
35
+ let _dfd = this . _dfd = new Array ( ) ;
36
+ let _sigs = this . _sigs = new Array ( ) ;
37
+ this . _idm = 0 ;
27
38
28
39
interface replyType {
29
40
__MetaObject ?: any ,
30
41
[ key : string ] : any ,
31
42
}
32
43
33
44
34
- _socket . on ( 'reply' , function ( data : any ) {
45
+ _socket . on ( 'reply' , ( data : any ) => {
35
46
console . log ( 'DBG Emile qim reply' ) ;
36
47
// @ts -ignore
37
48
window [ 'datata' ] = data ;
38
49
console . log ( "here's the datata" , data ) ; // REMOVE
39
50
40
51
let idm = data [ 'idm' ] ;
41
52
if ( data [ 'result' ] != null && data [ 'result' ] [ 'metaobject' ] != undefined ) {
42
- // let o = new Object();
43
53
let replyObject : replyType = {
44
54
__MetaObject : data [ 'result' ] [ 'metaobject' ] ,
45
55
} ;
@@ -50,17 +60,17 @@ export class QiSession {
50
60
51
61
for ( let i in methods ) {
52
62
let methodName = methods [ i ] [ 'name' ] ;
53
- replyObject [ methodName ] = createMetaCall ( pyobj , methodName , 'data' ) ;
63
+ replyObject [ methodName ] = this . createMetaCall ( pyobj , methodName , 'data' ) ;
54
64
}
55
65
let signals = replyObject . __MetaObject [ 'signals' ] ;
56
66
for ( let i in signals ) {
57
67
let signalName = signals [ i ] [ 'name' ] ;
58
- replyObject [ signalName ] = createMetaSignal ( pyobj , signalName , false ) ;
68
+ replyObject [ signalName ] = this . createMetaSignal ( pyobj , signalName , false ) ;
59
69
}
60
70
let properties = replyObject . __MetaObject [ 'properties' ] ;
61
71
for ( let i in properties ) {
62
72
let propertyName = properties [ i ] [ 'name' ] ;
63
- replyObject [ propertyName ] = createMetaSignal ( pyobj , propertyName , true ) ;
73
+ replyObject [ propertyName ] = this . createMetaSignal ( pyobj , propertyName , true ) ;
64
74
}
65
75
_dfd [ idm ] . resolve ( replyObject ) ;
66
76
@@ -87,100 +97,90 @@ export class QiSession {
87
97
}
88
98
} ) ;
89
99
90
- _socket . on ( 'signal' , function ( data : any ) {
100
+ _socket . on ( 'signal' , ( data : any ) => {
91
101
console . log ( "DBG Emile qim signal" ) ;
92
102
let res = data [ 'result' ] ;
93
103
let callback = _sigs [ res [ 'obj' ] ] [ res [ 'signal' ] ] [ res [ 'link' ] ] ;
94
104
if ( callback != undefined ) {
95
- // @ts -ignore
96
105
callback . apply ( this , res [ 'data' ] ) ;
97
106
}
98
107
} ) ;
99
108
100
- _socket . on ( 'disconnect' , function ( data : any ) {
109
+ _socket . on ( 'disconnect' , ( data : any ) => {
101
110
console . log ( "DBG Emile qim disconnect" ) ;
102
111
for ( let idm in _dfd ) {
103
112
_dfd [ idm ] . reject ( 'Call ' + idm + ' canceled: disconnected' ) ;
104
113
delete _dfd [ idm ] ;
105
114
}
106
- // @ts -ignore
115
+
107
116
if ( this . disconnected ) {
108
- // disconnected();
117
+ this . disconnected ( ) ;
109
118
console . log ( 'DBG Isabel disconnected' ) ;
110
119
}
111
120
} ) ;
112
121
113
- function createMetaCall ( obj : any , member : any , data : any ) {
114
- return function ( ) {
115
- let idm = ++ _idm ;
116
- let args = Array . prototype . slice . call ( arguments , 0 ) ;
117
- let promise = new Promise ( function ( resolve , reject ) {
118
- _dfd [ idm ] = { resolve : resolve , reject : reject } ;
119
- } ) ;
120
- if ( args [ 0 ] == 'connect' ) {
121
- _dfd [ idm ] . __cbi = data ;
122
- }
123
- _socket . emit ( 'call' , {
124
- idm : idm ,
125
- params : { obj : obj , member : member , args : args } ,
126
- } ) ;
127
- return promise ;
128
- } ;
129
- }
130
-
131
- interface signalType {
132
- connect ?: any ;
133
- disconnect ?: any ;
134
- setValue ?: any ;
135
- value ?: any ;
136
- }
137
-
138
- function createMetaSignal ( obj : any , signal : any , isProperty : any ) {
139
- let signalObject : signalType = { } ;
140
- _sigs [ obj ] [ signal ] = new Array ( ) ;
141
- signalObject . connect = function ( cb : any ) {
142
- return createMetaCall ( obj , signal , {
143
- obj : obj ,
144
- signal : signal ,
145
- cb : cb ,
146
- // @ts -ignore
147
- } ) ( 'connect' ) ;
148
- } ;
149
-
150
- // @ts -ignore
151
- signalObject . disconnect = function ( l ) {
152
- delete _sigs [ obj ] [ signal ] [ l ] ;
153
- // @ts -ignore
154
- return createMetaCall ( obj , signal , 'data' ) ( 'disconnect' , l ) ;
155
- } ;
156
- if ( ! isProperty ) {
157
- return signalObject ;
158
- }
159
- signalObject . setValue = function ( ) {
160
- let args = Array . prototype . slice . call ( arguments , 0 ) ;
161
- return createMetaCall ( obj , signal , 'data' ) . apply (
162
- this ,
163
- // @ts -ignore
164
- [ 'setValue' ] . concat ( args )
165
- ) ;
166
- } ;
167
- signalObject . value = function ( ) {
168
- // @ts -ignore
169
- return createMetaCall ( obj , signal , 'data' ) ( 'value' ) ;
170
- } ;
171
- return signalObject ;
172
- }
122
+
173
123
174
- this . service = createMetaCall ( 'ServiceDirectory' , 'service' , 'data' ) ;
124
+
125
+ this . service = this . createMetaCall ( 'ServiceDirectory' , 'service' , 'data' ) ;
175
126
// let _self = this;
176
- _socket . on ( 'connect' , function ( ) {
127
+ _socket . on ( 'connect' , ( ) => {
177
128
console . log ( "DBG Emile qim connect" ) ;
178
129
// @ts -ignore
179
130
if ( this . connected ) {
180
- // connected(_self );
131
+ this . connected ( this ) ;
181
132
console . log ( 'DBG Isabel already connected' ) ;
182
133
}
183
134
} ) ;
184
135
console . log ( "DBG Emile qim done with init" ) ;
185
136
}
137
+
138
+ createMetaCall ( obj : any , member : any , data : any ) {
139
+ return ( ...serviceArgs : any [ ] ) => {
140
+ let idm = ++ this . _idm ;
141
+ let args = Array . prototype . slice . call ( serviceArgs , 0 ) ;
142
+ let promise = new Promise ( ( resolve , reject ) => {
143
+ this . _dfd [ idm ] = { resolve : resolve , reject : reject } ;
144
+ } ) ;
145
+ if ( args [ 0 ] == 'connect' ) {
146
+ this . _dfd [ idm ] . __cbi = data ;
147
+ }
148
+ this . _socket . emit ( 'call' , {
149
+ idm : idm ,
150
+ params : { obj : obj , member : member , args : args } ,
151
+ } ) ;
152
+ return promise ;
153
+ } ;
154
+ }
155
+
156
+ createMetaSignal ( obj : any , signal : any , isProperty : any ) {
157
+ let signalObject : any = { } ;
158
+ this . _sigs [ obj ] [ signal ] = new Array ( ) ;
159
+ signalObject . connect = ( cb : any ) => {
160
+ return this . createMetaCall ( obj , signal , {
161
+ obj : obj ,
162
+ signal : signal ,
163
+ cb : cb ,
164
+ } ) ( 'connect' ) ;
165
+ } ;
166
+
167
+ signalObject . disconnect = ( l : any ) => {
168
+ delete this . _sigs [ obj ] [ signal ] [ l ] ;
169
+ return this . createMetaCall ( obj , signal , 'data' ) ( 'disconnect' , l ) ;
170
+ } ;
171
+ if ( ! isProperty ) {
172
+ return signalObject ;
173
+ }
174
+ signalObject . setValue = ( ) => {
175
+ let args = Array . prototype . slice . call ( arguments , 0 ) ;
176
+ return this . createMetaCall ( obj , signal , 'data' ) . apply (
177
+ this ,
178
+ [ 'setValue' ] . concat ( args )
179
+ ) ;
180
+ } ;
181
+ signalObject . value = ( ) => {
182
+ return this . createMetaCall ( obj , signal , 'data' ) ( 'value' ) ;
183
+ } ;
184
+ return signalObject ;
185
+ }
186
186
}
0 commit comments