roll dice and publish to socket
This commit is contained in:
parent
65c3071238
commit
2bf3c1af8b
5 changed files with 62 additions and 9 deletions
|
@ -166,7 +166,7 @@ func (self *GameTableServer) publish(msg []byte) {
|
||||||
self.publishLimiter.Wait(context.Background())
|
self.publishLimiter.Wait(context.Background())
|
||||||
|
|
||||||
for s, k := range self.subscribers {
|
for s, k := range self.subscribers {
|
||||||
if k == tableMsg.Key {
|
if k == *tableMsg.Key {
|
||||||
select {
|
select {
|
||||||
case s.msgs <- msg:
|
case s.msgs <- msg:
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -36,9 +36,9 @@ type Table struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type TableMessage struct {
|
type TableMessage struct {
|
||||||
Key TableKey `json:"key"`
|
Key *TableKey `json:"key"`
|
||||||
Roll DiceRoll `json:"roll"`
|
Roll *DiceRoll `json:"roll"`
|
||||||
Token Token `json:"token"`
|
Token *Token `json:"token"`
|
||||||
MapImg string `json:"mapImg"`
|
MapImg *string `json:"mapImg"`
|
||||||
AuxMsg string `json:"auxMsg"`
|
AuxMsg *string `json:"auxMsg"`
|
||||||
}
|
}
|
||||||
|
|
36
static/dice.js
Normal file
36
static/dice.js
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
function rollDice() {
|
||||||
|
const name = document.getElementById("name_entry");
|
||||||
|
const numDice = document.getElementById("num_dice");
|
||||||
|
const faces = document.getElementById("dice_faces");
|
||||||
|
const note = document.getElementById("dice_note");
|
||||||
|
|
||||||
|
if (conn == null || table == null) {
|
||||||
|
setErr("Looks like you haven't joined a table yet.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!name || name.value.length < 1) {
|
||||||
|
setErr("Who are you? What's your name? Super brother?");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (numDice && faces && note) {
|
||||||
|
console.log("here?")
|
||||||
|
const n = Number(numDice.value);
|
||||||
|
const d = Number(faces.value);
|
||||||
|
r = new Uint8Array(n);
|
||||||
|
crypto.getRandomValues(r);
|
||||||
|
const rolls = [];
|
||||||
|
for (const i of r) {
|
||||||
|
rolls.push(r%d + 1)
|
||||||
|
}
|
||||||
|
console.log(rolls);
|
||||||
|
publish({diceRoll: {
|
||||||
|
faces: d,
|
||||||
|
roll: rolls,
|
||||||
|
player: name.value,
|
||||||
|
note: note.value,
|
||||||
|
timestamp: new Date(),
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,7 +25,7 @@
|
||||||
<button type="submit" id="admin_login" onclick="doLogin()">login</button>
|
<button type="submit" id="admin_login" onclick="doLogin()">login</button>
|
||||||
</form>
|
</form>
|
||||||
<div id="dice_log"></div>
|
<div id="dice_log"></div>
|
||||||
<select name="num_dice">
|
<select id="num_dice">
|
||||||
<option>1</option>
|
<option>1</option>
|
||||||
<option>2</option>
|
<option>2</option>
|
||||||
<option>3</option>
|
<option>3</option>
|
||||||
|
@ -56,7 +56,7 @@
|
||||||
<option>12</option>
|
<option>12</option>
|
||||||
<option>20</option>
|
<option>20</option>
|
||||||
</select>
|
</select>
|
||||||
<input id="dice_note"><button id="dice_submit">Roll</button>
|
<input id="dice_note"><button id="dice_submit" onclick="rollDice()">Roll</button>
|
||||||
<div id="map"></div>
|
<div id="map"></div>
|
||||||
<div id="adminWrapper" style="display:none;">
|
<div id="adminWrapper" style="display:none;">
|
||||||
<div id="adminCtrl">
|
<div id="adminCtrl">
|
||||||
|
@ -73,5 +73,6 @@
|
||||||
</body>
|
</body>
|
||||||
<script src="./util.js" type="text/javascript"></script>
|
<script src="./util.js" type="text/javascript"></script>
|
||||||
<script src="./socket.js" type="text/javascript"></script>
|
<script src="./socket.js" type="text/javascript"></script>
|
||||||
|
<script src="./dice.js" type="text/javascript"></script>
|
||||||
<script src="./admin.js" type="text/javascript"></script>
|
<script src="./admin.js" type="text/javascript"></script>
|
||||||
</html>
|
</html>
|
|
@ -27,7 +27,23 @@ function dial() {
|
||||||
console.info("socket connected");
|
console.info("socket connected");
|
||||||
});
|
});
|
||||||
conn.addEventListener("message", e => {
|
conn.addEventListener("message", e => {
|
||||||
console.dir(e);
|
console.log(e.data);
|
||||||
|
if (table == null) {
|
||||||
|
table = JSON.parse(e.data);
|
||||||
|
} else {
|
||||||
|
// UPDATE THE TABLE!
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function publish(msg) {
|
||||||
|
msg.key = tableKey;
|
||||||
|
const res = await fetch('/publish', {
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify(msg)
|
||||||
|
});
|
||||||
|
if (!res.ok) {
|
||||||
|
setErr("Failed to publish message");
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue