mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
WS added session events.
This commit is contained in:
parent
1f5c0a3547
commit
f361d0c681
@ -13,9 +13,13 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
MEMBER_CREATED = "member/created"
|
||||
MEMBER_DELETED = "member/deleted"
|
||||
MEMBER_CONNECTED = "member/connected"
|
||||
MEMBER_UPDATED = "member/updated" // TODO: New.
|
||||
MEMBER_DISCONNECTED = "member/disconnected"
|
||||
MEMBER_RECEIVING_STARTED = "member/receiving/started"
|
||||
MEMBER_RECEIVING_STOPPED = "member/receiving/stopped"
|
||||
MEMBER_PROFILE_UPDATED = "member/profile/updated"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -54,11 +54,23 @@ type MemberID struct {
|
||||
ID string `json:"id"`
|
||||
}
|
||||
|
||||
type MemberProfile struct {
|
||||
Event string `json:"event,omitempty"`
|
||||
Name string `json:"name"`
|
||||
IsAdmin bool `json:"is_admin"`
|
||||
CanLogin bool `json:"can_login"`
|
||||
CanConnect bool `json:"can_connect"`
|
||||
CanWatch bool `json:"can_watch"`
|
||||
CanHost bool `json:"can_host"`
|
||||
CanAccessClipboard bool `json:"can_access_clipboard"`
|
||||
}
|
||||
|
||||
type MemberData struct {
|
||||
Event string `json:"event,omitempty"`
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
IsAdmin bool `json:"is_admin"`
|
||||
Profile MemberProfile `json:"profile"`
|
||||
IsConnected bool `json:"is_connected"`
|
||||
IsReceiving bool `json:"is_receiving"`
|
||||
}
|
||||
|
||||
/////////////////////////////
|
||||
|
@ -6,6 +6,38 @@ import (
|
||||
"demodesk/neko/internal/types/message"
|
||||
)
|
||||
|
||||
func (h *MessageHandlerCtx) SessionCreated(session types.Session) error {
|
||||
// TODO: Join structs?
|
||||
h.sessions.Broadcast(
|
||||
message.MemberData{
|
||||
Event: event.MEMBER_CREATED,
|
||||
ID: session.ID(),
|
||||
Profile: message.MemberProfile{
|
||||
Name: session.Name(),
|
||||
IsAdmin: session.IsAdmin(),
|
||||
CanLogin: session.CanLogin(),
|
||||
CanConnect: session.CanConnect(),
|
||||
CanWatch: session.CanWatch(),
|
||||
CanHost: session.CanHost(),
|
||||
CanAccessClipboard: session.CanAccessClipboard(),
|
||||
},
|
||||
IsConnected: session.IsConnected(),
|
||||
IsReceiving: session.IsReceiving(),
|
||||
}, nil)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) SessionDeleted(session types.Session) error {
|
||||
h.sessions.Broadcast(
|
||||
message.MemberID{
|
||||
Event: event.MEMBER_DELETED,
|
||||
ID: session.ID(),
|
||||
}, nil);
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) SessionConnected(session types.Session) error {
|
||||
// start streaming, when first member connects
|
||||
if !h.capture.Streaming() {
|
||||
@ -22,14 +54,11 @@ func (h *MessageHandlerCtx) SessionConnected(session types.Session) error {
|
||||
}
|
||||
}
|
||||
|
||||
// let everyone know there is a new session
|
||||
h.sessions.Broadcast(
|
||||
message.MemberData{
|
||||
message.MemberID{
|
||||
Event: event.MEMBER_CONNECTED,
|
||||
ID: session.ID(),
|
||||
Name: session.Name(),
|
||||
IsAdmin: session.IsAdmin(),
|
||||
}, nil)
|
||||
}, nil);
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -52,7 +81,6 @@ func (h *MessageHandlerCtx) SessionDisconnected(session types.Session) error {
|
||||
}, nil)
|
||||
}
|
||||
|
||||
// let everyone know session disconnected
|
||||
h.sessions.Broadcast(
|
||||
message.MemberID{
|
||||
Event: event.MEMBER_DISCONNECTED,
|
||||
@ -61,3 +89,40 @@ func (h *MessageHandlerCtx) SessionDisconnected(session types.Session) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) SessionReceivingStarted(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?
|
||||
h.sessions.Broadcast(
|
||||
message.MemberProfile{
|
||||
Event: event.MEMBER_PROFILE_UPDATED,
|
||||
Name: session.Name(),
|
||||
IsAdmin: session.IsAdmin(),
|
||||
CanLogin: session.CanLogin(),
|
||||
CanConnect: session.CanConnect(),
|
||||
CanWatch: session.CanWatch(),
|
||||
CanHost: session.CanHost(),
|
||||
CanAccessClipboard: session.CanAccessClipboard(),
|
||||
}, nil)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -25,10 +25,20 @@ func (h *MessageHandlerCtx) systemInit(session types.Session) error {
|
||||
|
||||
members := map[string]message.MemberData{}
|
||||
for _, session := range h.sessions.Members() {
|
||||
// TODO: Join structs?
|
||||
members[session.ID()] = message.MemberData{
|
||||
ID: session.ID(),
|
||||
Profile: message.MemberProfile{
|
||||
Name: session.Name(),
|
||||
IsAdmin: session.IsAdmin(),
|
||||
CanLogin: session.CanLogin(),
|
||||
CanConnect: session.CanConnect(),
|
||||
CanWatch: session.CanWatch(),
|
||||
CanHost: session.CanHost(),
|
||||
CanAccessClipboard: session.CanAccessClipboard(),
|
||||
},
|
||||
IsConnected: session.IsConnected(),
|
||||
IsReceiving: session.IsReceiving(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,22 @@ type WebSocketManagerCtx struct {
|
||||
}
|
||||
|
||||
func (ws *WebSocketManagerCtx) Start() {
|
||||
ws.sessions.OnCreated(func(session types.Session) {
|
||||
if err := ws.handler.SessionCreated(session); err != nil {
|
||||
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session created with an error")
|
||||
} else {
|
||||
ws.logger.Debug().Str("id", session.ID()).Msg("session created")
|
||||
}
|
||||
})
|
||||
|
||||
ws.sessions.OnDeleted(func(session types.Session) {
|
||||
if err := ws.handler.SessionDeleted(session); err != nil {
|
||||
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session deleted with an error")
|
||||
} else {
|
||||
ws.logger.Debug().Str("id", session.ID()).Msg("session deleted")
|
||||
}
|
||||
})
|
||||
|
||||
ws.sessions.OnConnected(func(session types.Session) {
|
||||
if err := ws.handler.SessionConnected(session); err != nil {
|
||||
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session connected with an error")
|
||||
@ -65,6 +81,30 @@ func (ws *WebSocketManagerCtx) Start() {
|
||||
}
|
||||
})
|
||||
|
||||
ws.sessions.OnReceivingStarted(func(session types.Session) {
|
||||
if err := ws.handler.SessionReceivingStarted(session); err != nil {
|
||||
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session receiving started with an error")
|
||||
} else {
|
||||
ws.logger.Debug().Str("id", session.ID()).Msg("session receiving started")
|
||||
}
|
||||
})
|
||||
|
||||
ws.sessions.OnReceivingStopped(func(session types.Session) {
|
||||
if err := ws.handler.SessionReceivingStopped(session); err != nil {
|
||||
ws.logger.Warn().Str("id", session.ID()).Err(err).Msg("session receiving stopped with an error")
|
||||
} else {
|
||||
ws.logger.Debug().Str("id", session.ID()).Msg("session receiving stopped")
|
||||
}
|
||||
})
|
||||
|
||||
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")
|
||||
}
|
||||
})
|
||||
|
||||
go func() {
|
||||
ws.logger.Info().Msg("clipboard loop started")
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user