mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
remove event from messages.
This commit is contained in:
@ -22,10 +22,11 @@ func (manager *WebSocketManagerCtx) fileChooserDialogEvents() {
|
||||
|
||||
activeSession = host
|
||||
|
||||
go manager.sessions.Broadcast(message.SessionID{
|
||||
Event: event.FILE_CHOOSER_DIALOG_OPENED,
|
||||
ID: host.ID(),
|
||||
}, nil)
|
||||
go manager.sessions.Broadcast(
|
||||
event.FILE_CHOOSER_DIALOG_OPENED,
|
||||
message.SessionID{
|
||||
ID: host.ID(),
|
||||
}, nil)
|
||||
})
|
||||
|
||||
// when dialog closes, everyone should be notified.
|
||||
@ -34,9 +35,9 @@ func (manager *WebSocketManagerCtx) fileChooserDialogEvents() {
|
||||
|
||||
activeSession = nil
|
||||
|
||||
go manager.sessions.Broadcast(message.SessionID{
|
||||
Event: event.FILE_CHOOSER_DIALOG_CLOSED,
|
||||
}, nil)
|
||||
go manager.sessions.Broadcast(
|
||||
event.FILE_CHOOSER_DIALOG_CLOSED,
|
||||
message.SessionID{}, nil)
|
||||
})
|
||||
|
||||
// when new user joins, and someone holds dialog, he shouldd be notified about it.
|
||||
@ -45,17 +46,13 @@ func (manager *WebSocketManagerCtx) fileChooserDialogEvents() {
|
||||
return
|
||||
}
|
||||
|
||||
logger := manager.logger.With().Str("session_id", session.ID()).Logger()
|
||||
logger.Debug().Msg("sending file chooser dialog status to a new session")
|
||||
manager.logger.Debug().Str("session_id", session.ID()).Msg("sending file chooser dialog status to a new session")
|
||||
|
||||
if err := session.Send(message.SessionID{
|
||||
Event: event.FILE_CHOOSER_DIALOG_OPENED,
|
||||
ID: activeSession.ID(),
|
||||
}); err != nil {
|
||||
logger.Warn().Err(err).
|
||||
Str("event", event.FILE_CHOOSER_DIALOG_OPENED).
|
||||
Msg("could not send event")
|
||||
}
|
||||
session.Send(
|
||||
event.FILE_CHOOSER_DIALOG_OPENED,
|
||||
message.SessionID{
|
||||
ID: activeSession.ID(),
|
||||
})
|
||||
})
|
||||
|
||||
// when user, that holds dialog, disconnects, it should be closed.
|
||||
|
@ -41,12 +41,14 @@ func (h *MessageHandlerCtx) controlRequest(session types.Session) error {
|
||||
if !h.sessions.ImplicitHosting() {
|
||||
// tell session if there is a host
|
||||
if host := h.sessions.GetHost(); host != nil {
|
||||
return session.Send(
|
||||
session.Send(
|
||||
event.CONTROL_HOST,
|
||||
message.ControlHost{
|
||||
Event: event.CONTROL_HOST,
|
||||
HasHost: true,
|
||||
HostID: host.ID(),
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -23,8 +23,8 @@ func (h *MessageHandlerCtx) screenSet(session types.Session, payload *message.Sc
|
||||
}
|
||||
|
||||
h.sessions.Broadcast(
|
||||
event.SCREEN_UPDATED,
|
||||
message.ScreenSize{
|
||||
Event: event.SCREEN_UPDATED,
|
||||
Width: payload.Width,
|
||||
Height: payload.Height,
|
||||
Rate: payload.Rate,
|
||||
|
@ -15,22 +15,26 @@ func (h *MessageHandlerCtx) sendUnicast(session types.Session, payload *message.
|
||||
return nil
|
||||
}
|
||||
|
||||
return receiver.Send(message.SendUnicast{
|
||||
Event: event.SEND_UNICAST,
|
||||
Sender: session.ID(),
|
||||
Receiver: receiver.ID(),
|
||||
Subject: payload.Subject,
|
||||
Body: payload.Body,
|
||||
})
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) sendBroadcast(session types.Session, payload *message.SendBroadcast) error {
|
||||
h.sessions.Broadcast(message.SendBroadcast{
|
||||
Event: event.SEND_BROADCAST,
|
||||
Sender: session.ID(),
|
||||
Subject: payload.Subject,
|
||||
Body: payload.Body,
|
||||
}, []string{session.ID()})
|
||||
receiver.Send(
|
||||
event.SEND_UNICAST,
|
||||
message.SendUnicast{
|
||||
Sender: session.ID(),
|
||||
Receiver: receiver.ID(),
|
||||
Subject: payload.Subject,
|
||||
Body: payload.Body,
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) sendBroadcast(session types.Session, payload *message.SendBroadcast) error {
|
||||
h.sessions.Broadcast(
|
||||
event.SEND_BROADCAST,
|
||||
message.SendBroadcast{
|
||||
Sender: session.ID(),
|
||||
Subject: payload.Subject,
|
||||
Body: payload.Body,
|
||||
}, []string{session.ID()})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -8,8 +8,8 @@ import (
|
||||
|
||||
func (h *MessageHandlerCtx) SessionCreated(session types.Session) error {
|
||||
h.sessions.Broadcast(
|
||||
event.SESSION_CREATED,
|
||||
message.SessionData{
|
||||
Event: event.SESSION_CREATED,
|
||||
ID: session.ID(),
|
||||
Profile: session.Profile(),
|
||||
State: session.State(),
|
||||
@ -20,9 +20,9 @@ func (h *MessageHandlerCtx) SessionCreated(session types.Session) error {
|
||||
|
||||
func (h *MessageHandlerCtx) SessionDeleted(session types.Session) error {
|
||||
h.sessions.Broadcast(
|
||||
event.SESSION_DELETED,
|
||||
message.SessionID{
|
||||
Event: event.SESSION_DELETED,
|
||||
ID: session.ID(),
|
||||
ID: session.ID(),
|
||||
}, nil)
|
||||
|
||||
return nil
|
||||
@ -53,26 +53,22 @@ func (h *MessageHandlerCtx) SessionDisconnected(session types.Session) error {
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) SessionProfileChanged(session types.Session) error {
|
||||
profile := session.Profile()
|
||||
|
||||
h.sessions.Broadcast(
|
||||
event.SESSION_PROFILE,
|
||||
message.MemberProfile{
|
||||
Event: event.SESSION_PROFILE,
|
||||
ID: session.ID(),
|
||||
MemberProfile: &profile,
|
||||
MemberProfile: session.Profile(),
|
||||
}, nil)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) SessionStateChanged(session types.Session) error {
|
||||
state := session.State()
|
||||
|
||||
h.sessions.Broadcast(
|
||||
event.SESSION_STATE,
|
||||
message.SessionState{
|
||||
Event: event.SESSION_STATE,
|
||||
ID: session.ID(),
|
||||
SessionState: &state,
|
||||
SessionState: session.State(),
|
||||
}, nil)
|
||||
|
||||
return nil
|
||||
|
@ -25,13 +25,15 @@ func (h *MessageHandlerCtx) signalRequest(session types.Session, payload *messag
|
||||
return err
|
||||
}
|
||||
|
||||
return session.Send(
|
||||
session.Send(
|
||||
event.SIGNAL_PROVIDE,
|
||||
message.SignalProvide{
|
||||
Event: event.SIGNAL_PROVIDE,
|
||||
SDP: offer.SDP,
|
||||
ICEServers: h.webrtc.ICEServers(),
|
||||
Video: payload.Video,
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) signalRestart(session types.Session) error {
|
||||
@ -48,11 +50,13 @@ func (h *MessageHandlerCtx) signalRestart(session types.Session) error {
|
||||
return err
|
||||
}
|
||||
|
||||
return session.Send(
|
||||
session.Send(
|
||||
event.SIGNAL_RESTART,
|
||||
message.SignalAnswer{
|
||||
Event: event.SIGNAL_RESTART,
|
||||
SDP: offer.SDP,
|
||||
SDP: offer.SDP,
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) signalAnswer(session types.Session, payload *message.SignalAnswer) error {
|
||||
@ -76,7 +80,7 @@ func (h *MessageHandlerCtx) signalCandidate(session types.Session, payload *mess
|
||||
return nil
|
||||
}
|
||||
|
||||
return peer.SignalCandidate(*payload.ICECandidateInit)
|
||||
return peer.SignalCandidate(payload.ICECandidateInit)
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) signalVideo(session types.Session, payload *message.SignalVideo) error {
|
||||
@ -93,9 +97,11 @@ func (h *MessageHandlerCtx) signalVideo(session types.Session, payload *message.
|
||||
return err
|
||||
}
|
||||
|
||||
return session.Send(
|
||||
session.Send(
|
||||
event.SIGNAL_VIDEO,
|
||||
message.SignalVideo{
|
||||
Event: event.SIGNAL_VIDEO,
|
||||
Video: payload.Video,
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -33,9 +33,9 @@ func (h *MessageHandlerCtx) systemInit(session types.Session) error {
|
||||
}
|
||||
}
|
||||
|
||||
return session.Send(
|
||||
session.Send(
|
||||
event.SYSTEM_INIT,
|
||||
message.SystemInit{
|
||||
Event: event.SYSTEM_INIT,
|
||||
SessionId: session.ID(),
|
||||
ControlHost: controlHost,
|
||||
ScreenSize: message.ScreenSize{
|
||||
@ -50,6 +50,8 @@ func (h *MessageHandlerCtx) systemInit(session types.Session) error {
|
||||
Videos: h.capture.VideoIDs(),
|
||||
},
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h *MessageHandlerCtx) systemAdmin(session types.Session) error {
|
||||
@ -65,13 +67,15 @@ func (h *MessageHandlerCtx) systemAdmin(session types.Session) error {
|
||||
}
|
||||
|
||||
broadcast := h.capture.Broadcast()
|
||||
return session.Send(
|
||||
session.Send(
|
||||
event.SYSTEM_ADMIN,
|
||||
message.SystemAdmin{
|
||||
Event: event.SYSTEM_ADMIN,
|
||||
ScreenSizesList: screenSizesList,
|
||||
BroadcastStatus: message.BroadcastStatus{
|
||||
IsActive: broadcast.Started(),
|
||||
URL: broadcast.Url(),
|
||||
},
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -105,20 +105,19 @@ func (manager *WebSocketManagerCtx) Start() {
|
||||
})
|
||||
|
||||
manager.sessions.OnHostChanged(func(session types.Session) {
|
||||
msg := message.ControlHost{
|
||||
Event: event.CONTROL_HOST,
|
||||
payload := message.ControlHost{
|
||||
HasHost: session != nil,
|
||||
}
|
||||
|
||||
if msg.HasHost {
|
||||
msg.HostID = session.ID()
|
||||
if payload.HasHost {
|
||||
payload.HostID = session.ID()
|
||||
}
|
||||
|
||||
manager.sessions.Broadcast(msg, nil)
|
||||
manager.sessions.Broadcast(event.CONTROL_HOST, payload, nil)
|
||||
|
||||
manager.logger.Debug().
|
||||
Bool("has_host", msg.HasHost).
|
||||
Str("host_id", msg.HostID).
|
||||
Bool("has_host", payload.HasHost).
|
||||
Str("host_id", payload.HostID).
|
||||
Msg("session host changed")
|
||||
})
|
||||
|
||||
@ -128,22 +127,20 @@ func (manager *WebSocketManagerCtx) Start() {
|
||||
return
|
||||
}
|
||||
|
||||
manager.logger.Debug().Msg("sync clipboard")
|
||||
|
||||
data, err := manager.desktop.ClipboardGetText()
|
||||
if err != nil {
|
||||
manager.logger.Warn().Err(err).Msg("could not get clipboard content")
|
||||
return
|
||||
}
|
||||
|
||||
if err := session.Send(message.ClipboardData{
|
||||
Event: event.CLIPBOARD_UPDATED,
|
||||
Text: data.Text,
|
||||
// TODO: Send HTML?
|
||||
}); err != nil {
|
||||
manager.logger.Warn().Err(err).Msg("could not sync clipboard")
|
||||
return
|
||||
}
|
||||
|
||||
manager.logger.Debug().Msg("session sync clipboard")
|
||||
session.Send(
|
||||
event.CLIPBOARD_UPDATED,
|
||||
message.ClipboardData{
|
||||
Text: data.Text,
|
||||
// TODO: Send HTML?
|
||||
})
|
||||
})
|
||||
|
||||
manager.fileChooserDialogEvents()
|
||||
@ -161,13 +158,10 @@ func (manager *WebSocketManagerCtx) AddHandler(handler types.WebSocketHandler) {
|
||||
}
|
||||
|
||||
func (manager *WebSocketManagerCtx) Upgrade(w http.ResponseWriter, r *http.Request, checkOrigin types.CheckOrigin) {
|
||||
// add request data to logger context
|
||||
logger := manager.logger.With().
|
||||
manager.logger.Debug().
|
||||
Str("address", r.RemoteAddr).
|
||||
Str("agent", r.UserAgent()).
|
||||
Logger()
|
||||
|
||||
logger.Debug().Msg("attempting to upgrade connection")
|
||||
Msg("attempting to upgrade connection")
|
||||
|
||||
upgrader := websocket.Upgrader{
|
||||
CheckOrigin: checkOrigin,
|
||||
@ -175,49 +169,60 @@ func (manager *WebSocketManagerCtx) Upgrade(w http.ResponseWriter, r *http.Reque
|
||||
|
||||
connection, err := upgrader.Upgrade(w, r, nil)
|
||||
if err != nil {
|
||||
logger.Error().Err(err).Msg("failed to upgrade connection")
|
||||
manager.logger.Error().Err(err).Msg("failed to upgrade connection")
|
||||
return
|
||||
}
|
||||
|
||||
session, err := manager.sessions.Authenticate(r)
|
||||
if err != nil {
|
||||
logger.Debug().Err(err).Msg("authentication failed")
|
||||
manager.logger.Warn().Err(err).Msg("authentication failed")
|
||||
|
||||
// TODO: Refactor, return error code.
|
||||
if err = connection.WriteJSON(
|
||||
message.SystemDisconnect{
|
||||
// TODO: Better handling...
|
||||
raw, err := json.Marshal(message.SystemDisconnect{
|
||||
Message: err.Error(),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
manager.logger.Error().Err(err).Msg("failed to create disconnect event")
|
||||
}
|
||||
|
||||
err = connection.WriteJSON(
|
||||
types.WebSocketMessage{
|
||||
Event: event.SYSTEM_DISCONNECT,
|
||||
Message: err.Error(),
|
||||
}); err != nil {
|
||||
logger.Error().Err(err).Msg("failed to send disconnect event")
|
||||
Payload: raw,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
manager.logger.Error().Err(err).Msg("failed to send disconnect event")
|
||||
}
|
||||
|
||||
if err := connection.Close(); err != nil {
|
||||
logger.Warn().Err(err).Msg("connection closed with an error")
|
||||
manager.logger.Warn().Err(err).Msg("connection closed with an error")
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// use session id with defeault logger context
|
||||
logger = manager.logger.With().Str("session_id", session.ID()).Logger()
|
||||
logger := manager.logger.With().Str("session_id", session.ID()).Logger()
|
||||
|
||||
// create new peer
|
||||
peer := &WebSocketPeerCtx{
|
||||
logger: logger,
|
||||
session: session,
|
||||
connection: connection,
|
||||
}
|
||||
|
||||
if !session.Profile().CanConnect {
|
||||
logger.Debug().Msg("connection disabled")
|
||||
logger.Warn().Msg("connection disabled")
|
||||
|
||||
// TODO: Refactor, return error code.
|
||||
if err = connection.WriteJSON(
|
||||
peer.Send(
|
||||
event.SYSTEM_DISCONNECT,
|
||||
message.SystemDisconnect{
|
||||
Event: event.SYSTEM_DISCONNECT,
|
||||
Message: "connection disabled",
|
||||
}); err != nil {
|
||||
logger.Error().Err(err).Msg("failed to send disconnect event")
|
||||
}
|
||||
|
||||
if err := connection.Close(); err != nil {
|
||||
logger.Warn().Err(err).Msg("connection closed with an error")
|
||||
}
|
||||
})
|
||||
|
||||
peer.Destroy()
|
||||
return
|
||||
}
|
||||
|
||||
@ -225,32 +230,17 @@ func (manager *WebSocketManagerCtx) Upgrade(w http.ResponseWriter, r *http.Reque
|
||||
logger.Warn().Msg("already connected")
|
||||
|
||||
if !manager.sessions.MercifulReconnect() {
|
||||
// TODO: Refactor, return error code.
|
||||
if err = connection.WriteJSON(
|
||||
peer.Send(
|
||||
event.SYSTEM_DISCONNECT,
|
||||
message.SystemDisconnect{
|
||||
Event: event.SYSTEM_DISCONNECT,
|
||||
Message: "already connected",
|
||||
}); err != nil {
|
||||
logger.Error().Err(err).Msg("failed to send disconnect event")
|
||||
}
|
||||
|
||||
if err := connection.Close(); err != nil {
|
||||
logger.Warn().Err(err).Msg("connection closed with an error")
|
||||
}
|
||||
})
|
||||
|
||||
peer.Destroy()
|
||||
return
|
||||
}
|
||||
|
||||
logger.Info().Msg("replacing peer connection")
|
||||
|
||||
// destroy previous peer connection
|
||||
session.GetWebSocketPeer().Destroy()
|
||||
}
|
||||
|
||||
peer := &WebSocketPeerCtx{
|
||||
logger: logger,
|
||||
session: session,
|
||||
connection: connection,
|
||||
}
|
||||
|
||||
session.SetWebSocketPeer(peer)
|
||||
|
Reference in New Issue
Block a user