From 81b3fbd6734882db8c2e9906bfd500e4790d92a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Wed, 2 Dec 2020 17:36:06 +0100 Subject: [PATCH] moved capture StopStream to websockets events. --- internal/session/manager.go | 14 +------------- internal/types/session.go | 1 + internal/websocket/handler/session.go | 10 ++++++++++ neko.go | 1 - 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/internal/session/manager.go b/internal/session/manager.go index 6b35e01e..d215ce9c 100644 --- a/internal/session/manager.go +++ b/internal/session/manager.go @@ -13,12 +13,11 @@ import ( "demodesk/neko/internal/utils" ) -func New(capture types.CaptureManager, config *config.Session) *SessionManagerCtx { +func New(config *config.Session) *SessionManagerCtx { manager := &SessionManagerCtx{ logger: log.With().Str("module", "session").Logger(), host: nil, hostMu: sync.Mutex{}, - capture: capture, config: config, members: make(map[string]*SessionCtx), membersMu: sync.Mutex{}, @@ -46,7 +45,6 @@ type SessionManagerCtx struct { logger zerolog.Logger host types.Session hostMu sync.Mutex - capture types.CaptureManager config *config.Session members map[string]*SessionCtx membersMu sync.Mutex @@ -218,22 +216,12 @@ func (manager *SessionManagerCtx) OnHostCleared(listener func(session types.Sess func (manager *SessionManagerCtx) OnConnected(listener func(session types.Session)) { manager.emmiter.On("connected", func(payload ...interface{}) { - // Start streaming, when first joins - if !manager.capture.Streaming() { - manager.capture.StartStream() - } - listener(payload[0].(*SessionCtx)) }) } func (manager *SessionManagerCtx) OnDisconnected(listener func(session types.Session)) { manager.emmiter.On("disconnected", func(payload ...interface{}) { - // Stop streaming, if everyone left - if manager.capture.Streaming() && !manager.HasConnectedMembers() { - manager.capture.StopStream() - } - listener(payload[0].(*SessionCtx)) }) } diff --git a/internal/types/session.go b/internal/types/session.go index fc9342d2..c3e3ed06 100644 --- a/internal/types/session.go +++ b/internal/types/session.go @@ -51,6 +51,7 @@ type SessionManager interface { GetHost() Session ClearHost() + HasConnectedMembers() bool Members() []Session Broadcast(v interface{}, exclude interface{}) AdminBroadcast(v interface{}, exclude interface{}) diff --git a/internal/websocket/handler/session.go b/internal/websocket/handler/session.go index 83ee1679..bcd5aec4 100644 --- a/internal/websocket/handler/session.go +++ b/internal/websocket/handler/session.go @@ -7,6 +7,11 @@ import ( ) func (h *MessageHandlerCtx) SessionConnected(session types.Session) error { + // start streaming, when first member connects + if !h.capture.Streaming() { + h.capture.StartStream() + } + if err := h.systemInit(session); err != nil { return err } @@ -30,6 +35,11 @@ func (h *MessageHandlerCtx) SessionConnected(session types.Session) error { } func (h *MessageHandlerCtx) SessionDisconnected(session types.Session) error { + // Stop streaming, if last member disonnects + if h.capture.Streaming() && !h.sessions.HasConnectedMembers() { + h.capture.StopStream() + } + // clear host if exists if session.IsHost() { h.desktop.ResetKeys() diff --git a/neko.go b/neko.go index 0cf4db37..66237282 100644 --- a/neko.go +++ b/neko.go @@ -148,7 +148,6 @@ func (neko *Neko) Start() { neko.webRTCManager.Start() neko.sessionManager = session.New( - neko.captureManager, neko.Configs.Session, )