deesCloud-api/ws.go

102 lines
1.5 KiB
Go
Raw Normal View History

2025-07-11 11:03:59 +08:00
package main
import (
"time"
// "encoding/json"
// "strings"
"fmt"
"github.com/astaxie/beego/logs"
"golang.org/x/net/websocket"
)
//websocket
type wsSubscribeCmd struct {
ID string `json:"id"` //井名
User string `json:user`
Lang string `json:"lang"`
}
type wsMsg struct {
ID string `json:"id"`
Type int `json:"type"` //0 真实数据 1 是心跳
Msg []GetHisWellRespdata `json:"msg"`
}
func init() {
/*go func() {
t := time.NewTicker(time.Second * 5)
for {
select {
case <-t.C:
ioCh <- "hello" + time.Now().String()
}
}
}()*/
}
//HandleSubscribe subscribe handler
func HandleSubscribe(ws *websocket.Conn) {
defer ws.Close()
var cmd wsSubscribeCmd
var err error
err = websocket.JSON.Receive(ws, &cmd)
if err != nil {
logs.Error("websocket.JSON.Receive failed %v", err)
return
}
logs.Info("receive cmd :", cmd)
var ioCh = make(chan []GetHisWellRespdata, 1000)
var exitCh = make(chan struct{}, 1)
go wsGetWellRealTimeData(cmd.Lang, cmd.ID, cmd.User, ioCh, exitCh)
t := time.NewTicker(time.Second * 5)
for {
var msg wsMsg
select {
case v, ok := <-ioCh:
if !ok {
logs.Info("msg chan err!")
goto exit_l
}
//fmt.Println(v)
msg = wsMsg{Msg: v}
case <-t.C:
msg = wsMsg{Type: 1}
/*case <-exitCh:
goto exit_l*/
}
err := websocket.JSON.Send(ws, msg)
if err != nil {
logs.Info(fmt.Sprintf("ws send failed!%v!Msg is:%v", err, msg.Msg))
goto exit_l
}
}
exit_l:
close(exitCh)
}