mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
extract member state to custom struct.
This commit is contained in:
parent
5f3b9f72cf
commit
d7b5bd6842
@ -240,20 +240,14 @@ func (manager *SessionManagerCtx) OnDisconnected(listener func(session types.Ses
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *SessionManagerCtx) OnReceivingStarted(listener func(session types.Session)) {
|
func (manager *SessionManagerCtx) OnProfileChanged(listener func(session types.Session)) {
|
||||||
manager.emmiter.On("receiving_started", func(payload ...interface{}) {
|
manager.emmiter.On("profile_changed", func(payload ...interface{}) {
|
||||||
listener(payload[0].(*SessionCtx))
|
listener(payload[0].(*SessionCtx))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *SessionManagerCtx) OnReceivingStopped(listener func(session types.Session)) {
|
func (manager *SessionManagerCtx) OnStateChanged(listener func(session types.Session)) {
|
||||||
manager.emmiter.On("receiving_stopped", func(payload ...interface{}) {
|
manager.emmiter.On("state_changed", func(payload ...interface{}) {
|
||||||
listener(payload[0].(*SessionCtx))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (manager *SessionManagerCtx) OnProfileUpdated(listener func(session types.Session)) {
|
|
||||||
manager.emmiter.On("profile_updated", func(payload ...interface{}) {
|
|
||||||
listener(payload[0].(*SessionCtx))
|
listener(payload[0].(*SessionCtx))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ func (session *SessionCtx) CanAccessClipboard() bool {
|
|||||||
|
|
||||||
func (session *SessionCtx) SetProfile(profile types.MemberProfile) {
|
func (session *SessionCtx) SetProfile(profile types.MemberProfile) {
|
||||||
session.profile = profile
|
session.profile = profile
|
||||||
session.manager.emmiter.Emit("profile_updated", session)
|
session.manager.emmiter.Emit("profile_changed", session)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---
|
// ---
|
||||||
@ -140,12 +140,10 @@ func (session *SessionCtx) SetWebRTCPeer(webrtc_peer types.WebRTCPeer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (session *SessionCtx) SetWebRTCConnected(connected bool) {
|
func (session *SessionCtx) SetWebRTCConnected(connected bool) {
|
||||||
if connected {
|
session.webrtc_connected = connected
|
||||||
session.webrtc_connected = true
|
session.manager.emmiter.Emit("state_changed", session)
|
||||||
session.manager.emmiter.Emit("receiving_started", session)
|
|
||||||
} else {
|
if !connected {
|
||||||
session.webrtc_connected = false
|
|
||||||
session.manager.emmiter.Emit("receiving_stopped", session)
|
|
||||||
session.webrtc_peer = nil
|
session.webrtc_peer = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,13 +13,12 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MEMBER_CREATED = "member/created"
|
MEMBER_CREATED = "member/created"
|
||||||
MEMBER_DELETED = "member/deleted"
|
MEMBER_DELETED = "member/deleted"
|
||||||
MEMBER_CONNECTED = "member/connected"
|
MEMBER_CONNECTED = "member/connected"
|
||||||
MEMBER_DISCONNECTED = "member/disconnected"
|
MEMBER_DISCONNECTED = "member/disconnected"
|
||||||
MEMBER_RECEIVING_STARTED = "member/receiving/started"
|
MEMBER_PROFILE = "member/profile"
|
||||||
MEMBER_RECEIVING_STOPPED = "member/receiving/stopped"
|
MEMBER_STATE = "member/state"
|
||||||
MEMBER_PROFILE_UPDATED = "member/profile/updated"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -66,12 +66,18 @@ type MemberProfile struct {
|
|||||||
CanAccessClipboard bool `json:"can_access_clipboard"`
|
CanAccessClipboard bool `json:"can_access_clipboard"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MemberState struct {
|
||||||
|
Event string `json:"event,omitempty"`
|
||||||
|
ID string `json:"id,omitempty"`
|
||||||
|
IsConnected bool `json:"is_connected"`
|
||||||
|
IsReceiving bool `json:"is_receiving"`
|
||||||
|
}
|
||||||
|
|
||||||
type MemberData struct {
|
type MemberData struct {
|
||||||
Event string `json:"event,omitempty"`
|
Event string `json:"event,omitempty"`
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Profile MemberProfile `json:"profile"`
|
Profile MemberProfile `json:"profile"`
|
||||||
IsConnected bool `json:"is_connected"`
|
State MemberState `json:"state"`
|
||||||
IsReceiving bool `json:"is_receiving"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
|
@ -62,9 +62,8 @@ type SessionManager interface {
|
|||||||
OnDeleted(listener func(session Session))
|
OnDeleted(listener func(session Session))
|
||||||
OnConnected(listener func(session Session))
|
OnConnected(listener func(session Session))
|
||||||
OnDisconnected(listener func(session Session))
|
OnDisconnected(listener func(session Session))
|
||||||
OnReceivingStarted(listener func(session Session))
|
OnProfileChanged(listener func(session Session))
|
||||||
OnReceivingStopped(listener func(session Session))
|
OnStateChanged(listener func(session Session))
|
||||||
OnProfileUpdated(listener func(session Session))
|
|
||||||
|
|
||||||
ImplicitHosting() bool
|
ImplicitHosting() bool
|
||||||
|
|
||||||
|
@ -154,8 +154,10 @@ func (manager *WebRTCManagerCtx) CreatePeer(session types.Session) (string, bool
|
|||||||
connection.OnConnectionStateChange(func(state webrtc.PeerConnectionState) {
|
connection.OnConnectionStateChange(func(state webrtc.PeerConnectionState) {
|
||||||
switch state {
|
switch state {
|
||||||
case webrtc.PeerConnectionStateDisconnected:
|
case webrtc.PeerConnectionStateDisconnected:
|
||||||
|
manager.logger.Info().Str("id", session.ID()).Msg("peer disconnected successfully")
|
||||||
|
session.SetWebRTCConnected(false)
|
||||||
case webrtc.PeerConnectionStateFailed:
|
case webrtc.PeerConnectionStateFailed:
|
||||||
manager.logger.Info().Str("id", session.ID()).Msg("peer disconnected")
|
manager.logger.Warn().Str("id", session.ID()).Msg("peer disconnected with error")
|
||||||
session.SetWebRTCConnected(false)
|
session.SetWebRTCConnected(false)
|
||||||
case webrtc.PeerConnectionStateConnected:
|
case webrtc.PeerConnectionStateConnected:
|
||||||
manager.logger.Info().Str("id", session.ID()).Msg("peer connected")
|
manager.logger.Info().Str("id", session.ID()).Msg("peer connected")
|
||||||
|
@ -10,9 +10,9 @@ func (h *MessageHandlerCtx) SessionCreated(session types.Session) error {
|
|||||||
// TODO: Join structs?
|
// TODO: Join structs?
|
||||||
h.sessions.Broadcast(
|
h.sessions.Broadcast(
|
||||||
message.MemberData{
|
message.MemberData{
|
||||||
Event: event.MEMBER_CREATED,
|
Event: event.MEMBER_CREATED,
|
||||||
ID: session.ID(),
|
ID: session.ID(),
|
||||||
Profile: message.MemberProfile{
|
Profile: message.MemberProfile{
|
||||||
Name: session.Name(),
|
Name: session.Name(),
|
||||||
IsAdmin: session.IsAdmin(),
|
IsAdmin: session.IsAdmin(),
|
||||||
CanLogin: session.CanLogin(),
|
CanLogin: session.CanLogin(),
|
||||||
@ -21,8 +21,10 @@ func (h *MessageHandlerCtx) SessionCreated(session types.Session) error {
|
|||||||
CanHost: session.CanHost(),
|
CanHost: session.CanHost(),
|
||||||
CanAccessClipboard: session.CanAccessClipboard(),
|
CanAccessClipboard: session.CanAccessClipboard(),
|
||||||
},
|
},
|
||||||
IsConnected: session.IsConnected(),
|
State: message.MemberState{
|
||||||
IsReceiving: session.IsReceiving(),
|
IsConnected: session.IsConnected(),
|
||||||
|
IsReceiving: session.IsReceiving(),
|
||||||
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -90,31 +92,11 @@ func (h *MessageHandlerCtx) SessionDisconnected(session types.Session) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *MessageHandlerCtx) SessionReceivingStarted(session types.Session) error {
|
func (h *MessageHandlerCtx) SessionProfileChanged(session types.Session) error {
|
||||||
h.sessions.Broadcast(
|
|
||||||
message.MemberID{
|
|
||||||
Event: event.MEMBER_RECEIVING_STARTED,
|
|
||||||
ID: session.ID(),
|
|
||||||
}, nil);
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *MessageHandlerCtx) SessionReceivingStopped(session types.Session) error {
|
|
||||||
h.sessions.Broadcast(
|
|
||||||
message.MemberID{
|
|
||||||
Event: event.MEMBER_RECEIVING_STOPPED,
|
|
||||||
ID: session.ID(),
|
|
||||||
}, nil);
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *MessageHandlerCtx) SessionProfileUpdated(session types.Session) error {
|
|
||||||
// TODO: Join structs?
|
// TODO: Join structs?
|
||||||
h.sessions.Broadcast(
|
h.sessions.Broadcast(
|
||||||
message.MemberProfile{
|
message.MemberProfile{
|
||||||
Event: event.MEMBER_PROFILE_UPDATED,
|
Event: event.MEMBER_PROFILE,
|
||||||
ID: session.ID(),
|
ID: session.ID(),
|
||||||
Name: session.Name(),
|
Name: session.Name(),
|
||||||
IsAdmin: session.IsAdmin(),
|
IsAdmin: session.IsAdmin(),
|
||||||
@ -127,3 +109,16 @@ func (h *MessageHandlerCtx) SessionProfileUpdated(session types.Session) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *MessageHandlerCtx) SessionStateChanged(session types.Session) error {
|
||||||
|
// TODO: Join structs?
|
||||||
|
h.sessions.Broadcast(
|
||||||
|
message.MemberState{
|
||||||
|
Event: event.MEMBER_STATE,
|
||||||
|
ID: session.ID(),
|
||||||
|
IsConnected: session.IsConnected(),
|
||||||
|
IsReceiving: session.IsReceiving(),
|
||||||
|
}, nil)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
@ -27,8 +27,8 @@ func (h *MessageHandlerCtx) systemInit(session types.Session) error {
|
|||||||
for _, session := range h.sessions.Members() {
|
for _, session := range h.sessions.Members() {
|
||||||
// TODO: Join structs?
|
// TODO: Join structs?
|
||||||
members[session.ID()] = message.MemberData{
|
members[session.ID()] = message.MemberData{
|
||||||
ID: session.ID(),
|
ID: session.ID(),
|
||||||
Profile: message.MemberProfile{
|
Profile: message.MemberProfile{
|
||||||
Name: session.Name(),
|
Name: session.Name(),
|
||||||
IsAdmin: session.IsAdmin(),
|
IsAdmin: session.IsAdmin(),
|
||||||
CanLogin: session.CanLogin(),
|
CanLogin: session.CanLogin(),
|
||||||
@ -37,8 +37,10 @@ func (h *MessageHandlerCtx) systemInit(session types.Session) error {
|
|||||||
CanHost: session.CanHost(),
|
CanHost: session.CanHost(),
|
||||||
CanAccessClipboard: session.CanAccessClipboard(),
|
CanAccessClipboard: session.CanAccessClipboard(),
|
||||||
},
|
},
|
||||||
IsConnected: session.IsConnected(),
|
State: message.MemberState{
|
||||||
IsReceiving: session.IsReceiving(),
|
IsConnected: session.IsConnected(),
|
||||||
|
IsReceiving: session.IsReceiving(),
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,27 +81,19 @@ func (ws *WebSocketManagerCtx) Start() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
ws.sessions.OnReceivingStarted(func(session types.Session) {
|
ws.sessions.OnProfileChanged(func(session types.Session) {
|
||||||
if err := ws.handler.SessionReceivingStarted(session); err != nil {
|
if err := ws.handler.SessionProfileChanged(session); err != nil {
|
||||||
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session receiving started with an error")
|
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session profile changed with an error")
|
||||||
} else {
|
} else {
|
||||||
ws.logger.Debug().Str("id", session.ID()).Msg("session receiving started")
|
ws.logger.Debug().Str("id", session.ID()).Msg("session profile changed")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
ws.sessions.OnReceivingStopped(func(session types.Session) {
|
ws.sessions.OnStateChanged(func(session types.Session) {
|
||||||
if err := ws.handler.SessionReceivingStopped(session); err != nil {
|
if err := ws.handler.SessionStateChanged(session); err != nil {
|
||||||
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session receiving stopped with an error")
|
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session state changed with an error")
|
||||||
} else {
|
} else {
|
||||||
ws.logger.Debug().Str("id", session.ID()).Msg("session receiving stopped")
|
ws.logger.Debug().Str("id", session.ID()).Msg("session state changed")
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
ws.sessions.OnProfileUpdated(func(session types.Session) {
|
|
||||||
if err := ws.handler.SessionProfileUpdated(session); err != nil {
|
|
||||||
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session profile updated with an error")
|
|
||||||
} else {
|
|
||||||
ws.logger.Debug().Str("id", session.ID()).Msg("session profile updated")
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user