iosignal 3.0.1 → 3.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.
Files changed (40) hide show
  1. package/{docs/README.ko.md → README.ko.md} +204 -9
  2. package/README.md +424 -8
  3. package/dist/io.js +1 -1
  4. package/dist/io.js.map +1 -1
  5. package/dist/io.min.js +1 -1
  6. package/dist/io.min.js.map +1 -1
  7. package/dist/iosignal.js +131 -29
  8. package/examples/react-chat-js/package-lock.json +311 -216
  9. package/examples/react-chat-js/package.json +6 -6
  10. package/examples/react-chat-js/src/App.jsx +4 -4
  11. package/examples/server/package-lock.json +47 -0
  12. package/examples/svelte-chat-js/.devtools +3 -0
  13. package/examples/svelte-chat-js/README.md +38 -0
  14. package/examples/svelte-chat-js/package-lock.json +1505 -0
  15. package/examples/svelte-chat-js/package.json +22 -0
  16. package/examples/svelte-chat-js/src/app.css +105 -0
  17. package/examples/svelte-chat-js/src/app.d.ts +13 -0
  18. package/examples/svelte-chat-js/src/app.html +12 -0
  19. package/examples/svelte-chat-js/src/lib/images/github.svg +1 -0
  20. package/examples/svelte-chat-js/src/lib/images/svelte-logo.svg +1 -0
  21. package/examples/svelte-chat-js/src/lib/images/svelte-welcome.png +0 -0
  22. package/examples/svelte-chat-js/src/lib/images/svelte-welcome.webp +0 -0
  23. package/examples/svelte-chat-js/src/lib/shared_io.js +12 -0
  24. package/examples/svelte-chat-js/src/routes/+layout.svelte +9 -0
  25. package/examples/svelte-chat-js/src/routes/+page.js +3 -0
  26. package/examples/svelte-chat-js/src/routes/+page.svelte +162 -0
  27. package/examples/svelte-chat-js/static/favicon.svg +1 -0
  28. package/examples/svelte-chat-js/static/global.css +19 -0
  29. package/examples/svelte-chat-js/static/robots.txt +3 -0
  30. package/examples/svelte-chat-js/svelte.config.js +15 -0
  31. package/examples/svelte-chat-js/vite.config.js +6 -0
  32. package/index.js +2 -1
  33. package/package.json +1 -1
  34. package/src/client/IOCore.js +18 -5
  35. package/src/client/browser/IOWebSocket.js +1 -16
  36. package/src/server/Manager.js +16 -0
  37. package/src/server/Remote.js +5 -0
  38. package/src/server/Server.js +85 -21
  39. package/src/server/serverOption.js +2 -2
  40. package/test-nodejs/client-playToggle.js +19 -0
