Add websocket
This commit is contained in:
parent
6cba025679
commit
c6928c333d
2
main.go
2
main.go
|
@ -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
|
||||||
|
|
|
@ -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"`
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
84
service/socket.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue