oox 0.0.7 → 0.2.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 +143 -139
- package/global.js +118 -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 +311 -326
- package/rpc/rpc.class.js +231 -130
- package/rpc/rpc.interface.class.js +119 -121
- package/rpc/socketio.class.js +222 -230
- package/service/service.class.js +73 -76
- package/service/socketio.class.js +144 -190
- 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 +224 -352
- package/global.class.js +0 -124
package/socketio/client.class.js
CHANGED
|
@@ -1,190 +1,190 @@
|
|
|
1
|
-
|
|
2
|
-
const SocketIOClient = require ( 'socket.io-client' )
|
|
3
|
-
|
|
4
|
-
const Socket = require ( './socket.class' )
|
|
5
|
-
|
|
6
|
-
const SocketIOServer = require ( './server.class' )
|
|
7
|
-
|
|
8
|
-
const Global = require ( '../global' )
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
module.exports = class SocketIOCore extends SocketIOServer {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* 连接RPC服务
|
|
18
|
-
* @param {String} url ws服务器地址
|
|
19
|
-
* @param {String} caller 本地服务名称
|
|
20
|
-
* @returns {Promise<Socket>}
|
|
21
|
-
*/
|
|
22
|
-
static async connect ( url, caller = null ) {
|
|
23
|
-
|
|
24
|
-
let socket = Global.sockets.get ( url )
|
|
25
|
-
|
|
26
|
-
// 已经连接的直接返回
|
|
27
|
-
if ( socket ) {
|
|
28
|
-
|
|
29
|
-
try {
|
|
30
|
-
|
|
31
|
-
await this.waitConnection ( socket )
|
|
32
|
-
} catch ( error ) {
|
|
33
|
-
|
|
34
|
-
this.onSocketDisconnect ( socket, error )
|
|
35
|
-
|
|
36
|
-
throw error
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return socket
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if ( !caller ) throw new Error ( 'Caller Required' )
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const headers = {
|
|
47
|
-
'x-caller': String ( caller )
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const [ callerServer ] = Global.socketIOServers.filter ( server => server.name === caller )
|
|
53
|
-
|
|
54
|
-
if ( callerServer ) {
|
|
55
|
-
|
|
56
|
-
const { host, port, path } = callerServer
|
|
57
|
-
|
|
58
|
-
headers [ 'x-ip' ] = host
|
|
59
|
-
|
|
60
|
-
headers [ 'x-caller-id' ] = `ws://${host}:${port}${path}`
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
// create socket handler
|
|
66
|
-
const mURL = new URL ( url )
|
|
67
|
-
|
|
68
|
-
socket = SocketIOClient.io ( mURL.origin, {
|
|
69
|
-
extraHeaders: headers,
|
|
70
|
-
path: mURL.pathname
|
|
71
|
-
} )
|
|
72
|
-
|
|
73
|
-
socket.data = { connected: false, id: url, host: mURL.host, owner: caller }
|
|
74
|
-
|
|
75
|
-
Global.sockets.set ( url, socket )
|
|
76
|
-
|
|
77
|
-
this.onSocketCreated ( socket )
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
try {
|
|
82
|
-
|
|
83
|
-
await this.waitConnection ( socket )
|
|
84
|
-
} catch ( error ) {
|
|
85
|
-
|
|
86
|
-
this.onSocketDisconnect ( socket, error )
|
|
87
|
-
|
|
88
|
-
throw error
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
return socket
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
static onSocketCreated ( socket ) {
|
|
97
|
-
|
|
98
|
-
socket.once ( 'disconnect', reason => this.onSocketDisconnect ( socket, reason ) )
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* 客户端Socket连接事件
|
|
105
|
-
* @param {Socket} socket
|
|
106
|
-
*/
|
|
107
|
-
static onSocketConnection ( socket ) {
|
|
108
|
-
|
|
109
|
-
socket.data.connected = true
|
|
110
|
-
|
|
111
|
-
this.onConnection ( socket )
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
static onConnection ( socket ) { }
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* 客户端Socket断开事件
|
|
122
|
-
* @param {Socket} socket
|
|
123
|
-
*/
|
|
124
|
-
static onSocketDisconnect ( socket, reason ) {
|
|
125
|
-
|
|
126
|
-
socket.data.connected = false
|
|
127
|
-
|
|
128
|
-
socket.disconnect ( true )
|
|
129
|
-
|
|
130
|
-
Global.sockets.delete ( socket.data.id )
|
|
131
|
-
|
|
132
|
-
this.onDisconnect ( socket, reason )
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
static onDisconnect ( socket, reason ) { }
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* 等待socket连接
|
|
143
|
-
* @param {Socket} socket
|
|
144
|
-
*/
|
|
145
|
-
static async waitConnection ( socket ) {
|
|
146
|
-
|
|
147
|
-
if ( socket.data.connected ) return
|
|
148
|
-
|
|
149
|
-
if ( socket.connect ) socket.connect ( )
|
|
150
|
-
|
|
151
|
-
try {
|
|
152
|
-
|
|
153
|
-
await new Promise ( function ( resolve, reject ) {
|
|
154
|
-
|
|
155
|
-
const onError = function ( reason ) {
|
|
156
|
-
|
|
157
|
-
socket.offAny ( onError )
|
|
158
|
-
|
|
159
|
-
const message = 'string' === typeof reason ? reason : reason.message
|
|
160
|
-
|
|
161
|
-
reject ( new Error ( `SocketIO name[${socket.data.name}] id[${socket.data.id}] ${message}` ) )
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
socket.once ( 'disconnect', onError )
|
|
165
|
-
|
|
166
|
-
socket.once ( 'connect_error', onError )
|
|
167
|
-
|
|
168
|
-
socket.once ( 'connect_timeout', onError )
|
|
169
|
-
|
|
170
|
-
socket.once ( 'reconnect_error', onError )
|
|
171
|
-
|
|
172
|
-
socket.once ( 'reconnect_failed', onError )
|
|
173
|
-
|
|
174
|
-
socket.once ( 'oox_connected', function ( { name } ) {
|
|
175
|
-
|
|
176
|
-
socket.offAny ( onError )
|
|
177
|
-
|
|
178
|
-
socket.data.name = name
|
|
179
|
-
|
|
180
|
-
resolve ( )
|
|
181
|
-
} )
|
|
182
|
-
} )
|
|
183
|
-
} catch ( error ) {
|
|
184
|
-
|
|
185
|
-
throw new Error ( error.message )
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
this.onSocketConnection ( socket )
|
|
189
|
-
}
|
|
1
|
+
|
|
2
|
+
const SocketIOClient = require ( 'socket.io-client' )
|
|
3
|
+
|
|
4
|
+
const Socket = require ( './socket.class' )
|
|
5
|
+
|
|
6
|
+
const SocketIOServer = require ( './server.class' )
|
|
7
|
+
|
|
8
|
+
const Global = require ( '../global' )
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
module.exports = class SocketIOCore extends SocketIOServer {
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 连接RPC服务
|
|
18
|
+
* @param {String} url ws服务器地址
|
|
19
|
+
* @param {String} caller 本地服务名称
|
|
20
|
+
* @returns {Promise<Socket>}
|
|
21
|
+
*/
|
|
22
|
+
static async connect ( url, caller = null ) {
|
|
23
|
+
|
|
24
|
+
let socket = Global.sockets.get ( url )
|
|
25
|
+
|
|
26
|
+
// 已经连接的直接返回
|
|
27
|
+
if ( socket ) {
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
|
|
31
|
+
await this.waitConnection ( socket )
|
|
32
|
+
} catch ( error ) {
|
|
33
|
+
|
|
34
|
+
this.onSocketDisconnect ( socket, error )
|
|
35
|
+
|
|
36
|
+
throw error
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return socket
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if ( !caller ) throw new Error ( 'Caller Required' )
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
const headers = {
|
|
47
|
+
'x-caller': String ( caller )
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
const [ callerServer ] = Global.socketIOServers.filter ( server => server.name === caller )
|
|
53
|
+
|
|
54
|
+
if ( callerServer ) {
|
|
55
|
+
|
|
56
|
+
const { host, port, path } = callerServer
|
|
57
|
+
|
|
58
|
+
headers [ 'x-ip' ] = host
|
|
59
|
+
|
|
60
|
+
headers [ 'x-caller-id' ] = `ws://${host}:${port}${path}`
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
// create socket handler
|
|
66
|
+
const mURL = new URL ( url )
|
|
67
|
+
|
|
68
|
+
socket = SocketIOClient.io ( mURL.origin, {
|
|
69
|
+
extraHeaders: headers,
|
|
70
|
+
path: mURL.pathname
|
|
71
|
+
} )
|
|
72
|
+
|
|
73
|
+
socket.data = { connected: false, id: url, host: mURL.host, owner: caller }
|
|
74
|
+
|
|
75
|
+
Global.sockets.set ( url, socket )
|
|
76
|
+
|
|
77
|
+
this.onSocketCreated ( socket )
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
try {
|
|
82
|
+
|
|
83
|
+
await this.waitConnection ( socket )
|
|
84
|
+
} catch ( error ) {
|
|
85
|
+
|
|
86
|
+
this.onSocketDisconnect ( socket, error )
|
|
87
|
+
|
|
88
|
+
throw error
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return socket
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
static onSocketCreated ( socket ) {
|
|
97
|
+
|
|
98
|
+
socket.once ( 'disconnect', reason => this.onSocketDisconnect ( socket, reason ) )
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* 客户端Socket连接事件
|
|
105
|
+
* @param {Socket} socket
|
|
106
|
+
*/
|
|
107
|
+
static onSocketConnection ( socket ) {
|
|
108
|
+
|
|
109
|
+
socket.data.connected = true
|
|
110
|
+
|
|
111
|
+
this.onConnection ( socket )
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
static onConnection ( socket ) { }
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* 客户端Socket断开事件
|
|
122
|
+
* @param {Socket} socket
|
|
123
|
+
*/
|
|
124
|
+
static onSocketDisconnect ( socket, reason ) {
|
|
125
|
+
|
|
126
|
+
socket.data.connected = false
|
|
127
|
+
|
|
128
|
+
socket.disconnect ( true )
|
|
129
|
+
|
|
130
|
+
Global.sockets.delete ( socket.data.id )
|
|
131
|
+
|
|
132
|
+
this.onDisconnect ( socket, reason )
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
static onDisconnect ( socket, reason ) { }
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* 等待socket连接
|
|
143
|
+
* @param {Socket} socket
|
|
144
|
+
*/
|
|
145
|
+
static async waitConnection ( socket ) {
|
|
146
|
+
|
|
147
|
+
if ( socket.data.connected ) return
|
|
148
|
+
|
|
149
|
+
if ( socket.connect ) socket.connect ( )
|
|
150
|
+
|
|
151
|
+
try {
|
|
152
|
+
|
|
153
|
+
await new Promise ( function ( resolve, reject ) {
|
|
154
|
+
|
|
155
|
+
const onError = function ( reason ) {
|
|
156
|
+
|
|
157
|
+
socket.offAny ( onError )
|
|
158
|
+
|
|
159
|
+
const message = 'string' === typeof reason ? reason : reason.message
|
|
160
|
+
|
|
161
|
+
reject ( new Error ( `SocketIO name[${socket.data.name}] id[${socket.data.id}] ${message}` ) )
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
socket.once ( 'disconnect', onError )
|
|
165
|
+
|
|
166
|
+
socket.once ( 'connect_error', onError )
|
|
167
|
+
|
|
168
|
+
socket.once ( 'connect_timeout', onError )
|
|
169
|
+
|
|
170
|
+
socket.once ( 'reconnect_error', onError )
|
|
171
|
+
|
|
172
|
+
socket.once ( 'reconnect_failed', onError )
|
|
173
|
+
|
|
174
|
+
socket.once ( 'oox_connected', function ( { name } ) {
|
|
175
|
+
|
|
176
|
+
socket.offAny ( onError )
|
|
177
|
+
|
|
178
|
+
socket.data.name = name
|
|
179
|
+
|
|
180
|
+
resolve ( )
|
|
181
|
+
} )
|
|
182
|
+
} )
|
|
183
|
+
} catch ( error ) {
|
|
184
|
+
|
|
185
|
+
throw new Error ( error.message )
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
this.onSocketConnection ( socket )
|
|
189
|
+
}
|
|
190
190
|
}
|