init
This commit is contained in:
108
back/create_room.py
Normal file
108
back/create_room.py
Normal file
@@ -0,0 +1,108 @@
|
||||
from random import randint
|
||||
|
||||
from .socket import Socket
|
||||
from .game import game_router
|
||||
|
||||
|
||||
async def create_room_router(server: Socket, socket: Socket):
|
||||
async def check_nickname(nickname: str) -> str | None:
|
||||
nickname = nickname.strip()
|
||||
if len(nickname) < 4:
|
||||
await socket.emit("room-error", "Никнейм должен быть больше 4 букв!")
|
||||
return
|
||||
|
||||
return nickname
|
||||
|
||||
async def check_width(width: str) -> int | None:
|
||||
width = width.strip()
|
||||
if not width.isnumeric():
|
||||
await socket.emit("room-error", "Ширина должна быть числом!")
|
||||
return
|
||||
|
||||
width_i = int(width)
|
||||
|
||||
if width_i < 5 or width_i > 25:
|
||||
await socket.emit("room-error", "Ширина может быть числом от 5 до 25!")
|
||||
return
|
||||
|
||||
return width_i
|
||||
|
||||
async def check_height(height: str) -> int | None:
|
||||
height = height.strip()
|
||||
if not height.isnumeric():
|
||||
await socket.emit("room-error", "Высота должна быть числом!")
|
||||
return
|
||||
|
||||
height_i = int(height)
|
||||
|
||||
if height_i < 5 or height_i > 15:
|
||||
await socket.emit("room-error", "Высота может быть числом от 5 до 15!")
|
||||
return
|
||||
|
||||
return height_i
|
||||
|
||||
async def check_bombs(bombs: str, width: int, height: int) -> int | None:
|
||||
bombs = bombs.strip()
|
||||
if not bombs.isnumeric():
|
||||
await socket.emit("room-error", "Кол-во бомб должно быть числом!")
|
||||
return
|
||||
|
||||
bombs_i = int(bombs)
|
||||
bombs_max = (width * height * 2) // 5
|
||||
|
||||
if bombs_i < 5 or bombs_i > bombs_max:
|
||||
await socket.emit(
|
||||
"room-error", f"Кол-во бомб может быть от 5 до {bombs_max}!"
|
||||
)
|
||||
return
|
||||
|
||||
return bombs_i
|
||||
|
||||
async def check_room(room_id: str) -> str | None:
|
||||
room_id = room_id.strip()
|
||||
|
||||
if not room_id.isnumeric() or len(room_id) != 6:
|
||||
await socket.emit("room-error", "Код должен быть из 6 цифр!")
|
||||
return
|
||||
|
||||
if not server.room_exists(room_id):
|
||||
await socket.emit("room-error", "Такой комнаты не существует!")
|
||||
return
|
||||
|
||||
return room_id
|
||||
|
||||
@socket.on("create-room")
|
||||
async def create_room(_nickname: str, _width: str, _height: str, _bombs: str):
|
||||
nickname = await check_nickname(_nickname)
|
||||
if nickname is None:
|
||||
return
|
||||
|
||||
width = await check_width(_width)
|
||||
if width is None:
|
||||
return
|
||||
|
||||
height = await check_height(_height)
|
||||
if height is None:
|
||||
return
|
||||
|
||||
bombs = await check_bombs(_bombs, width, height)
|
||||
if bombs is None:
|
||||
return
|
||||
|
||||
room_id = str(randint(100000, 999999))
|
||||
|
||||
room = await socket.join(room_id)
|
||||
await game_router(server, socket, room, nickname, width, height, bombs)
|
||||
|
||||
@socket.on("join-room")
|
||||
async def join_room(_nickname: str, _room_id: str):
|
||||
nickname = await check_nickname(_nickname)
|
||||
if nickname is None:
|
||||
return
|
||||
|
||||
room_id = await check_room(_room_id)
|
||||
if room_id is None:
|
||||
return
|
||||
|
||||
room = await socket.join(room_id)
|
||||
await game_router(server, socket, room, nickname)
|
||||
Reference in New Issue
Block a user