iking-utils-pro
Version:
金合前端工具库
2 lines (1 loc) • 1.41 kB
JavaScript
import{io as o}from"socket.io-client";const n=[];for(let o=0;o<=15;o++)n[o]=o.toString(16);const e={reconnectionDelayMax:1e4,reconnectionAttempts:1/0,autoConnect:!0,new:!1,forceNew:!1,query:{},path:""};window.socketMap=new Map;const t=(t,c=e)=>{if("undefined"==typeof window)throw new Error("当前非浏览器环境,请在浏览器环境下使用useSocket");const r=window.socketMap,s=t+c.path,i=`[Iking-Utils] [${s}]`,l=()=>{Array.from(r.keys()).forEach((o=>{r.get(o)&&(r.get(o)?.close(),r.delete(o))}))};if(!c?.new&&r.has(s))return console.log(`[${i}] 从缓存中获取`),{socket:r.get(s),closeAll:l};const a=o(t,{...e,...c});return a.on("connect",(()=>{console.info(`[${i}] 已连接`)})),a.on("disconnect",(o=>{console.info(`[${i}] ${o}`)})),a.on("connect_error",(o=>{console.info(`[${i}] connect_error: `,o)})),a.on("connect_timeout",(o=>{console.info(`[${i}] connect_timeout: `,o)})),a.on("reconnect",(o=>{console.info(`[${i}] reconnect: `,o)})),a.on("reconnect_attempt",(o=>{console.info(`[${i}] reconnect_attempt: `,o)})),a.on("reconnecting",(o=>{console.info(`[${i}] reconnecting: `,o)})),a.on("ping",(o=>{console.info(`[${i}] ping: `,o)})),r.has(t)?r.set(`${t}__${function(){let o="";for(let e=1;e<=36;e++)o+=9===e||14===e||19===e||24===e?"-":15===e?4:20===e?n[4*Math.random()|8]:n[16*Math.random()|0];return o.replace(/-/g,"")}()}`,a):r.set(t,a),{socket:a,closeAll:l}};export{t as useSocket};