1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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() {
- 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)
- }
- }
|