All files shared.ts

88.64% Statements 39/44
91.67% Branches 11/12
81.82% Functions 9/11
88.64% Lines 39/44

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 811x     1x   1x 1x 1x   1x 1x 1x 1x   1x 1x 1x             1x 15x   15x 44x 22x 22x   22x     22x     22x 22x 22x     22x 22x 22x     15x 2x     15x 2x     15x 18x     15x 44x   44x 44x     44x     15x 1x                    
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);
 
      Iif (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'
        });
      });
    });
  }
}