oox 0.0.9 → 0.3.0-beta1
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/README.md +4 -1
- package/app.js +142 -0
- package/bin/argv.js +59 -84
- package/bin/cli.js +39 -54
- package/bin/configurer.js +37 -66
- package/bin/proxyer.js +54 -88
- package/bin/register.js +44 -95
- package/bin/starter.js +66 -129
- package/index.js +149 -9
- package/index.mjs +4 -0
- package/modules/http/index.js +180 -0
- package/modules/http/utils.js +73 -0
- package/modules/index.js +88 -0
- package/modules/module.js +16 -0
- package/modules/socketio/client.js +101 -0
- package/modules/socketio/index.js +148 -0
- package/modules/socketio/server.js +130 -0
- package/modules/socketio/socket.js +4 -0
- package/package.json +35 -17
- package/types/app.d.ts +37 -0
- package/types/bin/argv.d.ts +8 -0
- package/types/bin/cli.d.ts +2 -0
- package/types/bin/configurer.d.ts +1 -0
- package/types/bin/proxyer.d.ts +1 -0
- package/types/bin/register.d.ts +1 -0
- package/types/bin/starter.d.ts +1 -0
- package/types/index.d.ts +70 -0
- package/types/modules/http/index.d.ts +47 -0
- package/types/modules/http/utils.d.ts +17 -0
- package/types/modules/index.d.ts +23 -0
- package/types/modules/module.d.ts +11 -0
- package/types/modules/socketio/client.d.ts +23 -0
- package/types/modules/socketio/index.d.ts +35 -0
- package/types/modules/socketio/server.d.ts +35 -0
- package/types/modules/socketio/socket.d.ts +11 -0
- package/types/utils.d.ts +6 -0
- package/utils.js +63 -0
- package/.gitattributes +0 -2
- package/global.class.js +0 -124
- package/global.js +0 -13
- package/rpc/config.class.js +0 -48
- package/rpc/context.class.js +0 -15
- package/rpc/http.class.js +0 -327
- package/rpc/rpc.class.js +0 -130
- package/rpc/rpc.interface.class.js +0 -121
- package/rpc/socketio.class.js +0 -231
- package/service/service.class.js +0 -86
- package/service/socketio.class.js +0 -188
- package/setMap.class.js +0 -67
- package/socketio/client.class.js +0 -190
- package/socketio/server.class.js +0 -222
- package/socketio/socket.class.js +0 -23
- package/util.js +0 -352
package/socketio/client.class.js
DELETED
|
@@ -1,190 +0,0 @@
|
|
|
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
|
-
}
|
package/socketio/server.class.js
DELETED
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
const { getIPAddress } = require ( '../util' )
|
|
3
|
-
|
|
4
|
-
const http = require ( 'http' )
|
|
5
|
-
|
|
6
|
-
const SocketIO = require ( 'socket.io' )
|
|
7
|
-
|
|
8
|
-
const Socket = require ( './socket.class' )
|
|
9
|
-
|
|
10
|
-
const Global = require ( '../global' )
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
module.exports = class SocketIOServer {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* service name
|
|
20
|
-
*/
|
|
21
|
-
name = ''
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* service host ip
|
|
27
|
-
*/
|
|
28
|
-
host = getIPAddress ( 4 ) [ 0 ]
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* listen port
|
|
34
|
-
*/
|
|
35
|
-
port = 0
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* socket.io service path
|
|
41
|
-
*/
|
|
42
|
-
path = '/socket.io'
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* means this.server created by myself<SocketIOServer>
|
|
48
|
-
*/
|
|
49
|
-
#isSelfServer = false
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* @type {http.Server}
|
|
55
|
-
*/
|
|
56
|
-
server = null
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* @type {SocketIO.Server}
|
|
62
|
-
*/
|
|
63
|
-
socketServer = null
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
constructor ( name ) {
|
|
68
|
-
|
|
69
|
-
this.name = name
|
|
70
|
-
|
|
71
|
-
Global.socketIOServers.push ( this )
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
async serve ( ) {
|
|
77
|
-
|
|
78
|
-
await this.stop ( )
|
|
79
|
-
|
|
80
|
-
const port = this.port
|
|
81
|
-
|
|
82
|
-
const isRndPort = 'number' !== typeof port || port === 0
|
|
83
|
-
|
|
84
|
-
const isSelfServer = this.#isSelfServer = this.server ? true : false
|
|
85
|
-
|
|
86
|
-
const server = this.server = isSelfServer ? this.server :
|
|
87
|
-
http.createServer ( ( request, response ) => response.end ( 'No HTTP Gateway' ) )
|
|
88
|
-
|
|
89
|
-
if ( !server.listening ) server.listen ( isRndPort ? 0 : port )
|
|
90
|
-
|
|
91
|
-
this.port = server.address ( ).port
|
|
92
|
-
|
|
93
|
-
this.createSocketIOServer ( )
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
async stop ( ) {
|
|
99
|
-
|
|
100
|
-
if ( this.socketServer )
|
|
101
|
-
await new Promise ( ( resolve, reject ) =>
|
|
102
|
-
this.socketServer.close ( error => error ? reject ( error ) : resolve ( ) ) )
|
|
103
|
-
|
|
104
|
-
if ( this.#isSelfServer )
|
|
105
|
-
await new Promise ( ( resolve, reject ) => {
|
|
106
|
-
|
|
107
|
-
this.server.close ( function ( error ) {
|
|
108
|
-
|
|
109
|
-
if ( error ) reject ( error )
|
|
110
|
-
else resolve ( )
|
|
111
|
-
} )
|
|
112
|
-
} )
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
genOptions ( ) {
|
|
118
|
-
|
|
119
|
-
return {
|
|
120
|
-
/**
|
|
121
|
-
* name of the path to capture
|
|
122
|
-
* @default "/socket.io"
|
|
123
|
-
*/
|
|
124
|
-
path: this.path,
|
|
125
|
-
/**
|
|
126
|
-
* how many ms before a client without namespace is closed
|
|
127
|
-
* @default 45000
|
|
128
|
-
*/
|
|
129
|
-
connectTimeout: 5000,
|
|
130
|
-
/**
|
|
131
|
-
* how many ms without a pong packet to consider the connection closed
|
|
132
|
-
* @default 5000
|
|
133
|
-
*/
|
|
134
|
-
pingTimeout: 2000,
|
|
135
|
-
/**
|
|
136
|
-
* how many ms before sending a new ping packet
|
|
137
|
-
* @default 25000
|
|
138
|
-
*/
|
|
139
|
-
pingInterval: 10000,
|
|
140
|
-
/**
|
|
141
|
-
* how many bytes or characters a message can be, before closing the session (to avoid DoS).
|
|
142
|
-
* @default 1e5 (100 KB)
|
|
143
|
-
*/
|
|
144
|
-
maxHttpBufferSize: 1e5
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
createSocketIOServer ( ) {
|
|
151
|
-
|
|
152
|
-
const socketServer = this.socketServer = new SocketIO.Server ( this.server, this.genOptions ( ) )
|
|
153
|
-
|
|
154
|
-
socketServer.on ( 'connection', async socket => {
|
|
155
|
-
|
|
156
|
-
try {
|
|
157
|
-
|
|
158
|
-
await this.onSocketConnection ( socket )
|
|
159
|
-
} catch ( error ) {
|
|
160
|
-
|
|
161
|
-
socket.send ( error.message ).disconnect ( true )
|
|
162
|
-
}
|
|
163
|
-
} )
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* 服务端Socket连接事件
|
|
170
|
-
* @param {Socket} socket
|
|
171
|
-
*/
|
|
172
|
-
onSocketConnection ( socket ) {
|
|
173
|
-
|
|
174
|
-
const headers = socket.handshake.headers
|
|
175
|
-
|
|
176
|
-
const callerId = headers [ 'x-caller-id' ] || socket.id
|
|
177
|
-
|
|
178
|
-
// 已经存在相同的连接
|
|
179
|
-
if ( Global.sockets.has ( callerId ) ) throw new Error ( 'Connection Exists' )
|
|
180
|
-
|
|
181
|
-
// client ip or caller service ip
|
|
182
|
-
const ip = headers [ 'x-real-ip' ] || headers [ 'x-ip' ] || socket.handshake.address
|
|
183
|
-
|
|
184
|
-
// service name
|
|
185
|
-
const caller = headers [ 'x-caller' ] || 'anonymous'
|
|
186
|
-
|
|
187
|
-
socket.data = { connected: true, host: ip, name: caller, id: callerId, owner: this.name }
|
|
188
|
-
|
|
189
|
-
// 保存 callerId 与 socket 对应关系
|
|
190
|
-
Global.sockets.set ( callerId, socket )
|
|
191
|
-
|
|
192
|
-
socket.on ( 'disconnect', reason => this.onSocketDisconnect ( socket, new Error ( `SocketIO name[${caller}] id[${callerId}] ${reason}` ) ) )
|
|
193
|
-
|
|
194
|
-
socket.emit ( 'oox_connected', { name: this.name } )
|
|
195
|
-
|
|
196
|
-
this.onConnection ( socket )
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
onConnection ( socket ) { }
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* 服务端Socket断开事件
|
|
207
|
-
* @param {Socket} socket
|
|
208
|
-
* @param {Error} reason
|
|
209
|
-
*/
|
|
210
|
-
onSocketDisconnect ( socket, reason ) {
|
|
211
|
-
|
|
212
|
-
socket.data.connected = false
|
|
213
|
-
|
|
214
|
-
Global.sockets.delete ( socket.data.id )
|
|
215
|
-
|
|
216
|
-
this.onDisconnect ( socket, reason )
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
onDisconnect ( socket, reason ) { }
|
|
222
|
-
}
|
package/socketio/socket.class.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
const SocketIO = require ( 'socket.io' )
|
|
3
|
-
|
|
4
|
-
module.exports = class Socket extends SocketIO.Socket {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
static Data = {
|
|
9
|
-
connected: false,
|
|
10
|
-
host: '',
|
|
11
|
-
name: '',
|
|
12
|
-
id: '',
|
|
13
|
-
owner: ''
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Socket 扩展连接信息
|
|
20
|
-
* @type {Socket.Data}
|
|
21
|
-
*/
|
|
22
|
-
data = Object.assign ( { }, Socket.Data )
|
|
23
|
-
}
|