@starbase/socket
Version:
Starbase Socket
1 lines • 1.34 kB
JavaScript
;function Socket(server){let stateHandler,messageHandler,errorHandler,ws=null,closed=!1;const ERROR=e=>{errorHandler&&"function"==typeof errorHandler&&errorHandler(e),console.error(e)},stateChange=state=>{stateHandler&&"function"==typeof stateHandler&&stateHandler(state)},onopen=e=>{stateChange("connected"),closed=!1},onclose=e=>{stateChange("disconnected"),closed||ERROR("disconnected.")},onmessage=msg=>{if(messageHandler&&"function"==typeof messageHandler)try{msg=JSON.parse(msg.data),messageHandler(msg)}catch(e){}},onerror=err=>{errorHandler&&"function"==typeof errorHandler&&errorHandler(err)};let socket={getState:()=>!(!ws||1!==ws.readyState)};return socket.connect=socket.open=(()=>{ws&&1===ws.readyState?ERROR("Already connected."):server?((ws=new WebSocket(server)).onopen=onopen,ws.onmessage=onmessage,ws.onclose=onclose,ws.onerror=onerror):ERROR("No server provided.")}),socket.send=(message=>{ws&&1===ws.readyState?ws.send(JSON.stringify(message),err=>{err?ERROR(err.toString()):console.log("Message Sent")}):ERROR("Not Connected")}),socket.close=(()=>{closed=!0,ws&&1===ws.readyState?ws.close():ERROR("Not Connected")}),socket.onMessage=(handler=>{messageHandler=handler}),socket.onState=(cb=>{stateHandler=cb}),socket.onError=(cb=>{errorHandler=cb}),socket.setServer=(socketURL=>{server=socketURL}),socket}