✨ Players can be kicked
This commit is contained in:
@@ -81,6 +81,10 @@ async def join_game(sid: str, data: dict):
|
|||||||
except TypeError:
|
except TypeError:
|
||||||
pass
|
pass
|
||||||
# --- END checking captcha ---
|
# --- END checking captcha ---
|
||||||
|
if await redis.get(f"game_session:{data.game_pin}:players:{data.username}") is not None:
|
||||||
|
await sio.emit("username_already_exists", room=sid)
|
||||||
|
return
|
||||||
|
|
||||||
session = {
|
session = {
|
||||||
"game_pin": data.game_pin,
|
"game_pin": data.game_pin,
|
||||||
"username": data.username,
|
"username": data.username,
|
||||||
@@ -97,6 +101,7 @@ async def join_game(sid: str, data: dict):
|
|||||||
)
|
)
|
||||||
redis_res = await redis.get(f"game_session:{data.game_pin}")
|
redis_res = await redis.get(f"game_session:{data.game_pin}")
|
||||||
redis_res = GameSession.parse_raw(redis_res)
|
redis_res = GameSession.parse_raw(redis_res)
|
||||||
|
await redis.set(f"game_session:{data.game_pin}:players:{data.username}", sid, ex=18000)
|
||||||
await redis.sadd(f"game_session:{data.game_pin}:players", GamePlayer(username=data.username, sid=sid).json())
|
await redis.sadd(f"game_session:{data.game_pin}:players", GamePlayer(username=data.username, sid=sid).json())
|
||||||
# await redis.set(
|
# await redis.set(
|
||||||
# f"game_session:{data.game_pin}",
|
# f"game_session:{data.game_pin}",
|
||||||
@@ -344,3 +349,27 @@ async def echo_time_sync(sid: str, data: str):
|
|||||||
delta = now - then
|
delta = now - then
|
||||||
async with sio.session(sid) as session:
|
async with sio.session(sid) as session:
|
||||||
session["ping"] = delta.microseconds / 1000
|
session["ping"] = delta.microseconds / 1000
|
||||||
|
|
||||||
|
|
||||||
|
class _KickPlayerInput(BaseModel):
|
||||||
|
username: str
|
||||||
|
|
||||||
|
|
||||||
|
@sio.event
|
||||||
|
async def kick_player(sid: str, data: dict):
|
||||||
|
try:
|
||||||
|
data = _KickPlayerInput(**data)
|
||||||
|
except ValidationError as e:
|
||||||
|
await sio.emit("error", room=sid)
|
||||||
|
print(e)
|
||||||
|
return
|
||||||
|
|
||||||
|
session: dict = await sio.get_session(sid)
|
||||||
|
if not session["admin"]:
|
||||||
|
return
|
||||||
|
|
||||||
|
player_sid = await redis.get(f"game_session:{session['game_pin']}:players:{data.username}")
|
||||||
|
|
||||||
|
print(player_sid, session["game_pin"])
|
||||||
|
sio.leave_room(player_sid, session["game_pin"])
|
||||||
|
await sio.emit("kick", room=player_sid)
|
||||||
|
|||||||
@@ -104,6 +104,18 @@
|
|||||||
(!('theme' in localStorage) &&
|
(!('theme' in localStorage) &&
|
||||||
window.matchMedia('(prefers-color-scheme: dark)').matches);
|
window.matchMedia('(prefers-color-scheme: dark)').matches);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const kick_player = (username: string) => {
|
||||||
|
socket.emit('kick_player', { username: username });
|
||||||
|
for (let i = 0; i < players.length; i++) {
|
||||||
|
console.log(players[i].username, username);
|
||||||
|
if (players[i].username === username) {
|
||||||
|
players.splice(i, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
players = players;
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:window on:beforeunload={confirmUnload} />
|
<svelte:window on:beforeunload={confirmUnload} />
|
||||||
@@ -147,7 +159,12 @@
|
|||||||
{#if players.length > 0}
|
{#if players.length > 0}
|
||||||
{#each players as player}
|
{#each players as player}
|
||||||
<li>
|
<li>
|
||||||
<span>{player.username}</span>
|
<span
|
||||||
|
class="hover:line-through"
|
||||||
|
on:click={() => {
|
||||||
|
kick_player(player.username);
|
||||||
|
}}>{player.username}</span
|
||||||
|
>
|
||||||
<!-- <button>{$t('words.kick')}</button>-->
|
<!-- <button>{$t('words.kick')}</button>-->
|
||||||
</li>
|
</li>
|
||||||
{/each}
|
{/each}
|
||||||
|
|||||||
@@ -47,16 +47,20 @@
|
|||||||
|
|
||||||
let question;
|
let question;
|
||||||
|
|
||||||
|
let preventReload = true;
|
||||||
|
|
||||||
// Functions
|
// Functions
|
||||||
function restart() {
|
function restart() {
|
||||||
unique = {};
|
unique = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const confirmUnload = () => {
|
const confirmUnload = () => {
|
||||||
event.preventDefault();
|
if (preventReload) {
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
event.preventDefault();
|
||||||
// @ts-ignore
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||||
event.returnValue = '';
|
// @ts-ignore
|
||||||
|
event.returnValue = '';
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.on('time_sync', (data) => {
|
socket.on('time_sync', (data) => {
|
||||||
@@ -96,6 +100,17 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on('username_already_exists', () => {
|
||||||
|
window.alert('Username already exists!');
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('kick', () => {
|
||||||
|
window.alert('You got kicked');
|
||||||
|
preventReload = false;
|
||||||
|
game_pin = '';
|
||||||
|
username = '';
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
socket.on('final_results', (data) => {
|
socket.on('final_results', (data) => {
|
||||||
final_results = data;
|
final_results = data;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user