UNPKG

@bcswaper/apis

Version:

bcswaper apis

1 lines 998 B
import{conerr}from"../../client";import{WebSocket}from"ws";export class OkxSocketClient{constructor(t,e,s,o,i){this.socket=null,this.lastMessageTime=0,this.heatbeatInterval=2e4,this.startHeartbeat=()=>{this.heartbeatTimer=setInterval((()=>{Date.now()-this.lastMessageTime>this.heatbeatInterval&&this.socket?.send("ping")}),this.heatbeatInterval/2-2)},this.endpoint=t,this.onOpen=e,this.onMessage=s,this.onClose=o,this.onError=i}async connect(){this.socket=new WebSocket(this.endpoint),this.socket.onopen=()=>{this.lastMessageTime=Date.now(),this.startHeartbeat(),this.onOpen()},this.socket.onmessage=t=>{this.lastMessageTime=Date.now(),"pong"!==t.data&&this.onMessage(t)},this.socket.onclose=()=>{clearInterval(this.heartbeatTimer),this.onClose()},this.socket.onerror=t=>{this.lastMessageTime=Date.now(),this.onError(t)}}async send(t){this.socket?.readyState===WebSocket.OPEN?this.socket.send(JSON.stringify(t)):conerr(`websocket ${this.endpoint} is not open.`)}async close(){this.socket?.close()}}