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.
Files changed (53) hide show
  1. package/README.md +4 -1
  2. package/app.js +142 -0
  3. package/bin/argv.js +59 -84
  4. package/bin/cli.js +39 -54
  5. package/bin/configurer.js +37 -66
  6. package/bin/proxyer.js +54 -88
  7. package/bin/register.js +44 -95
  8. package/bin/starter.js +66 -129
  9. package/index.js +149 -9
  10. package/index.mjs +4 -0
  11. package/modules/http/index.js +180 -0
  12. package/modules/http/utils.js +73 -0
  13. package/modules/index.js +88 -0
  14. package/modules/module.js +16 -0
  15. package/modules/socketio/client.js +101 -0
  16. package/modules/socketio/index.js +148 -0
  17. package/modules/socketio/server.js +130 -0
  18. package/modules/socketio/socket.js +4 -0
  19. package/package.json +35 -17
  20. package/types/app.d.ts +37 -0
  21. package/types/bin/argv.d.ts +8 -0
  22. package/types/bin/cli.d.ts +2 -0
  23. package/types/bin/configurer.d.ts +1 -0
  24. package/types/bin/proxyer.d.ts +1 -0
  25. package/types/bin/register.d.ts +1 -0
  26. package/types/bin/starter.d.ts +1 -0
  27. package/types/index.d.ts +70 -0
  28. package/types/modules/http/index.d.ts +47 -0
  29. package/types/modules/http/utils.d.ts +17 -0
  30. package/types/modules/index.d.ts +23 -0
  31. package/types/modules/module.d.ts +11 -0
  32. package/types/modules/socketio/client.d.ts +23 -0
  33. package/types/modules/socketio/index.d.ts +35 -0
  34. package/types/modules/socketio/server.d.ts +35 -0
  35. package/types/modules/socketio/socket.d.ts +11 -0
  36. package/types/utils.d.ts +6 -0
  37. package/utils.js +63 -0
  38. package/.gitattributes +0 -2
  39. package/global.class.js +0 -124
  40. package/global.js +0 -13
  41. package/rpc/config.class.js +0 -48
  42. package/rpc/context.class.js +0 -15
  43. package/rpc/http.class.js +0 -327
  44. package/rpc/rpc.class.js +0 -130
  45. package/rpc/rpc.interface.class.js +0 -121
  46. package/rpc/socketio.class.js +0 -231
  47. package/service/service.class.js +0 -86
  48. package/service/socketio.class.js +0 -188
  49. package/setMap.class.js +0 -67
  50. package/socketio/client.class.js +0 -190
  51. package/socketio/server.class.js +0 -222
  52. package/socketio/socket.class.js +0 -23
  53. package/util.js +0 -352
@@ -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
- }
@@ -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
- }
@@ -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
- }