All files shared.ts

87.23% Statements 41/47
81.25% Branches 13/16
81.82% Functions 9/11
87.23% Lines 41/47

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 81 82 83 84 85 86 87 881x     1x   1x 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 {
    const [major, minor]: string[] = process.version.replace('v', '').split('.');
 
    Iif (Number(major) === 13 && Number(minor) < 9) {
      // temporary fix for node 13.8 and lower
      return require(`../dist/bindings/cws_${process.platform}_${process.versions.modules}_8`);
    }
 
    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'
        });
      });
    });
  }
}