@@ -11,6 +11,8 @@ export class Server extends EventEmitter {
11
11
  super();
12
12
  this.apiNames = new Set()
13
13
  this.wss = {};
14
+ this.port = null;
15
+ this.congPort = null;
14
16
 
15
17
  if (options.timeout) {
16
18
  let pingT = parseInt(options.timeout)
@@ -31,38 +33,44 @@ export class Server extends EventEmitter {
31
33
  serverOption.showMetric = options.showMetric
32
34
  }
33
35
 
34
- if (options.timeout) {
35
- serverOption.timeout = options.timeout
36
- }
37
-
38
- if (options.port) {
39
- serverOption.port = parseInt(options.port)
36
+ if (options.port || options.port == 0) {
37
+ this.port = parseInt(options.port)
40
38
  }
41
39
 
42
40
  if (options.httpServer) {
43
- serverOption.httpServer = options.httpServer
41
+ this.httpServer = options.httpServer
44
42
  }
45
43
 
46
- if (options.congPort) {
47
- serverOption.congPort = parseInt(options.congPort)
44
+ if (options.congPort || options.congPort == 0) {
45
+ this.congPort = parseInt(options.congPort)
48
46
  }
49
47
 
50
48
  this.manager = new Manager(this, authManager)
51
49
 
52
- if (serverOption.port || serverOption.httpServer) this.startWSServer(serverOption)
53
- if (serverOption.congPort) this.startCongServer(serverOption.congPort)
50
+ this.serverCountToListen = 0;
51
+ this.listeningServerCount = 0;
52
+ if (this.port || this.port == 0 || this.httpServer) this.serverCountToListen++;
53
+ if (this.congPort || this.congPort == 0) this.serverCountToListen++;
54
+
55
+ if (this.serverCountToListen === 0) {
56
+ process.nextTick(() => this.emit('ready'));
57
+ } else {
58
+ if (this.port || this.port == 0 || this.httpServer) this.startWSServer();
59
+ if (this.congPort || this.congPort == 0) this.startCongServer();
60
+ }
54
61
 
55
62
  }
56
63
 
57
64
 
58
- startWSServer(serverOption) {
65
+ startWSServer() {
59
66
 
60
- if (serverOption.port) {
61
- console.log('opening WebSocket Server port:', serverOption.port)
62
- this.wss = new WebSocketServer({ port: serverOption.port })
63
- } else if (serverOption.httpServer) {
67
+ // console.log('optoins', options )
68
+ if (this.port || this.port == 0) {
69
+ console.log('opening WebSocket Server port:', this.port)
70
+ this.wss = new WebSocketServer({ port: this.port })
71
+ } else if (this.httpServer) {
64
72
  console.log('opening WebSocket Server external httpServer:')
65
- this.wss = new WebSocketServer({ server: serverOption.httpServer })
73
+ this.wss = new WebSocketServer({ server: this.httpServer })
66
74
  } else {
67
75
  throw new TypeError(
68
76
  'One and only one of the "port", "httpServer"' +
@@ -71,6 +79,15 @@ export class Server extends EventEmitter {
71
79
  }
72
80
 
73
81
 
82
+ this.wss.once('listening', () => {
83
+ this.port = this.wss.address().port;
84
+ console.log('wss server bound port:', this.port );
85
+ this.listeningServerCount++;
86
+ if (this.listeningServerCount === this.serverCountToListen) {
87
+ this.emit('ready');
88
+ }
89
+ });
90
+
74
91
  // this.wss.setMaxListeners(0)
75
92
 
76
93
  this.wss.on('error', (err) => {
@@ -92,8 +109,8 @@ export class Server extends EventEmitter {
92
109
 
93
110
  }
94
111
 
95
- startCongServer(congPort) {
96
- console.log('opening CongSocket Server:', congPort)
112
+ startCongServer() {
113
+ console.log('opening CongSocket Server port:', this.congPort)
97
114
 
98
115
  this.congServer = net.createServer((socket) => {
99
116
  this.manager.addRemote(socket)
@@ -103,8 +120,15 @@ export class Server extends EventEmitter {
103
120
  if (err.code == 'EADDRINUSE') {
104
121
  process.exit()
105
122
  }
106
- }).listen(congPort, () => {
107
- // console.log('congsocket server bound' );
123
+ }).on('close', () => {
124
+ console.log('### cong server closed.')
125
+ }).listen(this.congPort, () => {
126
+ this.congPort = this.congServer.address().port;
127
+ console.log('congsocket server bound port:', this.congPort );
128
+ this.listeningServerCount++;
129
+ if (this.listeningServerCount === this.serverCountToListen) {
130
+ this.emit('ready');
131
+ }
108
132
  });
109
133
  }
110
134
 
@@ -160,4 +184,44 @@ export class Server extends EventEmitter {
160
184
  return this
161
185
  }
162
186
 
187
+ close(callback) {
188
+ console.log('closing io-signal server...')
189
+ if (this.manager) {
190
+ this.manager.close()
191
+ }
192
+
193
+ let serverCount = 0;
194
+ if (this.wss) serverCount++;
195
+ if (this.congServer) serverCount++;
196
+
197
+ if (serverCount === 0) {
198
+ if (callback) process.nextTick(callback);
199
+ return;
200
+ }
201
+
202
+ let closedCount = 0;
203
+ const onClosed = () => {
204
+ closedCount++;
205
+ if (closedCount === serverCount) {
206
+ console.log('io-signal server closed.')
207
+ if (callback) callback();
208
+ }
209
+ }
210
+
211
+ if (this.wss) {
212
+ this.wss.close(() => {
213
+ console.log('wss server closed.')
214
+ onClosed()
215
+ })
216
+ }
217
+
218
+ if (this.congServer) {
219
+ this.congServer.close((err) => {
220
+ if (err) console.error('congServer close error', err)
221
+ console.log('cong server closed.')
222
+ onClosed()
223
+ })
224
+ }
225
+ }
226
+
163
227
  }
@@ -2,9 +2,9 @@
2
2
 
3
3
  export let serverOption = {
4
4
  clientTracking: false,
5
- port: 0, //wsPort
5
+ port: null, // WebSocket
6
+ congPort: null, // CongSocket
6
7
  httpServer: null,
7
- congPort: 0,
8
8
  timeout: 50000,
9
9
  showMessage: 'none',
10
10
  showMetric: 0,
@@ -0,0 +1,19 @@
1
+
2
+ import { IO } from "iosignal"
3
+
4
+ const io = new IO('wss://io.iosignal.net/ws')
5
+
6
+ // io.auth('id','key')
7
+
8
+ io.on('ready', () => {
9
+ console.log('ready cid:', io.cid)
10
+ io.signal('#screen', 'playToggle')
11
+ });
12
+
13
+ io.listen('#notify', (...args) => {
14
+ console.log(args)
15
+ })
16
+
17
+ io.on('error', err => {
18
+ console.log('err', err)
19
+ })