add notes and scaffolding for publish/subscribe logic
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmPn0LIACgkQO3+8IhRO Y5i2BRAAifI9m+/CSF5VBgObttTeXwMtkIXezVgDwcwpPM/kksOvrOzXV5UP6y4Q rKUMqYNIEGwjEBZpLU9B907uMeSLRxNMj8h4wtl5zy1ZiFlK2uIbyWzMkGL/WOEc ydvJhzyZoRRrA2BVhACo3tNnVskh16JOpUzhTMDpx/XnsITS7QOU0ZNarEgtJEEx Pg4jjLLCNSo0oBxluFIyRYgzYkAj8iHk86RDvvV+cy9r3cpSbbkicxyanqapxA/9 kASNpNmM8rLuQpjTwvR3isfGGHKgodm+9VqpiWvYnufFGvgioZRZyJLLHumZ16JX m4mR1bmuFUGSIsmnan0ZK4TgoZVI/O84bzdMrNijcetWRFdSSvpOoD8YkAtmY40B McZL68OlijsoX/Tmtb5yDaS/oNEz9cpHPkig+eoOS3ddoWrzB3U8dmd2Goe0yB+Q R9V39320oaRLy4JDnpEvliNxNxiRWTqT/DsE7Sl63KOMnJQRD4y69kGngo3XKFEO O14FYaKF9Qs94N93BX9JF7zBNAmSGjCtfptjcVkKlDS3G5eldyUAUZqce0rwvBjy XExFrOVZtnyPXBjg7acfLKKsYhOOvpEeU38aMEc6nGVpQRC2lFHzs6ggIhJlfm12 GlWKsFHlaiAKZVvSCYFsWNtIBBg5VSFnaqi1j6d2JPtATB1C75c= =95k0 -----END PGP SIGNATURE-----
3 files changed,
45 insertions(+),
20 deletions(-)
M
gametable/server.go
→
gametable/server.go
@@ -86,18 +86,11 @@ c.Close(websocket.StatusPolicyViolation, "connection too slow to keep up with messages")
}, } - 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 @@ self.subscribersLock.Lock()
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) {
M
models/models.go
→
models/models.go
@@ -36,6 +36,7 @@ AuxMessage string `json:"auxMessage"`
} type TableMessage struct { + Key TableKey `json:"key"` Roll DiceRoll `json:"roll"` Token Token `json:"token"` MapImg string `json:"mapImg"`
M
notes.txt
→
notes.txt
@@ -27,4 +27,20 @@ delete token
} - Get /storage/ { static storage tree - }+ } + + +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 + } + }