socket -> websocket_peer.

This commit is contained in:
Miroslav Šedivý 2020-11-25 18:36:33 +01:00
parent d49542013b
commit ff7efe9f3b
7 changed files with 68 additions and 68 deletions

View File

@ -15,7 +15,7 @@ type SessionCtx struct {
admin bool admin bool
connected bool connected bool
manager *SessionManagerCtx manager *SessionManagerCtx
socket types.WebSocket websocket_peer types.WebSocketPeer
peer types.Peer peer types.Peer
} }
@ -43,8 +43,8 @@ func (session *SessionCtx) SetName(name string) {
session.name = name session.name = name
} }
func (session *SessionCtx) SetSocket(socket types.WebSocket) { func (session *SessionCtx) SetWebSocketPeer(websocket_peer types.WebSocketPeer) {
session.socket = socket session.websocket_peer = websocket_peer
session.manager.emmiter.Emit("created", session) session.manager.emmiter.Emit("created", session)
} }
@ -59,7 +59,7 @@ func (session *SessionCtx) SetConnected(connected bool) {
session.manager.emmiter.Emit("connected", session) session.manager.emmiter.Emit("connected", session)
} else { } else {
session.manager.emmiter.Emit("disconnected", session) session.manager.emmiter.Emit("disconnected", session)
session.socket = nil session.websocket_peer = nil
// TODO: Refactor. // TODO: Refactor.
_ = session.manager.Destroy(session.id) _ = session.manager.Destroy(session.id)
@ -77,11 +77,11 @@ func (session *SessionCtx) Disconnect(reason string) error {
} }
func (session *SessionCtx) Send(v interface{}) error { func (session *SessionCtx) Send(v interface{}) error {
if session.socket == nil { if session.websocket_peer == nil {
return nil return nil
} }
return session.socket.Send(v) return session.websocket_peer.Send(v)
} }
func (session *SessionCtx) SignalAnswer(sdp string) error { func (session *SessionCtx) SignalAnswer(sdp string) error {
@ -93,8 +93,8 @@ func (session *SessionCtx) SignalAnswer(sdp string) error {
} }
func (session *SessionCtx) destroy() error { func (session *SessionCtx) destroy() error {
if session.socket != nil { if session.websocket_peer != nil {
if err := session.socket.Destroy(); err != nil { if err := session.websocket_peer.Destroy(); err != nil {
return err return err
} }
} }

View File

@ -9,7 +9,7 @@ type Session interface {
IsHost() bool IsHost() bool
Connected() bool Connected() bool
SetName(name string) SetName(name string)
SetSocket(socket WebSocket) SetWebSocketPeer(websocket_peer WebSocketPeer)
SetPeer(peer Peer) SetPeer(peer Peer)
SetConnected(connected bool) SetConnected(connected bool)
Disconnect(reason string) error Disconnect(reason string) error

View File

@ -2,7 +2,7 @@ package types
import "net/http" import "net/http"
type WebSocket interface { type WebSocketPeer interface {
Send(v interface{}) error Send(v interface{}) error
Destroy() error Destroy() error
} }

View File

@ -40,7 +40,7 @@ type MessageHandlerCtx struct {
locked bool locked bool
} }
func (h *MessageHandlerCtx) Connected(session types.Session, socket types.WebSocket) (bool, string) { func (h *MessageHandlerCtx) Connected(session types.Session, websocket_peer types.WebSocketPeer) (bool, string) {
if h.locked && !session.Admin(){ if h.locked && !session.Admin(){
h.logger.Debug().Msg("server locked") h.logger.Debug().Msg("server locked")
return false, "locked" return false, "locked"

View File

@ -142,13 +142,13 @@ func (ws *WebSocketManagerCtx) Upgrade(w http.ResponseWriter, r *http.Request) e
return connection.Close() return connection.Close()
} }
socket := &WebSocketCtx{ websocket_peer := &WebSocketPeerCtx{
session: session, session: session,
ws: ws, ws: ws,
connection: connection, connection: connection,
} }
ok, reason := ws.handler.Connected(session, socket) ok, reason := ws.handler.Connected(session, websocket_peer)
if !ok { if !ok {
// TODO: Refactor // TODO: Refactor
if err = connection.WriteJSON(message.Disconnect{ if err = connection.WriteJSON(message.Disconnect{
@ -161,7 +161,7 @@ func (ws *WebSocketManagerCtx) Upgrade(w http.ResponseWriter, r *http.Request) e
return connection.Close() return connection.Close()
} }
session.SetSocket(socket) session.SetWebSocketPeer(websocket_peer)
ws.logger. ws.logger.
Debug(). Debug().

View File

@ -0,0 +1,47 @@
package websocket
import (
"encoding/json"
"sync"
"github.com/gorilla/websocket"
"demodesk/neko/internal/types"
)
type WebSocketPeerCtx struct {
session types.Session
ws *WebSocketManagerCtx
connection *websocket.Conn
mu sync.Mutex
}
func (websocket_peer *WebSocketPeerCtx) Send(v interface{}) error {
websocket_peer.mu.Lock()
defer websocket_peer.mu.Unlock()
if websocket_peer.connection == nil {
return nil
}
raw, err := json.Marshal(v)
if err != nil {
return err
}
websocket_peer.ws.logger.Debug().
Str("session", websocket_peer.session.ID()).
Str("address", websocket_peer.connection.RemoteAddr().String()).
Str("raw", string(raw)).
Msg("sending message to client")
return websocket_peer.connection.WriteMessage(websocket.TextMessage, raw)
}
func (websocket_peer *WebSocketPeerCtx) Destroy() error {
if websocket_peer.connection == nil {
return nil
}
return websocket_peer.connection.Close()
}

View File

@ -1,47 +0,0 @@
package websocket
import (
"encoding/json"
"sync"
"github.com/gorilla/websocket"
"demodesk/neko/internal/types"
)
type WebSocketCtx struct {
session types.Session
ws *WebSocketManagerCtx
connection *websocket.Conn
mu sync.Mutex
}
func (socket *WebSocketCtx) Send(v interface{}) error {
socket.mu.Lock()
defer socket.mu.Unlock()
if socket.connection == nil {
return nil
}
raw, err := json.Marshal(v)
if err != nil {
return err
}
socket.ws.logger.Debug().
Str("session", socket.session.ID()).
Str("address", socket.connection.RemoteAddr().String()).
Str("raw", string(raw)).
Msg("sending message to client")
return socket.connection.WriteMessage(websocket.TextMessage, raw)
}
func (socket *WebSocketCtx) Destroy() error {
if socket.connection == nil {
return nil
}
return socket.connection.Close()
}