diff --git a/gametable/server.go b/gametable/server.go index 1b7ec2b..7f2b9d5 100644 --- a/gametable/server.go +++ b/gametable/server.go @@ -86,18 +86,11 @@ func (self *GameTableServer) subscribe(r *http.Request, c *websocket.Conn) error }, } - tableName, tblNameErr := cookie.GetToken("tableName", r) - tablePasscode, tblPassErr := cookie.GetToken("tablePasscode", r) - - if tblNameErr != nil { - return tblNameErr - } else if tblPassErr != nil { - return tblPassErr - } - - tableKey := models.TableKey{ - Name: tableName, - Passcode: tablePasscode, + tableKey := models.TableKey{} + err := json.NewDecoder(r.Body).Decode(&tableKey) + if err != nil { + fmt.Println(err.Error()) + return } if !self.dbAdapter.CheckTable(tableKey) { @@ -148,23 +141,38 @@ func (self *GameTableServer) publish(msg []byte) { defer self.subscribersLock.Unlock() // decode message and store in DB + tableMsg := models.TableMessage{} + err := json.NewDecoder(msg).Decode(&tableMsg) + if err != nil { + fmt.Println(err.Error()) + return + } + + self.writeToDB(tableMsg) self.publishLimiter.Wait(context.Background()) - for s := range self.subscribers { - select { - case s.msgs <- msg: - default: - go s.closeSlow() + for s, k := range self.subscribers { + if k == tableMsg.tableKey { + select { + case s.msgs <- msg: + default: + go s.closeSlow() + } } } } -func (self *GameTableServer) getCurrentState(tableKey models.TableKey) []byte { +func (self *GameTableServer) getCurrentState(tableKey models.TableKey) ([]byte, error) { // get diceroll log, map, and token state + // build into a []byte message - return make([]byte, 1) + return make([]byte, 1), nil +} + +func (self *GameTableServer) writeToDB(tableMsg models.TableMessage) error { + return nil } func (self *GameTableServer) addSubscriber(s *Subscriber, k models.TableKey) { diff --git a/models/models.go b/models/models.go index 88ce74d..942cd06 100644 --- a/models/models.go +++ b/models/models.go @@ -36,6 +36,7 @@ type Table struct { } type TableMessage struct { + Key TableKey `json:"key"` Roll DiceRoll `json:"roll"` Token Token `json:"token"` MapImg string `json:"mapImg"` diff --git a/notes.txt b/notes.txt index 1bc7365..a680ff5 100644 --- a/notes.txt +++ b/notes.txt @@ -27,4 +27,20 @@ admin routes: } - Get /storage/ { static storage tree - } \ No newline at end of file + } + + +subscribe: + subscribe (tableKey) => { + subscriber[s] = tablekey; + return getCurrentState(tableKey) + } + +publish: + publish (updateData) => { + writeToDB(updateData) + for s, k := range subscribers + if k == updateData.tableKey { + s.msgs <- updateData + } + } \ No newline at end of file