Files
public/mywebsocket/socket.go
2025-03-28 18:49:19 +08:00

70 lines
1.2 KiB
Go

package mywebsocket
import (
"net/http"
"sync"
"time"
gws "github.com/gorilla/websocket"
"github.com/xxjwxc/public/myglobal"
)
var (
upgrader = gws.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
HandshakeTimeout: time.Second * 10,
}
)
var node *myglobal.NodeInfo
func init() {
node = myglobal.GetNode()
}
func NewSocketUpgrader(sessionId string, w http.ResponseWriter, r *http.Request) (*Socket, error) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
return nil, err
}
if sessionId == "" {
sessionId = node.GetIDStr()
}
return &Socket{
SessionId: sessionId,
conn: conn,
}, nil
}
type Socket struct {
SessionId string
conn *gws.Conn
sync.Mutex
}
func (s *Socket) ID() string {
return s.SessionId
}
func (s *Socket) WriteMessage(byteMessage []byte) error {
s.Mutex.Lock()
defer s.Mutex.Unlock()
return s.conn.WriteMessage(gws.BinaryMessage, byteMessage)
}
func (s *Socket) ReadMessage() (messageType int, p []byte, err error) {
return s.conn.ReadMessage()
}
func (s *Socket) Close() {
s.Mutex.Lock()
defer s.Mutex.Unlock()
s.conn.Close()
}
// func (s *Socket) Upgrade(w http.ResponseWriter, r *http.Request) (*gws.Conn, error) {
// return upgrader.Upgrade(w, r, nil)
// }