mirror of
https://github.com/IceWhaleTech/CasaOS.git
synced 2025-06-16 05:55:33 +00:00
104 lines
2.3 KiB
Go
104 lines
2.3 KiB
Go
package service
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/url"
|
|
"reflect"
|
|
"time"
|
|
|
|
"github.com/IceWhaleTech/CasaOS/model"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
|
model2 "github.com/IceWhaleTech/CasaOS/service/model"
|
|
"github.com/IceWhaleTech/CasaOS/types"
|
|
"github.com/gorilla/websocket"
|
|
uuid "github.com/satori/go.uuid"
|
|
)
|
|
|
|
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)
|
|
} else if msa.Type == types.PERSONADDFRIEND {
|
|
// new add friend
|
|
uuid := uuid.NewV4().String()
|
|
mi := model2.FriendModel{}
|
|
mi.Avatar = config.UserInfo.Avatar
|
|
mi.Profile = config.UserInfo.Description
|
|
mi.Name = config.UserInfo.UserName
|
|
m := model.MessageModel{}
|
|
m.Data = mi
|
|
m.From = config.ServerInfo.Token
|
|
m.To = msa.From
|
|
m.Type = types.PERSONADDFRIEND
|
|
m.UUId = uuid
|
|
result, err := Dial("192.168.2.224:9902", m)
|
|
friend := model2.FriendModel{}
|
|
if err != nil && !reflect.DeepEqual(result, friend) {
|
|
dataModelByte, _ := json.Marshal(result.Data)
|
|
err := json.Unmarshal(dataModelByte, &friend)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
}
|
|
}
|
|
if len(friend.Token) == 0 {
|
|
friend.Token = m.From
|
|
}
|
|
MyService.Friend().AddFriend(friend)
|
|
}
|
|
}
|
|
}()
|
|
|
|
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() {
|
|
u := url.URL{Scheme: "ws", Host: config.ServerInfo.Handshake + ":8088", Path: "/v1/ws"}
|
|
for {
|
|
d, _, e := websocket.DefaultDialer.Dial(u.String(), nil)
|
|
if e == nil {
|
|
WebSocketConn = d
|
|
return
|
|
}
|
|
fmt.Println(e)
|
|
time.Sleep(time.Second * 5)
|
|
}
|
|
}
|