This repository has been archived by the owner on Nov 2, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathshared.ts
80 lines (64 loc) · 2.57 KB
/
shared.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import { WebSocket } from './client';
import { WebSocketServer } from './server';
export const noop: () => void = (): void => { /** ignore */ };
export const OPCODE_TEXT: number = 1;
export const OPCODE_PING: number = 9;
export const OPCODE_BINARY: number = 2;
export const APP_PING_CODE: Buffer = Buffer.from('9');
export const PERMESSAGE_DEFLATE: number = 1;
export const SLIDING_DEFLATE_WINDOW: number = 16;
export const DEFAULT_PAYLOAD_LIMIT: number = 16777216;
export const native: any = ((): NodeRequire => {
try {
return require(`../dist/bindings/cws_${process.platform}_${process.versions.modules}`);
} catch (err) {
err.message = err.message + ` check './node_modules/@clusterws/cws/build_log.txt' for post install build logs`;
throw err;
}
})();
export function setupNative(group: any, type: string, wsServer?: WebSocketServer): void {
native.setNoop(noop);
native[type].group.onConnection(group, (external: any): void => {
if (type === 'server' && wsServer) {
const socket: WebSocket = new WebSocket(null, { external });
native.setUserData(external, socket);
if (wsServer.upgradeCb) {
wsServer.upgradeCb(socket);
} else {
wsServer.registeredEvents['connection'](socket, wsServer.upgradeReq);
}
wsServer.upgradeCb = null;
wsServer.upgradeReq = null;
return;
}
const webSocket: WebSocket = native.getUserData(external);
(webSocket as any).external = external;
webSocket.registeredEvents['open']();
});
native[type].group.onPing(group, (message: string | Buffer, webSocket: WebSocket): void => {
webSocket.registeredEvents['ping'](message);
});
native[type].group.onPong(group, (message: string | Buffer, webSocket: WebSocket): void => {
webSocket.registeredEvents['pong'](message);
});
native[type].group.onMessage(group, (message: string | Buffer, webSocket: WebSocket): void => {
webSocket.registeredEvents['message'](message);
});
native[type].group.onDisconnection(group, (newExternal: any, code: number, message: any, webSocket: WebSocket): void => {
(webSocket as any).external = null;
process.nextTick((): void => {
webSocket.registeredEvents['close'](code || 1005, message || '');
});
native.clearUserData(newExternal);
});
if (type === 'client') {
native[type].group.onError(group, (webSocket: WebSocket): void => {
process.nextTick((): void => {
webSocket.registeredEvents['error']({
message: 'cWs client connection error',
stack: 'cWs client connection error'
});
});
});
}
}