import{_ as p}from"./index-CUN88rPH.js";import{N as l,a as t,ad as g,Y as d,$ as y,W as u,X as C,o as h}from"./vendor-BfKWghV4.js";const S={name:"SSEConnection",data(){return{isConnected:!1,eventSource:null,messages:[],retryCount:0,maxRetries:5,retryDelay:3e3,isWsConnected:!1,wsConnection:null,wsMessages:[],wsRetryCount:0,wsMaxRetries:5,wsRetryDelay:3e3}},computed:{connectionStatusText(){return this.isConnected?"已连接":"未连接"},wsConnectionStatusText(){return this.isWsConnected?"已连接":"未连接"}},methods:{async connect(){if(!this.isConnected)try{const a=localStorage.getItem("token"),n={message:"压缩空气系统中变频器的应用如何实现节能?",user_id:13817302290,session_id:""},r=await fetch("http://192.168.100.187:8062/api/agents/chat/multimodal/ ",{method:"POST",mode:"cors",credentials:"include",headers:{Authorization:`JWT ${a}`,"Content-Type":"application/json"},body:JSON.stringify(n)});if(!r.ok)throw new Error("获取SSE URL失败");console.log("Response Headers:",r.headers),console.log("All Headers:",Array.from(r.headers.entries()));let i=r.headers.get("X-Sse-Url");if(!i){const e=await r.json();if(console.log("Response Data:",e),i=e.data.sse_url||e.sse_url,!i)throw new Error("未找到SSE URL")}const o=`http://192.168.100.187:8062${i}${i.includes("?")?"&":"?"}token=JWT ${a}`;this.eventSource=new EventSource(o),this.eventSource.onmessage=e=>{console.log("收到SSE消息:",e.data);try{const s=JSON.parse(e.data);let c="",m="message";switch(s.type){case"connected":c=`已连接 - 会话ID: ${s.session_id}`,m="system";break;case"heartbeat":return;case"thinking_step":c=s.data.content,m="thinking";break;case"completed":c="会话已完成",m="system";break;default:c=JSON.stringify(s)}c&&this.addMessage(c,m)}catch(s){console.error("解析SSE消息失败:",s),this.addMessage(`消息解析错误: ${s.message}`,"error")}},this.eventSource.addEventListener("status",e=>{const s=JSON.parse(e.data);this.addMessage(`状态更新: ${s.status}`,"status")}),this.eventSource.addEventListener("error",e=>{this.addMessage(`错误: ${e.message||"连接错误"}`,"error")}),this.eventSource.onerror=e=>{this.eventSource.readyState===EventSource.CLOSED?this.addMessage("连接已关闭","system"):(this.addMessage(`连接错误: ${e.message}`,"error"),this.attemptReconnect())},this.isConnected=!0,this.retryCount=0,this.addMessage("成功连接到SSE服务器","system")}catch(a){this.addMessage(`连接失败: ${a.message}`,"error"),this.attemptReconnect()}},disconnect(){this.eventSource&&(this.eventSource.close(),this.eventSource=null,this.isConnected=!1,this.addMessage("已手动断开连接","system"))},attemptReconnect(){this.retryCount{this.connect()},this.retryDelay)):(this.addMessage("达到最大重试次数,停止尝试连接","error"),this.isConnected=!1)},addMessage(a,n="message"){this.messages.unshift({content:a,type:n,timestamp:new Date}),this.messages.length>100&&this.messages.pop()},clearMessages(){this.messages=[]},formatTime(a){return a.toLocaleTimeString()},async connectWs(){if(!this.isWsConnected)try{const n=`ws://192.168.100.187:8062/ws/thinking/13/35fe2491-dca8-4a1e-b927-43bba0c2b669/?token=JWT ${localStorage.getItem("token")}`;this.wsConnection=new WebSocket(n),this.wsConnection.onopen=()=>{this.isWsConnected=!0,this.wsRetryCount=0,this.addWsMessage("成功连接到WebSocket服务器","system")},this.wsConnection.onmessage=r=>{console.log("收到WebSocket消息:",r.data);try{const i=JSON.parse(r.data);let o="",e="message";switch(i.type){case"connected":o=`已连接 - 会话ID: ${i.session_id}`,e="system";break;case"thinking_step":o=i.data.content,e="thinking";break;case"completed":o="会话已完成",e="system";break;default:o=JSON.stringify(i)}o&&this.addWsMessage(o,e)}catch(i){console.error("解析WebSocket消息失败:",i),this.addWsMessage(`消息解析错误: ${i.message}`,"error")}},this.wsConnection.onerror=r=>{this.addWsMessage(`连接错误: ${r.message||"未知错误"}`,"error"),this.attemptWsReconnect()},this.wsConnection.onclose=()=>{this.isWsConnected=!1,this.addWsMessage("连接已关闭","system")}}catch(a){this.addWsMessage(`连接失败: ${a.message}`,"error"),this.attemptWsReconnect()}},disconnectWs(){this.wsConnection&&(this.wsConnection.close(),this.wsConnection=null,this.isWsConnected=!1,this.addWsMessage("已手动断开连接","system"))},attemptWsReconnect(){this.wsRetryCount{this.connectWs()},this.wsRetryDelay)):(this.addWsMessage("达到最大重试次数,停止尝试连接","error"),this.isWsConnected=!1)},addWsMessage(a,n="message"){this.wsMessages.unshift({content:a,type:n,timestamp:new Date}),this.wsMessages.length>100&&this.wsMessages.pop()},clearWsMessages(){this.wsMessages=[]}},beforeUnmount(){this.eventSource&&this.eventSource.close(),this.wsConnection&&this.wsConnection.close()}},_={class:"sse-container"},w={class:"status-indicator"},f={class:"controls"},W=["disabled"],k=["disabled"],M={class:"message-list"},b={key:0,class:"empty-message"},v={class:"message-header"},R={class:"message-type"},T={class:"message-time"},E={class:"message-content"},x={class:"ws-container"},D={class:"status-indicator"},J={class:"controls"},N=["disabled"],O=["disabled"],U={class:"message-list"},L={key:0,class:"empty-message"},I={class:"message-header"},A={class:"message-type"},B={class:"message-time"},j={class:"message-content"};function z(a,n,r,i,o,e){return h(),l(u,null,[t("div",_,[n[6]||(n[6]=t("h2",null,"SSE 实时数据连接",-1)),t("div",w,[t("span",{class:g(["status-dot",{connected:o.isConnected}])},null,2),t("span",null,d(e.connectionStatusText),1)]),t("div",f,[t("button",{onClick:n[0]||(n[0]=(...s)=>e.connect&&e.connect(...s)),disabled:o.isConnected},"连接",8,W),t("button",{onClick:n[1]||(n[1]=(...s)=>e.disconnect&&e.disconnect(...s)),disabled:!o.isConnected},"断开",8,k),t("button",{onClick:n[2]||(n[2]=(...s)=>e.clearMessages&&e.clearMessages(...s))},"清空消息")]),t("div",M,[o.messages.length===0?(h(),l("div",b," 暂无消息,请先连接服务器 ")):y("",!0),(h(!0),l(u,null,C(o.messages,(s,c)=>(h(),l("div",{key:c,class:g(["message-item",s.type])},[t("div",v,[t("span",R,d(s.type.toUpperCase()),1),t("span",T,d(e.formatTime(s.timestamp)),1)]),t("div",E,d(s.content),1)],2))),128))])]),t("div",x,[n[7]||(n[7]=t("h2",null,"WebSocket 实时数据连接",-1)),t("div",D,[t("span",{class:g(["status-dot",{connected:o.isWsConnected}])},null,2),t("span",null,d(e.wsConnectionStatusText),1)]),t("div",J,[t("button",{onClick:n[3]||(n[3]=(...s)=>e.connectWs&&e.connectWs(...s)),disabled:o.isWsConnected},"连接",8,N),t("button",{onClick:n[4]||(n[4]=(...s)=>e.disconnectWs&&e.disconnectWs(...s)),disabled:!o.isWsConnected},"断开",8,O),t("button",{onClick:n[5]||(n[5]=(...s)=>e.clearWsMessages&&e.clearWsMessages(...s))},"清空消息")]),t("div",U,[o.wsMessages.length===0?(h(),l("div",L," 暂无消息,请先连接WebSocket服务器 ")):y("",!0),(h(!0),l(u,null,C(o.wsMessages,(s,c)=>(h(),l("div",{key:c,class:g(["message-item",s.type])},[t("div",I,[t("span",A,d(s.type.toUpperCase()),1),t("span",B,d(e.formatTime(s.timestamp)),1)]),t("div",j,d(s.content),1)],2))),128))])])],64)}const X=p(S,[["render",z],["__scopeId","data-v-2f84634a"]]);export{X as default};