import{r as l,a9 as h}from"./index-Daa5jh-U.js";const C={url:"",heartBeatData:"",heartBeatInterval:60*1e3,reconnectInterval:5e3,maxReconnectAttempts:10},o={Connecting:"正在连接...",Connected:"连接已建立",Disconnecting:"连接正在关闭",Disconnected:"连接已断开"},g=1e3;function S(p={}){const e={options:{...C,...p},socket:null,reconnectAttempts:0,reconnectTimeout:null,heartBetaSendTimer:null,heartBetaTimeoutTimer:null},t=l(o.Disconnected),i=l(null),a=l(null),u=n=>{if(s(),t.value=o.Connecting,!window.navigator.onLine){setTimeout(()=>{t.value=o.Disconnected},500);return}e.socket=new WebSocket(e.options.url),e.socket.onopen=c=>{console.log("socket连接:",c),e.reconnectAttempts=0,t.value=o.Connected,a.value=null,m(),n&&n()},e.socket.onmessage=c=>{console.log("socket消息:",c),m();const{data:f}=c,T=JSON.parse(f);+T.msg_id!=0&&(i.value=T)},e.socket.onclose=c=>{console.log("socket关闭:",c),t.value=o.Disconnected,c.code!==g&&d()},e.socket.onerror=c=>{console.log("socket报错:",c),t.value=o.Disconnected,a.value=c,d()}},s=()=>{e.socket&&(e.socket.OPEN||e.socket.CONNECTING)&&(console.log("socket断开连接"),t.value=o.Disconnecting,e.socket.onmessage=null,e.socket.onerror=null,e.socket.onclose=null,e.socket.close(g,"normal closure"),t.value=o.Disconnected,e.socket=null),r(),k()},v=n=>{e.socket&&t.value===o.Connected&&(e.socket.send(JSON.stringify(n)),console.log("socket发送:",JSON.stringify(n)))},m=()=>{r(),B(()=>{t.value===o.Connected&&(e.socket.send(e.options.heartBeatData),console.log("socket心跳发送:",e.options.heartBeatData))})},B=n=>{e.heartBetaSendTimer=setTimeout(()=>{n&&n(),e.heartBetaTimeoutTimer=setTimeout(()=>{e.socket.close(4444,"heart timeout")},e.options.heartBeatInterval)},e.options.heartBeatInterval)},r=()=>{e.heartBetaSendTimer&&clearTimeout(e.heartBetaSendTimer),e.heartBetaTimeoutTimer&&clearTimeout(e.heartBetaTimeoutTimer)},d=()=>{if(!(t.value===o.Connected||t.value===o.Connecting))if(r(),e.reconnectAttempts<e.options.maxReconnectAttempts){console.log("socket重连:",e.reconnectAttempts);const n=Math.max(e.options.reconnectInterval,e.reconnectAttempts*1e3);console.log("间隔时间:",n),e.reconnectTimeout=setTimeout(()=>{t.value!==o.Connected&&t.value!==o.Connecting&&u()},n),e.reconnectAttempts+=1}else t.value=o.Disconnected,k()},k=()=>{e.reconnectTimeout&&clearTimeout(e.reconnectTimeout)};return h(()=>{s()}),window.addEventListener("unload",()=>{s()}),{status:t,message:i,error:a,connect:u,disconnect:s,sendMessage:v}}export{S as u};
|