Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
new Promise((resolve, reject) => {
this.current_reject = reject;
this.current_resolve = resolve;
try {
this.ws = new WebSocket(server);
} catch (error) {
this.ws = { readyState: 3, close: () => {} }; // DISCONNECTED
reject(new Error("Invalid url", server, " closed"));
// return this.close().then(() => {
// console.log("Invalid url", ws_server, " closed");
// // throw new Error("Invalid url", ws_server, " closed")
// // return this.current_reject(Error("Invalid websocket url: " + ws_server));
// })
}
this.ws.onopen = this.onOpen;
this.ws.onerror = this.onError;
this.ws.onmessage = this.onMessage;
this.ws.onclose = this.onClose;
this.connectionTimeout = setTimeout(() => {
const { hostname, port } = window.location;
url = `${protocol}//${hostname}:${port}/${path}`;
} else {
const protocol = config.useHttps ? 'wss:' : 'ws:';
const { ip, port } = config;
url = `${protocol}//${ip}:${port}/${path}`;
}
const queryParams = `clientType=${clientType}&key=${key}`;
// ----------------------------------------------------------
// init string socket
// ----------------------------------------------------------
const stringSocketUrl = `${url}?binary=0&${queryParams}`;
this.ws = new WebSocket(stringSocketUrl);
log(`string socket initialized - url: ${stringSocketUrl}`);
const stringSocketPromise = new Promise((resolve, reject) => {
this.ws.addEventListener('open', resolve);
});
// parse incoming messages for pubsub
this.ws.addEventListener('message', e => {
const [channel, args] = unpackStringMessage(e.data);
this._emit(false, channel, ...args);
});
// broadcast all `WebSocket` native events
[ 'open',
'close',
'error',
async function processData(data) {
const buff = Buffer.alloc(data.length + 1);
buff.writeInt8(streamNum, 0);
if (data instanceof Buffer) {
data.copy(buff, 1);
} else {
buff.write(data, 1);
}
let i = 0;
try {
for (; i < tryLimit; ++i) {
if (ws && ws.readyState === WebSocket.OPEN) {
ws.send(buff);
break;
} else {
ws = await createWS()
}
}
} catch (e) {
// TODO: Сonsider to log network errors.
console.error(e)
stdin.end()
}
if (i >= tryLimit) {
stdin.end()
}
}
public disconnect(): void {
if (!this.socket) {
throw new Error("Socket undefined. This must be called after connecting.");
}
this.clearTimeout();
switch (this.socket.readyState) {
case WebSocket.OPEN:
this.socket.close(1000 /* Normal Closure */);
break;
case WebSocket.CLOSED:
// nothing to be done
break;
case WebSocket.CONNECTING:
// imitate missing abort API
this.socket.onopen = () => 0;
this.socket.onclose = () => 0;
this.socket.onerror = () => 0;
this.socket.onmessage = () => 0;
this.socket = undefined;
if (this.closeHandler) {
this.closeHandler({ wasClean: false, code: 4001 });
}
break;
case WebSocket.CLOSING:
// already closing. Let it proceed
break;
break;
case WebSocket.CLOSED:
// nothing to be done
break;
case WebSocket.CONNECTING:
// imitate missing abort API
this.socket.onopen = () => 0;
this.socket.onclose = () => 0;
this.socket.onerror = () => 0;
this.socket.onmessage = () => 0;
this.socket = undefined;
if (this.closeHandler) {
this.closeHandler({ wasClean: false, code: 4001 });
}
break;
case WebSocket.CLOSING:
// already closing. Let it proceed
break;
default:
throw new Error(`Unknown readyState: ${this.socket.readyState}`);
}
}
return new Promise((resolve, reject) => {
if (!this.socket) {
throw new Error("Socket undefined. This must be called after connecting.");
}
if (this.closed) {
throw new Error("Socket was closed, so no data can be sent anymore.");
}
// this exception should be thrown by send() automatically according to
// https://developer.mozilla.org/de/docs/Web/API/WebSocket#send() but it does not work in browsers
if (this.socket.readyState !== WebSocket.OPEN) {
throw new Error("Websocket is not open");
}
if (environmentIsNodeJs()) {
this.socket.send(data, err => (err ? reject(err) : resolve()));
} else {
// Browser websocket send method does not accept a callback
this.socket.send(data);
resolve();
}
});
}
public disconnect(): void {
if (!this.socket) {
throw new Error("Socket undefined. This must be called after connecting.");
}
this.clearTimeout();
switch (this.socket.readyState) {
case WebSocket.OPEN:
this.socket.close(1000 /* Normal Closure */);
break;
case WebSocket.CLOSED:
// nothing to be done
break;
case WebSocket.CONNECTING:
// imitate missing abort API
this.socket.onopen = () => 0;
this.socket.onclose = () => 0;
this.socket.onerror = () => 0;
this.socket.onmessage = () => 0;
this.socket = undefined;
if (this.closeHandler) {
this.closeHandler({ wasClean: false, code: 4001 });
}
break;
case WebSocket.CLOSING:
// already closing. Let it proceed
break;
default:
throw new Error(`Unknown readyState: ${this.socket.readyState}`);
}
private init(): void {
this.ws = new WebSocket(this.provider);
this.ws.onopen = (): void => {
window.console.log("[antenna-ws] connected");
};
this.ws.onclose = (): void => {
window.console.log("[antenna-ws] disconnected");
};
}
createGatewayServer = (internalRequestHandler, connectionHandler = defaultConnectionHandler, options = { }) => {
const serverOption = {}
if ('port' in options) {
serverOption.port = options.port
} else if ('server' in options) {
serverOption.server = options.server
} else if ('noServer' in options) {
serverOption.noServer = options.noServer
}
const server = new WebSocket.Server(serverOption)
server.on('connection', async (socket, req) => {
try {
const { id } = await connectionHandler(socket, req)
socket.id = id
this.clientMap[id] = socket
socket.on('message', (msg) => this.handleGatewayMessage(msg, socket))
socket.on('close', () => {
delete this.clientMap[id]
})
} catch (e) {
console.log(e)
socket.terminate()
}
})
this.replaceInternalSocket(internalRequestHandler)
return server
async _getWebsocket () {
const wsUrl = 'ws' + (this.instance.secure ? 's' : '') + '://' + this.instance.host + ':' + this.instance.port + '/Websocket?wrapper_key=' + this.wrapperKey
let wsClient
if (!this.multiuser.masterAddress) {
wsClient = new WebSocket(wsUrl)
} else {
wsClient = new WebSocket(wsUrl, [], { headers: { Cookie: 'master_address=' + this.multiuser.masterAddress } })
}
wsClient.onmessage = this._onRequest.bind(this)
wsClient.onopen = this._onOpenWebsocket.bind(this)
wsClient.onerror = this._onErrorWebsocket.bind(this)
wsClient.onclose = this._onCloseWebsocket.bind(this)
return wsClient
}