CasaOS/service/socket.go
2022-02-28 14:14:39 +08:00

78 lines
1.4 KiB
Go

package service
import (
"encoding/json"
"fmt"
"net/url"
"strings"
"time"
"github.com/IceWhaleTech/CasaOS/model"
"github.com/IceWhaleTech/CasaOS/pkg/config"
"github.com/gorilla/websocket"
)
var WebSocketConn *websocket.Conn
func SocketConnect() {
GetUdpConnet()
return
Connect()
ticker := time.NewTicker(time.Second * 5)
defer ticker.Stop()
done := make(chan struct{})
go func() {
defer close(done)
for {
_, message, err := WebSocketConn.ReadMessage()
if err != nil {
Connect()
}
msa := model.MessageModel{}
json.Unmarshal(message, &msa)
if msa.Type == "connection" {
bss, _ := json.Marshal(msa.Data)
content := model.PersionModel{}
err := json.Unmarshal(bss, &content)
fmt.Println(content)
fmt.Println(err)
//开始尝试udp链接
go UDPConnect(content.Ips)
}
}
}()
msg := model.MessageModel{}
msg.Data = config.ServerInfo.Token
msg.Type = "refresh"
msg.From = config.ServerInfo.Token
b, _ := json.Marshal(msg)
for {
select {
case <-ticker.C:
err := WebSocketConn.WriteMessage(websocket.TextMessage, b)
if err != nil {
Connect()
}
case <-done:
return
}
}
}
func Connect() {
host := strings.Split(config.ServerInfo.Handshake, "://")
u := url.URL{Scheme: "ws", Host: host[1], Path: "/v1/ws"}
for {
d, _, e := websocket.DefaultDialer.Dial(u.String(), nil)
if e == nil {
WebSocketConn = d
return
}
time.Sleep(time.Second * 5)
}
}