mirror of
https://github.com/xxjwxc/public.git
synced 2025-10-05 15:56:54 +08:00
70 lines
1.2 KiB
Go
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)
|
|
// }
|