all repos — felt @ cd14def1f840b107289749046caf6ae2a42dbfc8

virtual tabletop for dungeons and dragons (and similar) using Go, MongoDB, and websockets

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-----
commit

cd14def1f840b107289749046caf6ae2a42dbfc8

parent

4e3ef2d27d1ac4129cc54af577923e7e508ae40a

3 files changed, 45 insertions(+), 20 deletions(-)

jump to
M gametable/server.gogametable/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.gomodels/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.txtnotes.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 + } + }