mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
websocket peer add event.
This commit is contained in:
parent
4341257f14
commit
5b5e541cc0
@ -15,7 +15,7 @@ type WebSocketHandler func(Session, WebSocketMessage) bool
|
|||||||
type CheckOrigin func(r *http.Request) bool
|
type CheckOrigin func(r *http.Request) bool
|
||||||
|
|
||||||
type WebSocketPeer interface {
|
type WebSocketPeer interface {
|
||||||
Send(v interface{}) error
|
Send(event string, payload interface{})
|
||||||
Destroy()
|
Destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,13 +307,10 @@ func (manager *WebSocketManagerCtx) handle(connection *websocket.Conn, session t
|
|||||||
case raw := <-bytes:
|
case raw := <-bytes:
|
||||||
data := types.WebSocketMessage{}
|
data := types.WebSocketMessage{}
|
||||||
if err := json.Unmarshal(raw, &data); err != nil {
|
if err := json.Unmarshal(raw, &data); err != nil {
|
||||||
logger.Error().Err(err).Msg("message parsing has failed")
|
logger.Error().Err(err).Msg("message unmarshalling has failed")
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Switch to payload based messages.
|
|
||||||
data.Payload = raw
|
|
||||||
|
|
||||||
logger.Debug().
|
logger.Debug().
|
||||||
Str("address", connection.RemoteAddr().String()).
|
Str("address", connection.RemoteAddr().String()).
|
||||||
Str("event", data.Event).
|
Str("event", data.Event).
|
||||||
|
@ -19,25 +19,35 @@ type WebSocketPeerCtx struct {
|
|||||||
connection *websocket.Conn
|
connection *websocket.Conn
|
||||||
}
|
}
|
||||||
|
|
||||||
func (peer *WebSocketPeerCtx) Send(v interface{}) error {
|
func (peer *WebSocketPeerCtx) Send(event string, payload interface{}) {
|
||||||
peer.mu.Lock()
|
peer.mu.Lock()
|
||||||
defer peer.mu.Unlock()
|
defer peer.mu.Unlock()
|
||||||
|
|
||||||
if peer.connection == nil {
|
if peer.connection == nil {
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
raw, err := json.Marshal(v)
|
raw, err := json.Marshal(payload)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
peer.logger.Error().Err(err).Str("event", event).Msg("message marshalling has failed")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = peer.connection.WriteJSON(types.WebSocketMessage{
|
||||||
|
Event: event,
|
||||||
|
Payload: raw,
|
||||||
|
})
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
peer.logger.Error().Err(err).Str("event", event).Msg("send message error")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
peer.logger.Debug().
|
peer.logger.Debug().
|
||||||
Str("address", peer.connection.RemoteAddr().String()).
|
Str("address", peer.connection.RemoteAddr().String()).
|
||||||
Str("raw", string(raw)).
|
Str("event", event).
|
||||||
|
Str("payload", string(raw)).
|
||||||
Msg("sending message to client")
|
Msg("sending message to client")
|
||||||
|
|
||||||
return peer.connection.WriteMessage(websocket.TextMessage, raw)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (peer *WebSocketPeerCtx) Destroy() {
|
func (peer *WebSocketPeerCtx) Destroy() {
|
||||||
@ -48,13 +58,11 @@ func (peer *WebSocketPeerCtx) Destroy() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := peer.Send(
|
peer.Send(
|
||||||
|
event.SYSTEM_DISCONNECT,
|
||||||
message.SystemDisconnect{
|
message.SystemDisconnect{
|
||||||
Event: event.SYSTEM_DISCONNECT,
|
|
||||||
Message: "connection destroyed",
|
Message: "connection destroyed",
|
||||||
}); err != nil {
|
})
|
||||||
peer.logger.Warn().Err(err).Msg("failed to send disconnect event")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := peer.connection.Close(); err != nil {
|
if err := peer.connection.Close(); err != nil {
|
||||||
peer.logger.Warn().Err(err).Msg("peer connection destroyed with an error")
|
peer.logger.Warn().Err(err).Msg("peer connection destroyed with an error")
|
||||||
|
Loading…
Reference in New Issue
Block a user