separate disconnect from destroy.

This commit is contained in:
Miroslav Šedivý
2020-11-01 20:53:25 +01:00
parent 311ed987d8
commit e51541fe01
6 changed files with 41 additions and 38 deletions

View File

@ -57,10 +57,7 @@ func (manager *SessionManagerCtx) Destroy(id string) error {
session, ok := manager.members[id]
if ok {
delete(manager.members, id)
err := session.destroy()
manager.emmiter.Emit("destroy", id)
return err
return session.destroy()
}
return nil
@ -151,17 +148,6 @@ func (manager *SessionManagerCtx) OnHostCleared(listener func(session types.Sess
})
}
func (manager *SessionManagerCtx) OnDestroy(listener func(id string)) {
manager.emmiter.On("destroy", func(payload ...interface{}) {
// Stop streaming, if everyone left
if manager.capture.Streaming() && len(manager.members) == 0 {
manager.capture.StopStream()
}
listener(payload[0].(string))
})
}
func (manager *SessionManagerCtx) OnCreated(listener func(session types.Session)) {
manager.emmiter.On("created", func(payload ...interface{}) {
// Start streaming, when first joins
@ -178,3 +164,14 @@ func (manager *SessionManagerCtx) OnConnected(listener func(session types.Sessio
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() && len(manager.members) == 0 {
manager.capture.StopStream()
}
listener(payload[0].(*SessionCtx))
})
}

View File

@ -74,6 +74,15 @@ func (session *SessionCtx) SetConnected() {
session.manager.emmiter.Emit("connected", session)
}
func (session *SessionCtx) SetDisconnected() {
session.connected = false
session.manager.emmiter.Emit("disconnected", session)
session.socket = nil
// TODO: Refactor.
session.manager.Destroy(session.id)
}
func (session *SessionCtx) Disconnect(reason string) error {
if session.socket == nil {
return nil
@ -87,7 +96,8 @@ func (session *SessionCtx) Disconnect(reason string) error {
return err
}
return session.manager.Destroy(session.id)
session.SetDisconnected()
return nil
}
func (session *SessionCtx) Send(v interface{}) error {