From 313cd55049e88890f3c7184eb1f11bcee47b5fcb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Sun, 15 Aug 2021 16:05:26 +0200 Subject: [PATCH] add system error. --- client/src/neko/events.ts | 1 + client/src/neko/index.ts | 13 +++++++++++-- client/src/neko/messages.ts | 8 +++++--- server/internal/session/session.go | 2 +- server/internal/types/event/events.go | 1 + server/internal/types/message/messages.go | 3 ++- server/internal/websocket/broadcast.go | 13 +++++++++++-- server/internal/websocket/websocket.go | 4 ++-- 8 files changed, 34 insertions(+), 11 deletions(-) diff --git a/client/src/neko/events.ts b/client/src/neko/events.ts index 39eac42..5b43d6b 100644 --- a/client/src/neko/events.ts +++ b/client/src/neko/events.ts @@ -11,6 +11,7 @@ export const EVENT = { // Websocket Events SYSTEM: { DISCONNECT: 'system/disconnect', + ERROR: 'system/error', }, SIGNAL: { ANSWER: 'signal/answer', diff --git a/client/src/neko/index.ts b/client/src/neko/index.ts index c99a4b1..0bdfc5a 100644 --- a/client/src/neko/index.ts +++ b/client/src/neko/index.ts @@ -6,7 +6,7 @@ import { EVENT } from './events' import { accessor } from '~/store' import { - DisconnectPayload, + SystemMessagePayload, SignalProvidePayload, MemberListPayload, MemberDisconnectPayload, @@ -130,7 +130,7 @@ export class NekoClient extends BaseClient implements EventEmitter { ///////////////////////////// // System Events ///////////////////////////// - protected [EVENT.SYSTEM.DISCONNECT]({ message }: DisconnectPayload) { + protected [EVENT.SYSTEM.DISCONNECT]({ message }: SystemMessagePayload) { if (message == 'kicked') { this.$accessor.logout() message = this.$vue.$t('connection.kicked') as string @@ -146,6 +146,15 @@ export class NekoClient extends BaseClient implements EventEmitter { }) } + protected [EVENT.SYSTEM.ERROR]({ title, message }: SystemMessagePayload) { + this.$vue.$swal({ + title, + text: message, + icon: 'error', + confirmButtonText: this.$vue.$t('connection.button_confirm') as string, + }) + } + ///////////////////////////// // Member Events ///////////////////////////// diff --git a/client/src/neko/messages.ts b/client/src/neko/messages.ts index eb6a04a..fb2e341 100644 --- a/client/src/neko/messages.ts +++ b/client/src/neko/messages.ts @@ -50,10 +50,12 @@ export interface WebSocketMessage { SYSTEM MESSAGES/PAYLOADS */ // system/disconnect -export interface DisconnectMessage extends WebSocketMessage, DisconnectPayload { - event: typeof EVENT.SYSTEM.DISCONNECT +// system/error +export interface SystemMessage extends WebSocketMessage, SystemMessagePayload { + event: typeof EVENT.SYSTEM.DISCONNECT | typeof EVENT.SYSTEM.ERROR } -export interface DisconnectPayload { +export interface SystemMessagePayload { + title: string message: string } diff --git a/server/internal/session/session.go b/server/internal/session/session.go index c4b6cb3..75b4a77 100644 --- a/server/internal/session/session.go +++ b/server/internal/session/session.go @@ -86,7 +86,7 @@ func (session *Session) Kick(reason string) error { if session.socket == nil { return nil } - if err := session.socket.Send(&message.Disconnect{ + if err := session.socket.Send(&message.SystemMessage{ Event: event.SYSTEM_DISCONNECT, Message: reason, }); err != nil { diff --git a/server/internal/types/event/events.go b/server/internal/types/event/events.go index 00c355e..4b2e187 100644 --- a/server/internal/types/event/events.go +++ b/server/internal/types/event/events.go @@ -2,6 +2,7 @@ package event const ( SYSTEM_DISCONNECT = "system/disconnect" + SYSTEM_ERROR = "system/error" ) const ( diff --git a/server/internal/types/message/messages.go b/server/internal/types/message/messages.go index d045340..cf0b289 100644 --- a/server/internal/types/message/messages.go +++ b/server/internal/types/message/messages.go @@ -10,8 +10,9 @@ type Message struct { Event string `json:"event"` } -type Disconnect struct { +type SystemMessage struct { Event string `json:"event"` + Title string `json:"title"` Message string `json:"message"` } diff --git a/server/internal/websocket/broadcast.go b/server/internal/websocket/broadcast.go index fc7259a..336cc90 100644 --- a/server/internal/websocket/broadcast.go +++ b/server/internal/websocket/broadcast.go @@ -12,8 +12,17 @@ func (h *MessageHandler) boradcastCreate(session types.Session, payload *message return nil } - if err := h.broadcast.Create(payload.URL); err != nil { - return err + pipelineErr := h.broadcast.Create(payload.URL) + if pipelineErr != nil { + if err := session.Send( + message.SystemMessage{ + Event: event.SYSTEM_ERROR, + Title: "Error while starting broadcast", + Message: pipelineErr.Error(), + }); err != nil { + h.logger.Warn().Err(err).Msgf("sending event %s has failed", event.SYSTEM_ERROR) + return err + } } if err := h.boradcastStatus(session); err != nil { diff --git a/server/internal/websocket/websocket.go b/server/internal/websocket/websocket.go index 2db2cfb..d006368 100644 --- a/server/internal/websocket/websocket.go +++ b/server/internal/websocket/websocket.go @@ -133,7 +133,7 @@ func (ws *WebSocketHandler) Upgrade(w http.ResponseWriter, r *http.Request) erro if err != nil { ws.logger.Warn().Err(err).Msg("authentication failed") - if err = connection.WriteJSON(message.Disconnect{ + if err = connection.WriteJSON(message.SystemMessage{ Event: event.SYSTEM_DISCONNECT, Message: "invalid_password", }); err != nil { @@ -160,7 +160,7 @@ func (ws *WebSocketHandler) Upgrade(w http.ResponseWriter, r *http.Request) erro } if !ok { - if err = connection.WriteJSON(message.Disconnect{ + if err = connection.WriteJSON(message.SystemMessage{ Event: event.SYSTEM_DISCONNECT, Message: reason, }); err != nil {