Make player container an ordered dictionary
This commit is contained in:
parent
5fbe00aefa
commit
2d294ddfd2
@ -13,7 +13,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
ws: new WebSocket(import.meta.env.VITE_GLEBBY_SERVER_URL),
|
ws: new WebSocket(import.meta.env.VITE_GLEBBY_SERVER_URL),
|
||||||
model: null
|
model: null as any
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
@ -24,7 +24,14 @@ export default {
|
|||||||
if (payload.type === 'init') {
|
if (payload.type === 'init') {
|
||||||
console.log('Received initial game state:')
|
console.log('Received initial game state:')
|
||||||
console.log(payload.state)
|
console.log(payload.state)
|
||||||
this.model = payload.state
|
const players = new Map()
|
||||||
|
for (const player of payload.state.players) {
|
||||||
|
players.set(player.id, player)
|
||||||
|
}
|
||||||
|
this.model = {
|
||||||
|
yourId: payload.state.yourId,
|
||||||
|
players
|
||||||
|
}
|
||||||
this.ws.removeEventListener('message', messageListener)
|
this.ws.removeEventListener('message', messageListener)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,11 +8,11 @@ interface Player {
|
|||||||
|
|
||||||
interface Model {
|
interface Model {
|
||||||
yourId: number,
|
yourId: number,
|
||||||
players: Player[]
|
players: Map<number, Player>
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPlayer(model: Model, id: number): Player | undefined {
|
function getPlayer(model: Model, id: number): Player | undefined {
|
||||||
return model.players.find(player => player.id === id)
|
return model.players.get(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -41,13 +41,13 @@ export default defineComponent({
|
|||||||
|
|
||||||
switch (payload.type) {
|
switch (payload.type) {
|
||||||
case 'join':
|
case 'join':
|
||||||
this.model.players.push({
|
this.model.players.set(message.from, {
|
||||||
id: message.from,
|
id: message.from,
|
||||||
name: ''
|
name: ''
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case 'leave':
|
case 'leave':
|
||||||
this.model.players = this.model.players.filter(player => player.id !== message.from)
|
this.model.players.delete(message.from)
|
||||||
break
|
break
|
||||||
case 'chat':
|
case 'chat':
|
||||||
this.chatMessages.push(payload.message)
|
this.chatMessages.push(payload.message)
|
||||||
@ -81,7 +81,7 @@ export default defineComponent({
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<pre>{{ JSON.stringify(model, null, 2) }}</pre>
|
<pre>{{ model }}</pre>
|
||||||
<h1>I am #{{ model.yourId }}</h1>
|
<h1>I am #{{ model.yourId }}</h1>
|
||||||
<form @submit.prevent="setName">
|
<form @submit.prevent="setName">
|
||||||
<input v-model="playerName" placeholder="enter your name...">
|
<input v-model="playerName" placeholder="enter your name...">
|
||||||
@ -93,7 +93,7 @@ export default defineComponent({
|
|||||||
</form>
|
</form>
|
||||||
<h2>players</h2>
|
<h2>players</h2>
|
||||||
<ul v-if="model">
|
<ul v-if="model">
|
||||||
<li v-for="player in model.players" :key="player.id">{{ player.name }}#{{ player.id }}</li>
|
<li v-for="[id, player] in model.players" :key="id">{{ player.name }}#{{ player.id }}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<h2>chat</h2>
|
<h2>chat</h2>
|
||||||
<ul v-if="model">
|
<ul v-if="model">
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
import simple_websocket
|
import simple_websocket
|
||||||
|
|
||||||
|
from collections import OrderedDict
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask_sock import Sock
|
from flask_sock import Sock
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
@ -14,7 +15,9 @@ class Client:
|
|||||||
class GlebbyState:
|
class GlebbyState:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.clients_lock = Lock()
|
self.clients_lock = Lock()
|
||||||
self.clients = dict()
|
# We want to preserve the order that clients arrived in,
|
||||||
|
# e.g. for whose turn it is
|
||||||
|
self.clients = OrderedDict()
|
||||||
|
|
||||||
self.next_client_id_lock = Lock()
|
self.next_client_id_lock = Lock()
|
||||||
self.next_client_id = 0
|
self.next_client_id = 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user