diff --git a/core/tavern.go b/core/tavern.go index b5b3a5b..49af6ac 100644 --- a/core/tavern.go +++ b/core/tavern.go @@ -2,6 +2,7 @@ package core import ( "context" + "encoding/json" "errors" "io" "net" @@ -266,11 +267,28 @@ func (tv *Tavern) RegisterHandlers(ctx context.Context, serveMux *http.ServeMux, return nil } +type tavernCommandMessage struct { + Cmd string + Args []string +} + func (sub *subTavern) clientMessageReceived(sender *wshandler.Sender, messageType wshandler.WebSocketMessageType, body io.Reader) { if messageType == wshandler.Connected { sub.cm.add(sender.Accid, sender.Alias) } else if messageType == wshandler.Disconnected { sub.cm.remove(sender.Accid) + } else if messageType == wshandler.BinaryMessage { + var msg tavernCommandMessage + dec := json.NewDecoder(body) + if err := dec.Decode(&msg); err == nil { + switch msg.Cmd { + case "EnterChannel": + sub.wsh.EnterRoom(sub.region, msg.Args[0], sender.Accid) + + case "LeaveChannel": + sub.wsh.LeaveRoom(sub.region, msg.Args[0], sender.Accid) + } + } } }