Add websocket

This commit is contained in:
link 2022-02-18 19:06:03 +08:00
parent 6cba025679
commit c6928c333d
5 changed files with 101 additions and 3 deletions

View file

@ -32,7 +32,9 @@ func init() {
//gredis.GetRedisConn(config.RedisInfo), //gredis.GetRedisConn(config.RedisInfo),
service.MyService = service.NewService(sqliteDB, loger2.NewOLoger()) service.MyService = service.NewService(sqliteDB, loger2.NewOLoger())
service.Cache = cache.Init() service.Cache = cache.Init()
go service.SocketConnect()
route.InitFunction() route.InitFunction()
} }
// @title casaOS API // @title casaOS API

View file

@ -5,8 +5,8 @@ import "time"
type PersionModel struct { type PersionModel struct {
Token string `json:"token"` Token string `json:"token"`
Ips []string `json:"ips"` Ips []string `json:"ips"`
CreatedAt time.Time `gorm:"<-:create;autoCreateTime" json:"created_at"` CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` UpdatedAt time.Time `json:"updated_at"`
} }
//记录链接状态 //记录链接状态
@ -17,3 +17,8 @@ type ConnectState struct {
CreatedAt time.Time `json:"created_at"` CreatedAt time.Time `json:"created_at"`
UUId string `json:"uuid"` //对接标识 UUId string `json:"uuid"` //对接标识
} }
type MessageModel struct {
Type string `json:"type"`
Data interface{} `json:"data"`
UUId string `json:"uuid"`
}

View file

@ -7,6 +7,7 @@ import (
"github.com/IceWhaleTech/CasaOS/pkg/config" "github.com/IceWhaleTech/CasaOS/pkg/config"
"github.com/IceWhaleTech/CasaOS/service" "github.com/IceWhaleTech/CasaOS/service"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
uuid "github.com/satori/go.uuid" uuid "github.com/satori/go.uuid"
) )
@ -21,5 +22,9 @@ func PersonTest(c *gin.Context) {
m.Type = "" m.Type = ""
m.UUId = uuid.NewV4().String() m.UUId = uuid.NewV4().String()
service.MyService.Person().Handshake(m) //service.MyService.Person().Handshake(m)
err := service.WebSocketConn.WriteMessage(websocket.TextMessage, []byte("test1111"))
if err == nil {
return
}
} }

View file

@ -74,6 +74,8 @@ func (p *personService) Handshake(m model.ConnectState) {
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
//websocket 连接
// bidirectionHole(srcAddr, &anotherPeer) // bidirectionHole(srcAddr, &anotherPeer)
//2udp打洞成功向服务器汇报打洞结果 //2udp打洞成功向服务器汇报打洞结果

84
service/socket.go Normal file
View file

@ -0,0 +1,84 @@
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)
}
}
}()
msg := model.MessageModel{}
msg.Data = config.ServerInfo.Token
msg.Type = "refresh"
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"}
var err error
for {
msg := model.MessageModel{}
msg.Data = config.ServerInfo.Token
msg.Type = "join"
b, _ := json.Marshal(msg)
if WebSocketConn != nil {
err = WebSocketConn.WriteMessage(websocket.TextMessage, b)
if err == nil {
return
}
}
d, _, e := websocket.DefaultDialer.Dial(u.String(), nil)
if e == nil {
WebSocketConn = d
return
}
time.Sleep(time.Second * 5)
}
}