oox 0.0.9 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +2 -2
- package/LICENSE +21 -21
- package/README.md +29 -29
- package/bin/argv.js +95 -95
- package/bin/cli.js +57 -57
- package/bin/configurer.js +77 -77
- package/bin/proxyer.js +94 -94
- package/bin/register.js +104 -104
- package/bin/starter.js +139 -139
- package/global.js +143 -13
- package/index.js +5 -8
- package/middleware.js +167 -0
- package/package.json +17 -17
- package/rpc/config.class.js +47 -47
- package/rpc/context.class.js +14 -14
- package/rpc/http.class.js +326 -326
- package/rpc/rpc.class.js +128 -130
- package/rpc/rpc.interface.class.js +119 -121
- package/rpc/socketio.class.js +230 -230
- package/service/service.class.js +81 -85
- package/service/socketio.class.js +144 -187
- package/setMap.class.js +67 -67
- package/socketio/client.class.js +189 -189
- package/socketio/server.class.js +221 -221
- package/socketio/socket.class.js +22 -22
- package/util.js +373 -352
- package/global.class.js +0 -124
|
@@ -1,188 +1,145 @@
|
|
|
1
|
-
|
|
2
|
-
const RPCSocketIO = require ( '../rpc/socketio.class' )
|
|
3
|
-
|
|
4
|
-
const Socket = require ( '../socketio/socket.class' )
|
|
5
|
-
|
|
6
|
-
const Context = require ( '../rpc/context.class' )
|
|
7
|
-
|
|
8
|
-
const Global = require ( '../global' )
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
module.exports = class SocketIO extends RPCSocketIO {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* @param {Socket} socket
|
|
19
|
-
* @returns
|
|
20
|
-
*/
|
|
21
|
-
onConnection ( socket ) {
|
|
22
|
-
|
|
23
|
-
super.onConnection ( socket )
|
|
24
|
-
|
|
25
|
-
Global.socketIORegistry.add ( socket.data.name, socket.data.id )
|
|
26
|
-
|
|
27
|
-
socket.on ( 'syncConnection', async fn => {
|
|
28
|
-
|
|
29
|
-
if ( 'function' !== typeof fn ) return
|
|
30
|
-
|
|
31
|
-
const data = await this.onSyncConnection ( socket )
|
|
32
|
-
|
|
33
|
-
fn ( data )
|
|
34
|
-
} )
|
|
35
|
-
|
|
36
|
-
socket.on ( 'fetchActions', async ( search, fn ) => {
|
|
37
|
-
|
|
38
|
-
if ( 'function' !== typeof fn ) return
|
|
39
|
-
|
|
40
|
-
const data = await this.constructor.onFetchActions ( socket, search )
|
|
41
|
-
|
|
42
|
-
fn ( data )
|
|
43
|
-
} )
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
static
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
*
|
|
128
|
-
* @param {Socket} socket
|
|
129
|
-
* @param {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
*/
|
|
146
|
-
static onFetchActions ( socket, search ) {
|
|
147
|
-
|
|
148
|
-
const data = [ ]
|
|
149
|
-
|
|
150
|
-
const [ service ] = Global.instances.filter ( service => service.name === socket.data.owner )
|
|
151
|
-
|
|
152
|
-
if ( !service ) return data
|
|
153
|
-
|
|
154
|
-
for ( const key of service.kvMethods.keys ( ) )
|
|
155
|
-
if ( key.includes ( search ) ) data.push ( key )
|
|
156
|
-
|
|
157
|
-
return data
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
*
|
|
164
|
-
* @param {Socket} socket
|
|
165
|
-
* @param {String} id
|
|
166
|
-
* @param {String} action
|
|
167
|
-
* @param {Context} contextPrev
|
|
168
|
-
* @param {[]} params
|
|
169
|
-
*/
|
|
170
|
-
static async onProxyCall ( socket, id, action, params, contextPrev ) {
|
|
171
|
-
|
|
172
|
-
const context = Global.genContext ( contextPrev )
|
|
173
|
-
|
|
174
|
-
try {
|
|
175
|
-
|
|
176
|
-
return await this.call ( id, action, params, context )
|
|
177
|
-
} catch ( error ) {
|
|
178
|
-
|
|
179
|
-
return {
|
|
180
|
-
success: false,
|
|
181
|
-
error: {
|
|
182
|
-
message: error.message,
|
|
183
|
-
stack: error.stack
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
1
|
+
|
|
2
|
+
const RPCSocketIO = require ( '../rpc/socketio.class' )
|
|
3
|
+
|
|
4
|
+
const Socket = require ( '../socketio/socket.class' )
|
|
5
|
+
|
|
6
|
+
const Context = require ( '../rpc/context.class' )
|
|
7
|
+
|
|
8
|
+
const Global = require ( '../global' )
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
module.exports = class SocketIO extends RPCSocketIO {
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @param {Socket} socket
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
onConnection ( socket ) {
|
|
22
|
+
|
|
23
|
+
super.onConnection ( socket )
|
|
24
|
+
|
|
25
|
+
Global.socketIORegistry.add ( socket.data.name, socket.data.id )
|
|
26
|
+
|
|
27
|
+
socket.on ( 'syncConnection', async fn => {
|
|
28
|
+
|
|
29
|
+
if ( 'function' !== typeof fn ) return
|
|
30
|
+
|
|
31
|
+
const data = await this.onSyncConnection ( socket )
|
|
32
|
+
|
|
33
|
+
fn ( data )
|
|
34
|
+
} )
|
|
35
|
+
|
|
36
|
+
socket.on ( 'fetchActions', async ( search, fn ) => {
|
|
37
|
+
|
|
38
|
+
if ( 'function' !== typeof fn ) return
|
|
39
|
+
|
|
40
|
+
const data = await this.constructor.onFetchActions ( socket, search )
|
|
41
|
+
|
|
42
|
+
fn ( data )
|
|
43
|
+
} )
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
*
|
|
50
|
+
* @param {Socket} socket
|
|
51
|
+
* @returns
|
|
52
|
+
*/
|
|
53
|
+
onSyncConnection ( socket ) {
|
|
54
|
+
|
|
55
|
+
const sockets = Array.from ( Global.sockets.values ( ) )
|
|
56
|
+
.filter ( s =>
|
|
57
|
+
s !== socket &&
|
|
58
|
+
s.data.name !== socket.data.name &&
|
|
59
|
+
s.data.id.startsWith ( 'ws://' ) )
|
|
60
|
+
|
|
61
|
+
return sockets.map ( s => s.data )
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
*
|
|
68
|
+
* @param {Socket} socket
|
|
69
|
+
*/
|
|
70
|
+
onDisconnect ( socket, reason ) {
|
|
71
|
+
|
|
72
|
+
super.onDisconnect ( socket, reason )
|
|
73
|
+
|
|
74
|
+
Global.socketIORegistry.delete ( socket.data.name, socket.data.id )
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
*
|
|
81
|
+
* @param {Socket} socket
|
|
82
|
+
*/
|
|
83
|
+
static onConnection ( socket ) {
|
|
84
|
+
|
|
85
|
+
super.onConnection ( socket )
|
|
86
|
+
|
|
87
|
+
Global.socketIORegistry.add ( socket.data.name, socket.data.id )
|
|
88
|
+
|
|
89
|
+
socket.emit ( 'syncConnection', socketDatas => this.onSyncConnection ( socket, socketDatas ) )
|
|
90
|
+
|
|
91
|
+
socket.on ( 'fetchActions', async ( search, fn ) => {
|
|
92
|
+
|
|
93
|
+
if ( 'function' !== typeof fn ) return
|
|
94
|
+
|
|
95
|
+
const actions = await this.onFetchActions ( socket, search )
|
|
96
|
+
|
|
97
|
+
fn ( actions )
|
|
98
|
+
} )
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
static onDisconnect ( socket, reason ) {
|
|
104
|
+
|
|
105
|
+
super.onDisconnect ( socket, reason )
|
|
106
|
+
|
|
107
|
+
Global.socketIORegistry.delete ( socket.data.name, socket.data.id )
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
*
|
|
114
|
+
* @param {Socket} socket 是由哪个通道发送过来的
|
|
115
|
+
* @param {Socket.Data[]} socketDatas
|
|
116
|
+
*/
|
|
117
|
+
static onSyncConnection ( socket, socketDatas ) {
|
|
118
|
+
|
|
119
|
+
for ( const socketData of socketDatas )
|
|
120
|
+
if ( !Global.sockets.has ( socketData.id ) )
|
|
121
|
+
this.connect ( socketData.id, socket.data.owner ).catch ( error => console.error ( error ) )
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
*
|
|
128
|
+
* @param {Socket} socket
|
|
129
|
+
* @param {String} search
|
|
130
|
+
* @returns {String[]}
|
|
131
|
+
*/
|
|
132
|
+
static onFetchActions ( socket, search ) {
|
|
133
|
+
|
|
134
|
+
const data = [ ]
|
|
135
|
+
|
|
136
|
+
const [ service ] = Global.instances.filter ( service => service.name === socket.data.owner )
|
|
137
|
+
|
|
138
|
+
if ( !service ) return data
|
|
139
|
+
|
|
140
|
+
for ( const key of service.kvMethods.keys ( ) )
|
|
141
|
+
if ( !key.endsWith ( '_proxy' ) && key.includes ( search ) ) data.push ( key )
|
|
142
|
+
|
|
143
|
+
return data
|
|
144
|
+
}
|
|
188
145
|
}
|
package/setMap.class.js
CHANGED
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
|
|
2
|
-
module.exports = class SetMap {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @type {Map<String,Set>}
|
|
8
|
-
*/
|
|
9
|
-
map = new Map ( )
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
has ( name, node ) {
|
|
14
|
-
|
|
15
|
-
if ( !this.map.has ( name ) ) return false
|
|
16
|
-
|
|
17
|
-
if ( !node ) return true
|
|
18
|
-
|
|
19
|
-
const set = this.map.get ( name )
|
|
20
|
-
|
|
21
|
-
return set.has ( node )
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
add ( name, node ) {
|
|
27
|
-
|
|
28
|
-
if ( !this.map.has ( name ) ) {
|
|
29
|
-
|
|
30
|
-
this.map.set ( name, new Set ( [ node ] ) )
|
|
31
|
-
} else {
|
|
32
|
-
|
|
33
|
-
this.map.get ( name ).add ( node )
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
delete ( name, node ) {
|
|
40
|
-
|
|
41
|
-
if ( !this.map.has ( name ) ) return
|
|
42
|
-
|
|
43
|
-
if ( !node ) return void this.map.get ( name ).clear ( )
|
|
44
|
-
|
|
45
|
-
this.map.get ( name ).delete ( node )
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
get ( name ) {
|
|
51
|
-
|
|
52
|
-
if ( !name ) {
|
|
53
|
-
|
|
54
|
-
const result = Object.create ( null )
|
|
55
|
-
|
|
56
|
-
for ( const key of this.map.keys ( ) ) {
|
|
57
|
-
|
|
58
|
-
result [ key ] = this.get ( key )
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return result
|
|
62
|
-
} else if ( this.map.has ( name ) ) {
|
|
63
|
-
|
|
64
|
-
return Array.from ( this.map.get ( name ).values ( ) )
|
|
65
|
-
} else return [ ]
|
|
66
|
-
}
|
|
67
|
-
}
|
|
1
|
+
|
|
2
|
+
module.exports = class SetMap {
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @type {Map<String,Set>}
|
|
8
|
+
*/
|
|
9
|
+
map = new Map ( )
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
has ( name, node ) {
|
|
14
|
+
|
|
15
|
+
if ( !this.map.has ( name ) ) return false
|
|
16
|
+
|
|
17
|
+
if ( !node ) return true
|
|
18
|
+
|
|
19
|
+
const set = this.map.get ( name )
|
|
20
|
+
|
|
21
|
+
return set.has ( node )
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
add ( name, node ) {
|
|
27
|
+
|
|
28
|
+
if ( !this.map.has ( name ) ) {
|
|
29
|
+
|
|
30
|
+
this.map.set ( name, new Set ( [ node ] ) )
|
|
31
|
+
} else {
|
|
32
|
+
|
|
33
|
+
this.map.get ( name ).add ( node )
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
delete ( name, node ) {
|
|
40
|
+
|
|
41
|
+
if ( !this.map.has ( name ) ) return
|
|
42
|
+
|
|
43
|
+
if ( !node ) return void this.map.get ( name ).clear ( )
|
|
44
|
+
|
|
45
|
+
this.map.get ( name ).delete ( node )
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
get ( name ) {
|
|
51
|
+
|
|
52
|
+
if ( !name ) {
|
|
53
|
+
|
|
54
|
+
const result = Object.create ( null )
|
|
55
|
+
|
|
56
|
+
for ( const key of this.map.keys ( ) ) {
|
|
57
|
+
|
|
58
|
+
result [ key ] = this.get ( key )
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return result
|
|
62
|
+
} else if ( this.map.has ( name ) ) {
|
|
63
|
+
|
|
64
|
+
return Array.from ( this.map.get ( name ).values ( ) )
|
|
65
|
+
} else return [ ]
|
|
66
|
+
}
|
|
67
|
+
}
|