@cimo/websocket 1.1.23 → 1.1.25

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 CHANGED
@@ -26,38 +26,28 @@ import * as ControllerTest from "../controller/Test";
26
26
 
27
27
  ...
28
28
 
29
- const cwsServer = new CwsServer();
30
- cwsServer.create(server);
29
+ const cwsServer = new CwsServer(server);
31
30
 
32
- cwsServer.receiveOutput("test", (socket, data) => {
33
- ControllerTest.websocket(cwsServer, socket, data);
34
- });
31
+ ControllerTester.websocket(cwsServer);
35
32
 
36
33
  ...
37
34
  ```
38
35
 
39
- - ControllerTest.ts
36
+ - ControllerTester.ts
40
37
 
41
38
  ```
42
39
  ...
43
40
 
44
- import { CwsServer, CwsServerInterface } from "@cimo/websocket";
45
-
46
- ...
47
-
48
- let cwsServer: CwsServer;
41
+ import { CwsServer } from "@cimo/websocket";
49
42
 
50
43
  ...
51
44
 
52
- export const websocket = (cwsServerValue: CwsServer, socket: CwsServerInterface.Isocket, data: CwsServerInterface.Imessage) => {
53
- cwsServer = cwsServerValue;
54
-
55
- const tag = data.tag;
56
- const message = data.message;
57
-
58
- if (tag === "cws_test_o") {
59
- cwsServer.sendInput(socket, "test", message);
60
- }
45
+ export const websocket = (cwsServer: CwsServer, cp: Cp) => {
46
+ cwsServer.receiveData("action_test", (clientId, data) => {
47
+ if (typeof data === "string") {
48
+ cwsServer.sendData(clientId, 1, JSON.stringify({ test: "end" }), "action_test");
49
+ }
50
+ });
61
51
  };
62
52
 
63
53
  ...
@@ -74,21 +64,20 @@ import CwsClient from "@cimo/websocket/dist/client/Service";
74
64
 
75
65
  ...
76
66
 
77
- const cwsClient = CwsClient();
78
- cwsClient.connection("wss://localhost");
67
+ const cwsClient = new CwsClient("wss://localhost");
79
68
 
80
- cwsClient.receiveMessage("broadcast", (data) => {
81
- // Global event
82
- });
69
+ cwsClient.checkConnection(() => {
70
+ cwsClient.receiveData("action_test", (data) => {
71
+ if (typeof data === "string") {
72
+ const message = JSON.parse(data) as Record<string, string>;
83
73
 
84
- cwsClient.receiveMessage("test", (data) => {
85
- // Test event
74
+ console.log(message);
75
+ }
76
+ });
86
77
  });
87
78
 
88
- ...
89
-
90
79
  elementButton.addEventListener("click", (event) => {
91
- cwsClient.sendMessage("test", { value: 1 });
80
+ cwsClient.sendData(1, JSON.stringify({ test: "start" }), "action_test");
92
81
  });
93
82
 
94
83
  ...
package/dist/Main.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  import CwsServer from "./server/Service";
2
- export * as CwsServerInterface from "./server/Interface";
3
2
  export { CwsServer };
package/dist/Main.js CHANGED
@@ -1,33 +1,9 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.CwsServer = exports.CwsServerInterface = void 0;
6
+ exports.CwsServer = void 0;
30
7
  const Service_1 = __importDefault(require("./server/Service"));
31
8
  exports.CwsServer = Service_1.default;
32
- exports.CwsServerInterface = __importStar(require("./server/Interface"));
33
9
  //# sourceMappingURL=Main.js.map
package/dist/Main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAyC;AAGhC,oBAHF,iBAAS,CAGE;AADlB,yEAAyD"}
1
+ {"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":";;;;;;AAAA,+DAAyC;AAEhC,oBAFF,iBAAS,CAEE"}
@@ -1,8 +1,13 @@
1
+ export interface Iclient {
2
+ socket: WebSocket;
3
+ }
1
4
  export interface Imessage {
2
- date: string;
3
5
  tag: string;
4
6
  message: string;
5
7
  }
6
8
  export interface IcallbackReceiveMessage {
7
- (data: Imessage): void;
9
+ (data: string | DataView): any;
10
+ }
11
+ export interface IcallbackReceiveDownload {
12
+ (data: DataView, filename: string): any;
8
13
  }
@@ -1,16 +1,23 @@
1
1
  import * as Interface from "./Interface";
2
2
  export default class CwsClient {
3
- private serverAddress;
4
- private websocket;
5
- private timeoutReconnect;
6
- private receiveMessageHandleList;
7
- constructor();
8
- connection: (address?: string) => void;
9
- sendMessage: (tagValue: string, messageValue: string | Record<string, unknown>) => void;
10
- receiveMessage: (tag: string, callback: Interface.IcallbackReceiveMessage) => void;
11
- receiveMessageOff: (tag: string) => void;
12
- checkConnection: () => boolean;
13
- private eventOpen;
14
- private receiveMessageHandle;
15
- private eventClose;
3
+ private clientId;
4
+ private address;
5
+ private ws;
6
+ private handleReceiveDataList;
7
+ private countCheckConnection;
8
+ private countCheckConnectionLimit;
9
+ private intervalCheckConnection;
10
+ private callbackCheckConnection;
11
+ getClientId: () => string;
12
+ constructor(address: string, countCheckConnectionLimit?: number);
13
+ sendData: (mode: number, data: string | ArrayBuffer, tag?: string) => void;
14
+ sendDataBroadcast: (data: string) => void;
15
+ sendDataUpload: (filename: string, data: ArrayBuffer) => void;
16
+ receiveData: (tag: string, callback: Interface.IcallbackReceiveMessage) => void;
17
+ receiveDataDownload: (callback: Interface.IcallbackReceiveDownload) => void;
18
+ receiveDataOff: (tag: string) => void;
19
+ checkConnection: (callback: () => void) => void;
20
+ private create;
21
+ private handleReceiveData;
22
+ private cleanup;
16
23
  }
@@ -1,70 +1,136 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  class CwsClient {
4
- constructor() {
5
- this.connection = (address) => {
6
- this.serverAddress = address ? address : this.serverAddress;
7
- this.websocket = new WebSocket(this.serverAddress);
8
- this.websocket.addEventListener("open", this.eventOpen);
9
- this.websocket.addEventListener("message", this.receiveMessageHandle);
10
- this.websocket.addEventListener("close", this.eventClose);
4
+ constructor(address, countCheckConnectionLimit = 25) {
5
+ this.getClientId = () => {
6
+ return this.clientId;
11
7
  };
12
- this.sendMessage = (tagValue, messageValue) => {
13
- const check = this.checkConnection();
14
- if (this.websocket && check) {
15
- const dataStructure = {
16
- date: new Date().toISOString(),
17
- tag: `cws_${tagValue}_o`,
18
- message: messageValue
19
- };
20
- this.websocket.send(JSON.stringify(dataStructure));
8
+ this.sendData = (mode, data, tag = "") => {
9
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
10
+ if (mode === 1) {
11
+ const json = {
12
+ tag: `cws_${tag}`,
13
+ message: data
14
+ };
15
+ this.ws.send(JSON.stringify(json));
16
+ }
17
+ else if (mode === 2) {
18
+ this.ws.send(data);
19
+ }
21
20
  }
21
+ else {
22
+ console.log("@cimo/webSocket - Client - Service.ts - sendData()", "Client not connected.");
23
+ }
24
+ };
25
+ this.sendDataBroadcast = (data) => {
26
+ this.sendData(1, data, "broadcast");
22
27
  };
23
- this.receiveMessage = (tag, callback) => {
24
- this.receiveMessageHandleList.set(`cws_${tag}_i`, (data) => {
28
+ this.sendDataUpload = (filename, data) => {
29
+ this.sendData(1, JSON.stringify({ filename }), "upload");
30
+ this.sendData(2, data);
31
+ };
32
+ this.receiveData = (tag, callback) => {
33
+ this.handleReceiveDataList.set(`cws_${tag}`, (data) => {
25
34
  callback(data);
26
- return;
27
35
  });
28
36
  };
29
- this.receiveMessageOff = (tag) => {
30
- if (this.receiveMessageHandleList.has(`cws_${tag}_i`)) {
31
- this.receiveMessageHandleList.delete(`cws_${tag}_i`);
37
+ this.receiveDataDownload = (callback) => {
38
+ let filename = "";
39
+ this.receiveData("download", (data) => {
40
+ if (typeof data === "string") {
41
+ const message = JSON.parse(data);
42
+ filename = message.filename;
43
+ }
44
+ else {
45
+ callback(data, filename);
46
+ filename = "";
47
+ }
48
+ });
49
+ };
50
+ this.receiveDataOff = (tag) => {
51
+ if (this.handleReceiveDataList.has(`cws_${tag}`)) {
52
+ this.handleReceiveDataList.delete(`cws_${tag}`);
32
53
  }
33
54
  };
34
- this.checkConnection = () => {
35
- if (this.websocket && this.websocket.readyState === WebSocket.OPEN) {
36
- return true;
55
+ this.checkConnection = (callback) => {
56
+ if (this.countCheckConnection > this.countCheckConnectionLimit) {
57
+ clearInterval(this.intervalCheckConnection);
58
+ }
59
+ if (!this.callbackCheckConnection) {
60
+ this.callbackCheckConnection = callback;
61
+ }
62
+ if (this.ws) {
63
+ if (this.ws.readyState === WebSocket.OPEN) {
64
+ clearInterval(this.intervalCheckConnection);
65
+ this.intervalCheckConnection = undefined;
66
+ this.countCheckConnection = 0;
67
+ this.callbackCheckConnection();
68
+ }
69
+ else if (!this.intervalCheckConnection && (this.ws.readyState === WebSocket.CONNECTING || this.ws.readyState === WebSocket.CLOSED)) {
70
+ this.intervalCheckConnection = setInterval(() => {
71
+ this.checkConnection(callback);
72
+ }, 1000);
73
+ }
37
74
  }
38
- console.log("@cimo/websocket - Service.ts - checkConnection():", "Server not ready.");
39
- return false;
40
75
  };
41
- this.eventOpen = () => {
42
- console.log("@cimo/websocket - Service.ts - eventOpen():", "Connected.");
43
- clearTimeout(this.timeoutReconnect);
76
+ this.create = () => {
77
+ this.ws = new WebSocket(this.address);
78
+ this.ws.binaryType = "arraybuffer";
79
+ this.ws.onopen = () => {
80
+ console.log("@cimo/webSocket - Client - Service.ts - onOpen()", "Connection open.");
81
+ };
82
+ let messageTagDownload = "";
83
+ this.ws.onmessage = (event) => {
84
+ if (this.ws) {
85
+ if (typeof event.data === "string") {
86
+ const json = JSON.parse(event.data);
87
+ if (json.tag === "cws_client_connection") {
88
+ this.clientId = json.message;
89
+ }
90
+ else if (json.tag === "cws_download") {
91
+ messageTagDownload = json.tag;
92
+ }
93
+ this.handleReceiveData(json.tag, json.message);
94
+ }
95
+ else if (typeof event.data !== "string" && messageTagDownload) {
96
+ const view = new DataView(event.data);
97
+ this.handleReceiveData(messageTagDownload, view);
98
+ messageTagDownload = "";
99
+ }
100
+ }
101
+ };
102
+ this.ws.onclose = () => {
103
+ console.log("@cimo/webSocket - Client - Service.ts - onClose()", "Connection close.");
104
+ this.cleanup();
105
+ if (this.countCheckConnection < this.countCheckConnectionLimit) {
106
+ this.countCheckConnection++;
107
+ this.create();
108
+ this.checkConnection(() => {
109
+ });
110
+ }
111
+ };
44
112
  };
45
- this.receiveMessageHandle = (event) => {
46
- const data = JSON.parse(event.data);
47
- for (const [tag, callback] of this.receiveMessageHandleList) {
48
- if (tag === data.tag) {
113
+ this.handleReceiveData = (tag, data) => {
114
+ for (const [index, callback] of this.handleReceiveDataList) {
115
+ if (tag === index) {
49
116
  callback(data);
50
117
  return;
51
118
  }
52
119
  }
53
120
  };
54
- this.eventClose = () => {
55
- if (this.websocket) {
56
- console.log("@cimo/websocket - Service.ts - eventClose():", "Disconnected. Try to reconnect...");
57
- this.websocket.removeEventListener("open", this.eventOpen);
58
- this.websocket.removeEventListener("message", this.receiveMessageHandle);
59
- this.websocket.removeEventListener("close", this.eventClose);
60
- this.websocket = null;
61
- this.timeoutReconnect = setTimeout(this.connection, 1000);
62
- }
121
+ this.cleanup = () => {
122
+ this.clientId = "";
123
+ this.ws = undefined;
63
124
  };
64
- this.serverAddress = "";
65
- this.websocket = null;
66
- this.timeoutReconnect = undefined;
67
- this.receiveMessageHandleList = new Map();
125
+ this.clientId = "";
126
+ this.address = address;
127
+ this.ws = undefined;
128
+ this.handleReceiveDataList = new Map();
129
+ this.countCheckConnection = 0;
130
+ this.countCheckConnectionLimit = countCheckConnectionLimit;
131
+ this.intervalCheckConnection = undefined;
132
+ this.callbackCheckConnection = undefined;
133
+ this.create();
68
134
  }
69
135
  }
70
136
  exports.default = CwsClient;
@@ -1 +1 @@
1
- {"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/client/Service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/client/Service.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,26 @@
1
1
  /// <reference types="node" />
2
- import { Socket } from "net";
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
3
4
  import { Server } from "https";
4
- export { Socket as Isocket };
5
+ import * as Net from "net";
5
6
  export { Server as IhttpsServer };
7
+ export interface Iclient {
8
+ socket: Net.Socket;
9
+ buffer: Buffer;
10
+ opCode: number;
11
+ fragmentList: Buffer[];
12
+ intervalPing: NodeJS.Timeout | undefined;
13
+ }
6
14
  export interface Imessage {
7
- date: string;
8
15
  tag: string;
9
16
  message: string;
10
17
  }
11
- export interface IcallbackReceiveOutput {
12
- (socket: Socket, data: Imessage): void;
18
+ export interface IcallbackReceiveMessage {
19
+ (clientId: string, data: string | Buffer[]): any;
20
+ }
21
+ export interface IcallbackReceiveUpload {
22
+ (clientId: string, data: Buffer[], filename: string): any;
23
+ }
24
+ export interface IcallbackHandleFrame {
25
+ (clientOpCode: number, clientFragmentList: Buffer[]): any;
13
26
  }
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IhttpsServer = exports.Isocket = void 0;
4
- const net_1 = require("net");
5
- Object.defineProperty(exports, "Isocket", { enumerable: true, get: function () { return net_1.Socket; } });
3
+ exports.IhttpsServer = void 0;
6
4
  const https_1 = require("https");
7
5
  Object.defineProperty(exports, "IhttpsServer", { enumerable: true, get: function () { return https_1.Server; } });
8
6
  //# sourceMappingURL=Interface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Interface.js","sourceRoot":"","sources":["../../src/server/Interface.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAGV,wFAHV,YAAM,OAGW;AAF1B,iCAA+B;AAGZ,6FAHV,cAAM,OAGgB"}
1
+ {"version":3,"file":"Interface.js","sourceRoot":"","sources":["../../src/server/Interface.ts"],"names":[],"mappings":";;;AAAA,iCAA+B;AAGZ,6FAHV,cAAM,OAGgB"}
@@ -1,21 +1,24 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
1
3
  import * as Interface from "./Interface";
2
4
  export default class CwsServer {
3
- private WEBSOCKET_MAGIC_STRING_KEY;
4
- private SEVEN_BITS_INTEGER_MARKER;
5
- private SIXTEEN_BITS_INTEGER_MARKER;
6
- private THIRTYTWO_BITS_INTEGER_MARKER;
7
- private MASK_KEY_BYTES_LENGTH;
8
- private socketList;
9
- private receiveOutputHandleList;
10
- constructor();
11
- create: (server: Interface.IhttpsServer) => void;
12
- receiveOutput: (tag: string, callback: Interface.IcallbackReceiveOutput) => void;
13
- receiveOutputOff: (tag: string) => void;
14
- sendInput: (socket: Interface.Isocket | null, tagValue: string, messageValue: string | Record<string, unknown>) => void;
15
- sendInputBroadcast: (socket: Interface.Isocket | null, tag: string, message: string | Record<string, unknown>) => void;
16
- private onServerUpgrade;
17
- private onSocketData;
18
- private onSocketEnd;
19
- private receiveOutputHandle;
20
- private prepareMessage;
5
+ private clientList;
6
+ private timePing;
7
+ private handleReceiveDataList;
8
+ getClientList: () => Map<string, Interface.Iclient>;
9
+ constructor(server: Interface.IhttpsServer, timePing?: number);
10
+ sendData: (clientId: string, mode: number, data: string | Buffer, tag?: string) => void;
11
+ sendDataBroadcast: (data: string, clientId?: string) => void;
12
+ sendDataDownload: (clientId: string, filename: string, file: Buffer) => void;
13
+ receiveData: (tag: string, callback: Interface.IcallbackReceiveMessage) => void;
14
+ receiveDataUpload: (callback: Interface.IcallbackReceiveUpload) => void;
15
+ receiveDataOff: (tag: string) => void;
16
+ private create;
17
+ private responseHeader;
18
+ private generateClientId;
19
+ private checkClient;
20
+ private handleFrame;
21
+ private ping;
22
+ private handleReceiveData;
23
+ private cleanup;
21
24
  }
@@ -25,155 +25,240 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const Crypto = __importStar(require("crypto"));
27
27
  class CwsServer {
28
- WEBSOCKET_MAGIC_STRING_KEY;
29
- SEVEN_BITS_INTEGER_MARKER;
30
- SIXTEEN_BITS_INTEGER_MARKER;
31
- THIRTYTWO_BITS_INTEGER_MARKER;
32
- MASK_KEY_BYTES_LENGTH;
33
- socketList;
34
- receiveOutputHandleList;
35
- constructor() {
36
- this.WEBSOCKET_MAGIC_STRING_KEY = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
37
- this.SEVEN_BITS_INTEGER_MARKER = 125;
38
- this.SIXTEEN_BITS_INTEGER_MARKER = 126;
39
- this.THIRTYTWO_BITS_INTEGER_MARKER = 127;
40
- this.MASK_KEY_BYTES_LENGTH = 4;
41
- this.socketList = [];
42
- this.receiveOutputHandleList = new Map();
43
- }
44
- create = (server) => {
45
- server.on("upgrade", this.onServerUpgrade);
28
+ clientList;
29
+ timePing;
30
+ handleReceiveDataList;
31
+ getClientList = () => {
32
+ return this.clientList;
46
33
  };
47
- receiveOutput = (tag, callback) => {
48
- this.receiveOutputHandleList.set(`cws_${tag}_o`, (socket, data) => {
49
- callback(socket, data);
34
+ constructor(server, timePing = 25000) {
35
+ this.clientList = new Map();
36
+ this.timePing = timePing;
37
+ this.handleReceiveDataList = new Map();
38
+ this.create(server);
39
+ }
40
+ sendData = (clientId, mode, data, tag = "") => {
41
+ const client = this.checkClient(clientId);
42
+ if (!client) {
50
43
  return;
51
- });
52
- };
53
- receiveOutputOff = (tag) => {
54
- if (this.receiveOutputHandleList.has(`cws_${tag}_o`)) {
55
- this.receiveOutputHandleList.delete(`cws_${tag}_o`);
56
44
  }
57
- };
58
- sendInput = (socket, tagValue, messageValue) => {
59
- if (socket && tagValue) {
60
- const dataStructure = {
61
- date: new Date().toISOString(),
62
- tag: `cws_${tagValue}_i`,
63
- message: messageValue
64
- };
65
- const result = this.prepareMessage(JSON.stringify(dataStructure));
66
- socket.write(result);
45
+ if (client && client.socket && client.socket.writable) {
46
+ let buffer = Buffer.alloc(0);
47
+ let frame0 = 0;
48
+ if (mode === 1) {
49
+ const json = {
50
+ tag: `cws_${tag}`,
51
+ message: data
52
+ };
53
+ buffer = Buffer.from(JSON.stringify(json));
54
+ frame0 = 0x81;
55
+ }
56
+ else if (mode === 2) {
57
+ buffer = Buffer.from(data);
58
+ frame0 = 0x82;
59
+ }
60
+ const length = buffer.length;
61
+ let frame;
62
+ if (length <= 125) {
63
+ frame = Buffer.alloc(length + 2);
64
+ frame[0] = frame0;
65
+ frame[1] = length;
66
+ }
67
+ else if (length <= 65535) {
68
+ frame = Buffer.alloc(length + 4);
69
+ frame[0] = frame0;
70
+ frame[1] = 126;
71
+ frame.writeUInt16BE(length, 2);
72
+ }
73
+ else {
74
+ frame = Buffer.alloc(length + 10);
75
+ frame[0] = frame0;
76
+ frame[1] = 127;
77
+ frame.writeBigUInt64BE(BigInt(length), 2);
78
+ }
79
+ buffer.copy(frame, frame.length - length);
80
+ client.socket.write(frame);
67
81
  }
68
82
  };
69
- sendInputBroadcast = (socket, tag, message) => {
70
- for (const client of this.socketList) {
71
- if (client && !client.destroyed && client !== socket) {
72
- this.sendInput(client, tag, message);
83
+ sendDataBroadcast = (data, clientId) => {
84
+ for (const [index] of this.clientList) {
85
+ if (!clientId || (clientId && clientId !== index)) {
86
+ this.sendData(index, 1, data, "broadcast");
73
87
  }
74
88
  }
75
89
  };
76
- onServerUpgrade = (request, socket) => {
77
- if (request.headers["upgrade"] !== "websocket") {
78
- socket.end("HTTP/1.1 400 Bad Request");
79
- return;
80
- }
81
- const { "sec-websocket-key": webClientSocketKey } = request.headers;
82
- const socketKey = webClientSocketKey;
83
- const acceptKey = Crypto.createHash("sha1").update(socketKey.concat(this.WEBSOCKET_MAGIC_STRING_KEY)).digest("base64");
84
- const header = ["HTTP/1.1 101 Switching Protocols", "Upgrade: websocket", "Connection: Upgrade", `Sec-WebSocket-Accept: ${acceptKey}`, ""]
85
- .map((line) => line.concat("\r\n"))
86
- .join("");
87
- socket.write(header, (error) => {
88
- if (error) {
89
- throw new Error(`@cimo/websocket - Service.ts - onServerUpgrade - Error: ${error.toString()}`);
90
- }
90
+ sendDataDownload = (clientId, filename, file) => {
91
+ this.sendData(clientId, 1, JSON.stringify({ filename }), "download");
92
+ this.sendData(clientId, 2, file);
93
+ };
94
+ receiveData = (tag, callback) => {
95
+ this.handleReceiveDataList.set(`cws_${tag}`, (clientId, data) => {
96
+ callback(clientId, data);
91
97
  });
92
- this.socketList.push(socket);
93
- socket.on("data", (buffer) => {
94
- this.onSocketData(socket, buffer);
98
+ };
99
+ receiveDataUpload = (callback) => {
100
+ let filename = "";
101
+ this.receiveData("upload", (clientId, data) => {
102
+ if (typeof data === "string") {
103
+ const message = JSON.parse(data);
104
+ filename = message.filename;
105
+ }
106
+ else {
107
+ callback(clientId, data, filename);
108
+ filename = "";
109
+ }
95
110
  });
96
- socket.on("end", () => {
97
- this.onSocketEnd(socket);
111
+ };
112
+ receiveDataOff = (tag) => {
113
+ if (this.handleReceiveDataList.has(`cws_${tag}`)) {
114
+ this.handleReceiveDataList.delete(`cws_${tag}`);
115
+ }
116
+ };
117
+ create = (server) => {
118
+ server.on("upgrade", (request, socket) => {
119
+ if (request.headers["upgrade"] !== "websocket") {
120
+ socket.end("HTTP/1.1 400 Bad Request");
121
+ return;
122
+ }
123
+ socket.write(this.responseHeader(request).join("\r\n"));
124
+ const clientId = this.generateClientId();
125
+ this.clientList.set(clientId, {
126
+ socket,
127
+ buffer: Buffer.alloc(0),
128
+ opCode: -1,
129
+ fragmentList: [],
130
+ intervalPing: undefined
131
+ });
132
+ this.ping(clientId);
133
+ console.log("@cimo/webSocket - Server - Service.ts - create() - onUpgrade", `Client ${clientId} - Ip: ${socket.remoteAddress || ""} connected`);
134
+ this.sendData(clientId, 1, clientId, "client_connection");
135
+ this.sendDataBroadcast(`Client ${clientId} connected`, clientId);
136
+ let messageTagUpload = "";
137
+ socket.on("data", (data) => {
138
+ this.handleFrame(clientId, data, (clientOpCode, clientFragmentList) => {
139
+ if (clientOpCode === 1) {
140
+ const json = JSON.parse(clientFragmentList);
141
+ if (json.tag === "cws_broadcast") {
142
+ this.sendDataBroadcast(json.message, clientId);
143
+ }
144
+ else if (json.tag === "cws_upload") {
145
+ messageTagUpload = json.tag;
146
+ }
147
+ this.handleReceiveData(json.tag, clientId, json.message);
148
+ }
149
+ else if ((clientOpCode === 0 || clientOpCode === 2) && messageTagUpload) {
150
+ this.handleReceiveData(messageTagUpload, clientId, clientFragmentList);
151
+ messageTagUpload = "";
152
+ }
153
+ });
154
+ });
155
+ socket.on("end", () => {
156
+ console.log("@cimo/webSocket - Server - Service.ts - create() - onEnd", `Client ${clientId} - Ip: ${socket.remoteAddress || ""} disconnected`);
157
+ this.sendDataBroadcast(`Client ${clientId} disconnected`, clientId);
158
+ this.cleanup(clientId);
159
+ });
98
160
  });
99
- this.sendInputBroadcast(socket, "broadcast", `Client ${socket.remoteAddress || ""} connected.`);
100
161
  };
101
- onSocketData = (socket, buffer) => {
102
- let data = {};
103
- let payloadLength = buffer[1] & 0x7f;
104
- let payloadOffset = 2;
105
- const opcode = buffer[0] & 0x0f;
106
- const isMasked = (buffer[1] & 0x80) !== 0;
107
- if (payloadLength === this.SIXTEEN_BITS_INTEGER_MARKER) {
108
- payloadLength = buffer.readUInt16BE(2);
109
- payloadOffset = 4;
162
+ responseHeader = (request) => {
163
+ const key = request.headers["sec-websocket-key"] || "";
164
+ const hash = Crypto.createHash("sha1").update(`${key}258EAFA5-E914-47DA-95CA-C5AB0DC85B11`).digest("base64");
165
+ return ["HTTP/1.1 101 Switching Protocols", "Upgrade: websocket", "Connection: Upgrade", `Sec-WebSocket-Accept: ${hash}`, "\r\n"];
166
+ };
167
+ generateClientId() {
168
+ const randomBytes = Crypto.randomBytes(16);
169
+ return randomBytes.toString("hex");
170
+ }
171
+ checkClient = (clientId) => {
172
+ const client = this.clientList.get(clientId);
173
+ if (!client) {
174
+ console.log("@cimo/webSocket - Server - Service.ts - checkClient()", `Client ${clientId} not exists!`);
175
+ return undefined;
110
176
  }
111
- else if (payloadLength === this.THIRTYTWO_BITS_INTEGER_MARKER) {
112
- payloadLength = buffer.readUInt32BE(2);
113
- payloadOffset = 10;
177
+ return client;
178
+ };
179
+ handleFrame = (clientId, data, callback) => {
180
+ const client = this.checkClient(clientId);
181
+ if (!client) {
182
+ return;
114
183
  }
115
- if (isMasked) {
116
- const maskingKey = buffer.subarray(payloadOffset, payloadOffset + this.MASK_KEY_BYTES_LENGTH);
117
- payloadOffset += this.MASK_KEY_BYTES_LENGTH;
118
- for (let i = 0; i < payloadLength; i++) {
119
- buffer[payloadOffset + i] ^= maskingKey[i % this.MASK_KEY_BYTES_LENGTH];
184
+ client.buffer = Buffer.concat([client.buffer, data]);
185
+ while (client.buffer.length > 2) {
186
+ let payloadLength = client.buffer[1] & 0x7f;
187
+ let frameLength = payloadLength + 6;
188
+ let maskingKeyStart = 2;
189
+ if (payloadLength === 126) {
190
+ payloadLength = client.buffer.readUInt16BE(2);
191
+ frameLength = payloadLength + 8;
192
+ maskingKeyStart = 4;
120
193
  }
121
- }
122
- const payloadData = buffer.subarray(payloadOffset, payloadOffset + payloadLength);
123
- if (opcode === 0x01) {
124
- const payloadOutput = payloadData.toString("utf-8");
125
- if (/^[\],:{}\s]*$/.test(payloadOutput
126
- .replace(/\\["\\/bfnrtu]/g, "@")
127
- .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\\-]?\d+)?/g, "]")
128
- .replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) {
129
- data = JSON.parse(payloadOutput);
194
+ else if (payloadLength === 127) {
195
+ payloadLength = Number(client.buffer.readBigUInt64BE(2));
196
+ frameLength = payloadLength + 14;
197
+ maskingKeyStart = 10;
198
+ }
199
+ if (client.buffer.length < frameLength) {
200
+ break;
201
+ }
202
+ const frame = client.buffer.slice(0, frameLength);
203
+ client.buffer = client.buffer.slice(frameLength);
204
+ const fin = (frame[0] & 0x80) === 0x80;
205
+ client.opCode = frame[0] & 0x0f;
206
+ const isMasked = frame[1] & 0x80;
207
+ const payloadStart = maskingKeyStart + 4;
208
+ const payload = frame.slice(payloadStart);
209
+ if (isMasked) {
210
+ const maskingKey = frame.slice(maskingKeyStart, payloadStart);
211
+ for (let a = 0; a < payload.length; a++) {
212
+ payload[a] ^= maskingKey[a % 4];
213
+ }
214
+ }
215
+ if (client.opCode === 0x01 || client.opCode === 0x02 || client.opCode === 0x00) {
216
+ client.fragmentList.push(payload);
217
+ }
218
+ else if (client.opCode === 0x0a) {
219
+ console.log("@cimo/webSocket - Server - Service.ts - handleFrame()", `Client ${clientId} pong.`);
220
+ }
221
+ if (fin) {
222
+ const clientOpCode = client.opCode;
223
+ const clientFragmentList = client.fragmentList;
224
+ callback(clientOpCode, clientFragmentList);
225
+ client.buffer = Buffer.alloc(0);
226
+ client.opCode = -1;
227
+ client.fragmentList = [];
130
228
  }
131
229
  }
132
- this.receiveOutputHandle(socket, data);
133
230
  };
134
- onSocketEnd = (socket) => {
135
- this.sendInputBroadcast(socket, "broadcast", `Client ${socket.remoteAddress || ""} disconnected.`);
136
- const index = this.socketList.indexOf(socket);
137
- if (index > -1) {
138
- this.socketList.splice(index, 1);
231
+ ping = (clientId) => {
232
+ const client = this.checkClient(clientId);
233
+ if (!client) {
234
+ return;
139
235
  }
140
- socket.destroy();
236
+ client.intervalPing = setInterval(() => {
237
+ if (client.socket && client.socket.writable) {
238
+ const frame = Buffer.alloc(2);
239
+ frame[0] = 0x89;
240
+ frame[1] = 0x00;
241
+ client.socket.write(frame);
242
+ }
243
+ }, this.timePing);
141
244
  };
142
- receiveOutputHandle = (socket, data) => {
143
- for (const [tag, callback] of this.receiveOutputHandleList) {
144
- if (tag === data.tag) {
145
- callback(socket, data);
245
+ handleReceiveData = (tag, clientId, data) => {
246
+ for (const [index, callback] of this.handleReceiveDataList) {
247
+ if (tag === index) {
248
+ callback(clientId, data);
146
249
  return;
147
250
  }
148
251
  }
149
252
  };
150
- prepareMessage = (data) => {
151
- const message = Buffer.from(data);
152
- const messageSize = message.length;
153
- let dataBuffer;
154
- const firstByte = 0x80 | 0x01;
155
- if (messageSize <= this.SEVEN_BITS_INTEGER_MARKER) {
156
- const bytes = [firstByte];
157
- dataBuffer = Buffer.from(bytes.concat(messageSize));
158
- }
159
- else if (messageSize <= 2 ** 16) {
160
- const target = Buffer.allocUnsafe(4);
161
- target[0] = firstByte;
162
- target[1] = this.SIXTEEN_BITS_INTEGER_MARKER | 0x0;
163
- target.writeUint16BE(messageSize, 2);
164
- dataBuffer = target;
165
- }
166
- else {
167
- throw new Error("@cimo/websocket - Service.ts - prepareMessage - Error: Message too long.");
253
+ cleanup = (clientId) => {
254
+ const client = this.checkClient(clientId);
255
+ if (!client) {
256
+ return;
168
257
  }
169
- const totalLength = dataBuffer.byteLength + messageSize;
170
- const result = Buffer.allocUnsafe(totalLength);
171
- let offset = 0;
172
- for (const buffer of [dataBuffer, message]) {
173
- result.set(buffer, offset);
174
- offset += buffer.length;
258
+ if (client.socket) {
259
+ client.socket.end();
260
+ this.clientList.delete(clientId);
175
261
  }
176
- return result;
177
262
  };
178
263
  }
179
264
  exports.default = CwsServer;
@@ -1 +1 @@
1
- {"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/server/Service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/server/Service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cimo/websocket",
3
- "version": "1.1.23",
3
+ "version": "1.1.25",
4
4
  "description": "Websocket (server/client). Light, fast and secure.",
5
5
  "author": "cimo",
6
6
  "license": "MIT",