102 lines
1.5 KiB
Go
102 lines
1.5 KiB
Go
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)
|
|
}
|