From b1b5a70c64df1fdcebd55f2e68b2c5f442ca1710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Sat, 31 Oct 2020 21:20:42 +0100 Subject: [PATCH] WebRTC refactor -> session dependency removal. --- internal/session/session.go | 12 ++++++++---- internal/types/session.go | 5 +++-- internal/webrtc/handle.go | 6 ++++-- internal/webrtc/webrtc.go | 17 ++++------------- internal/websocket/admin.go | 4 ++-- neko.go | 9 ++++----- 6 files changed, 25 insertions(+), 28 deletions(-) diff --git a/internal/session/session.go b/internal/session/session.go index c760f53b..9c74e105 100644 --- a/internal/session/session.go +++ b/internal/session/session.go @@ -36,6 +36,10 @@ func (session *Session) Muted() bool { return session.muted } +func (session *Session) IsHost() bool { + return session.manager.host == session.id +} + func (session *Session) Connected() bool { return session.connected } @@ -75,18 +79,18 @@ func (session *Session) SetPeer(peer types.Peer) error { return nil } -func (session *Session) SetConnected(connected bool) error { +func (session *Session) SetConnected(connected bool) { session.connected = connected if connected { session.manager.emmiter.Emit("connected", session.id, session) } - return nil } -func (session *Session) Kick(reason string) error { +func (session *Session) Disconnect(reason string) error { if session.socket == nil { return nil } + if err := session.socket.Send(&message.Disconnect{ Event: event.SYSTEM_DISCONNECT, Message: reason, @@ -94,7 +98,7 @@ func (session *Session) Kick(reason string) error { return err } - return session.destroy() + return session.manager.Destroy(session.id) } func (session *Session) Send(v interface{}) error { diff --git a/internal/types/session.go b/internal/types/session.go index 95f4f876..04a56e26 100644 --- a/internal/types/session.go +++ b/internal/types/session.go @@ -12,15 +12,16 @@ type Session interface { Name() string Admin() bool Muted() bool + IsHost() bool Connected() bool Member() *Member SetMuted(muted bool) SetName(name string) error - SetConnected(connected bool) error + SetConnected(connected bool) SetSocket(socket WebSocket) error SetPeer(peer Peer) error Address() string - Kick(message string) error + Disconnect(message string) error Send(v interface{}) error SignalAnswer(sdp string) error } diff --git a/internal/webrtc/handle.go b/internal/webrtc/handle.go index 57b233d2..a4a07a39 100644 --- a/internal/webrtc/handle.go +++ b/internal/webrtc/handle.go @@ -6,6 +6,8 @@ import ( "strconv" "github.com/pion/webrtc/v2" + + "demodesk/neko/internal/types" ) const OP_MOVE = 0x01 @@ -36,8 +38,8 @@ type PayloadKey struct { Key uint64 } -func (manager *WebRTCManager) handle(id string, msg webrtc.DataChannelMessage) error { - if !manager.sessions.IsHost(id) { +func (manager *WebRTCManager) handle(session types.Session, msg webrtc.DataChannelMessage) error { + if !session.IsHost() { return nil } diff --git a/internal/webrtc/webrtc.go b/internal/webrtc/webrtc.go index 6b6afe7d..8f85eb5f 100644 --- a/internal/webrtc/webrtc.go +++ b/internal/webrtc/webrtc.go @@ -15,11 +15,10 @@ import ( "demodesk/neko/internal/types/config" ) -func New(sessions types.SessionManager, remote types.RemoteManager, config *config.WebRTC) *WebRTCManager { +func New(remote types.RemoteManager, config *config.WebRTC) *WebRTCManager { return &WebRTCManager{ logger: log.With().Str("module", "webrtc").Logger(), remote: remote, - sessions: sessions, config: config, } } @@ -30,7 +29,6 @@ type WebRTCManager struct { audioTrack *webrtc.Track videoCodec *webrtc.RTPCodec audioCodec *webrtc.RTPCodec - sessions types.SessionManager remote types.RemoteManager config *config.WebRTC } @@ -136,7 +134,7 @@ func (manager *WebRTCManager) CreatePeer(id string, session types.Session) (stri connection.OnDataChannel(func(d *webrtc.DataChannel) { d.OnMessage(func(msg webrtc.DataChannelMessage) { - if err = manager.handle(id, msg); err != nil { + if err = manager.handle(session, msg); err != nil { manager.logger.Warn().Err(err).Msg("data handle failed") } }) @@ -151,17 +149,10 @@ func (manager *WebRTCManager) CreatePeer(id string, session types.Session) (stri case webrtc.PeerConnectionStateDisconnected: case webrtc.PeerConnectionStateFailed: manager.logger.Info().Str("id", id).Msg("peer disconnected") - if err = manager.sessions.Destroy(id); err != nil { - manager.logger.Warn().Err(err).Msg("error while destroying session") - } + session.Disconnect("peer connection state failed") case webrtc.PeerConnectionStateConnected: manager.logger.Info().Str("id", id).Msg("peer connected") - if err = session.SetConnected(true); err != nil { - manager.logger.Warn().Err(err).Msg("unable to set connected on peer") - if err = manager.sessions.Destroy(id); err != nil { - manager.logger.Warn().Err(err).Msg("error while destroying session") - } - } + session.SetConnected(true) } }) diff --git a/internal/websocket/admin.go b/internal/websocket/admin.go index cc3e6f05..13c6f7bb 100644 --- a/internal/websocket/admin.go +++ b/internal/websocket/admin.go @@ -236,7 +236,7 @@ func (h *MessageHandler) adminKick(id string, session types.Session, payload *me return nil } - if err := target.Kick("kicked"); err != nil { + if err := target.Disconnect("kicked"); err != nil { return err } @@ -286,7 +286,7 @@ func (h *MessageHandler) adminBan(id string, session types.Session, payload *mes h.banned[address[0]] = true - if err := target.Kick("banned"); err != nil { + if err := target.Disconnect("banned"); err != nil { return err } diff --git a/neko.go b/neko.go index 62ef3fe0..96853d25 100644 --- a/neko.go +++ b/neko.go @@ -137,17 +137,16 @@ func (neko *Neko) Start() { ) neko.remoteManager.Start() - neko.sessionManager = session.New( - neko.remoteManager, - ) - neko.webRTCManager = webrtc.New( - neko.sessionManager, neko.remoteManager, neko.Configs.WebRTC, ) neko.webRTCManager.Start() + neko.sessionManager = session.New( + neko.remoteManager, + ) + neko.webSocketHandler = websocket.New( neko.sessionManager, neko.remoteManager,