mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
Refactor websocket session sync (#44)
* refactor websocket peer and comment functions. * update comments. * add DestroyWebSocketPeer.
This commit is contained in:
@ -207,19 +207,18 @@ func (manager *WebSocketManagerCtx) Upgrade(checkOrigin types.CheckOrigin) types
|
||||
}
|
||||
|
||||
func (manager *WebSocketManagerCtx) connect(connection *websocket.Conn, r *http.Request) {
|
||||
// create new peer
|
||||
peer := newPeer(connection)
|
||||
|
||||
session, err := manager.sessions.Authenticate(r)
|
||||
if err != nil {
|
||||
manager.logger.Warn().Err(err).Msg("authentication failed")
|
||||
peer.Destroy(err.Error())
|
||||
newPeer(manager.logger, connection).Destroy(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// add session id to all log messages
|
||||
logger := manager.logger.With().Str("session_id", session.ID()).Logger()
|
||||
peer.setSessionID(session.ID())
|
||||
|
||||
// create new peer
|
||||
peer := newPeer(logger, connection)
|
||||
|
||||
if !session.Profile().CanConnect {
|
||||
logger.Warn().Msg("connection disabled")
|
||||
@ -238,14 +237,12 @@ func (manager *WebSocketManagerCtx) connect(connection *websocket.Conn, r *http.
|
||||
logger.Info().Msg("replacing peer connection")
|
||||
}
|
||||
|
||||
session.SetWebSocketPeer(peer)
|
||||
|
||||
logger.Info().
|
||||
Str("address", connection.RemoteAddr().String()).
|
||||
Str("agent", r.UserAgent()).
|
||||
Msg("connection started")
|
||||
|
||||
session.SetWebSocketConnected(peer, true, false)
|
||||
session.ConnectWebSocketPeer(peer)
|
||||
|
||||
// this is a blocking function that lives
|
||||
// throughout whole websocket connection
|
||||
@ -277,7 +274,7 @@ func (manager *WebSocketManagerCtx) connect(connection *websocket.Conn, r *http.
|
||||
}
|
||||
}
|
||||
|
||||
session.SetWebSocketConnected(peer, false, delayedDisconnect)
|
||||
session.DisconnectWebSocketPeer(peer, delayedDisconnect)
|
||||
}
|
||||
|
||||
func (manager *WebSocketManagerCtx) handle(connection *websocket.Conn, peer types.WebSocketPeer, session types.Session) error {
|
||||
|
@ -2,12 +2,10 @@ package websocket
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"sync"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
"github.com/demodesk/neko/pkg/types"
|
||||
"github.com/demodesk/neko/pkg/types/event"
|
||||
@ -21,30 +19,17 @@ type WebSocketPeerCtx struct {
|
||||
connection *websocket.Conn
|
||||
}
|
||||
|
||||
func newPeer(connection *websocket.Conn) *WebSocketPeerCtx {
|
||||
logger := log.With().
|
||||
Str("module", "websocket").
|
||||
Str("submodule", "peer").
|
||||
Logger()
|
||||
|
||||
func newPeer(logger zerolog.Logger, connection *websocket.Conn) *WebSocketPeerCtx {
|
||||
return &WebSocketPeerCtx{
|
||||
logger: logger,
|
||||
logger: logger.With().Str("submodule", "peer").Logger(),
|
||||
connection: connection,
|
||||
}
|
||||
}
|
||||
|
||||
func (peer *WebSocketPeerCtx) setSessionID(sessionId string) {
|
||||
peer.logger = peer.logger.With().Str("session_id", sessionId).Logger()
|
||||
}
|
||||
|
||||
func (peer *WebSocketPeerCtx) Send(event string, payload any) {
|
||||
peer.mu.Lock()
|
||||
defer peer.mu.Unlock()
|
||||
|
||||
if peer.connection == nil {
|
||||
return
|
||||
}
|
||||
|
||||
raw, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
peer.logger.Err(err).Str("event", event).Msg("message marshalling has failed")
|
||||
@ -79,10 +64,6 @@ func (peer *WebSocketPeerCtx) Ping() error {
|
||||
peer.mu.Lock()
|
||||
defer peer.mu.Unlock()
|
||||
|
||||
if peer.connection == nil {
|
||||
return errors.New("peer connection not found")
|
||||
}
|
||||
|
||||
// application level heartbeat
|
||||
if err := peer.connection.WriteJSON(types.WebSocketMessage{
|
||||
Event: event.SYSTEM_HEARTBEAT,
|
||||
@ -103,9 +84,6 @@ func (peer *WebSocketPeerCtx) Destroy(reason string) {
|
||||
peer.mu.Lock()
|
||||
defer peer.mu.Unlock()
|
||||
|
||||
if peer.connection != nil {
|
||||
err := peer.connection.Close()
|
||||
peer.logger.Err(err).Msg("peer connection destroyed")
|
||||
peer.connection = nil
|
||||
}
|
||||
err := peer.connection.Close()
|
||||
peer.logger.Err(err).Msg("peer connection destroyed")
|
||||
}
|
||||
|
Reference in New Issue
Block a user