// import { WebSocketSubject, WebSocketSubjectConfig } from 'rxjs/webSocket'; // import { RxWebsocketSubject } from '@interblockchain/reconnect-websocket'; // import { Subject } from 'rxjs'; // // import { logger } from '../logger/logger'; // import { config } from '../config'; // import { NodeId } from './node-id'; // const nodeId = new NodeId(); // const WsWebSocket = require('ws'); // import Websocket from 'ws'; // import { debounceTime, startWith } from 'rxjs/operators'; // export class CustomWebsocket extends WsWebSocket { // constructor(url: string) { // setInterval(() => { // console.log('Websocket State: ', this.readyState) // // this.ping(); // }, 10000) // super(url, { headers: { "apiKey": config.apiKey } }); // } // } // export class CustomWebsocketSubject extends Subject { // private _websocket: Websocket; // private pingSubject = new Subject(); // constructor(url: string) { // super(); // this._websocket = new Websocket(url, { headers: { "apiKey": config.apiKey } }); // this._websocket.onopen = () => { // console.log('Websocket open') // const f = async () => { // console.log("clientID: " + await nodeId.nodeId) // this._websocket.send("clientID: " + await nodeId.nodeId); // }; // f(); // } // // Send ping message if server did not sent one after 10 sec // this.pingSubject.pipe(startWith(null), debounceTime(30000)).subscribe(() => { // this._websocket.ping(); // console.log('Ping sent to server'); // this.pingSubject.next(); // }) // this._websocket.on('ping', () => { // this.pingSubject.next(); // console.log('Ping received from server') // }) // this._websocket.on('pong', () => { // this.pingSubject.next(); // console.log('Pong received from server') // }) // this._websocket.onclose = () => { // console.log('Websocket closed') // } // this._websocket.onerror = (event) => { // console.log('Error: ', event); // } // this._websocket.onmessage = (data) => { // console.log(data); // super.next(JSON.parse(data.data as string)) // } // } // next(data: T) { // this._websocket.send(JSON.stringify(data)); // this.pingSubject.next(); // } // } // import { WebsocketSubject } from '@interblockchain/reconnect-websocket'; // import { Subject, Observable } from 'rxjs'; // import * as WebSocket from 'ws'; // export const createWebsocket = (url: string, params: { headers: { apiKey: string }, keepAlive: boolean }, onOpenTask: (ws: WebSocket) => Observable): Subject => { // // const openSubject = new Subject(); // // const closeSubject = new Subject(); // // openSubject.subscribe(async () => { // // logger.log('info', 'Websocket opened'); // // websocket.next("clientID: " + (await nodeId.nodeId)) // // }); // // closeSubject.subscribe(() => logger.log('info', 'Websocket closed')); // // const config: WebSocketSubjectConfig<{}> = // // { // // url: url, // // // tslint:disable-next-line:no-any // // WebSocketCtor: CustomWebsocket as any as new (url: string) => WebSocket, // // openObserver: openSubject, // // closeObserver: closeSubject, // // serializer: (data: string | {}) => { // // if (typeof data === 'string') { // // return data; // // } else { // // return JSON.stringify(data); // // } // // } // // }; // // var websocket = new WebSocketSubject(config); // var websocket = new WebsocketSubject( // url, // params, // new Subject() as any, // new Subject() as any, // onOpenTask as any // ); // // var websocket = new RxWebsocketSubject( // // url, // // 10000, // // -1, // // () => CustomWebsocket as any as new (url: string) => WebSocket, // // undefined, // // (data: string | {}) => { // // if (typeof data === 'string') { // // return data; // // } else { // // return JSON.stringify(data); // // } // // }, // // openSubject, // // closeSubject // // ) // return websocket as any // }