diff --git a/core/tavern.go b/core/tavern.go index 49af6ac..d415722 100644 --- a/core/tavern.go +++ b/core/tavern.go @@ -267,26 +267,31 @@ 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 + var msg map[string][]any 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) + for cmd, args := range msg { + switch cmd { + case "EnterChannel": + sub.wsh.EnterRoom(sub.region, args[0].(string), sender.Accid) - case "LeaveChannel": - sub.wsh.LeaveRoom(sub.region, msg.Args[0], sender.Accid) + case "LeaveChannel": + sub.wsh.LeaveRoom(sub.region, args[0].(string), sender.Accid) + + case "UpdateGroupMemberDocument": + typename := args[0].(string) + gidobj, _ := primitive.ObjectIDFromHex(args[1].(string)) + doc := args[2].(map[string]any) + if group := sub.groups[typename]; group != nil { + group.UpdateMemberDocument(gidobj, sender.Accid, doc) + } + } } } }