На import socket
import threading
# Максимальное количество игроков в комнате
MAX_PLAYERS = 10
# Словарь для хранения комнат
rooms = {
1: [],
2: []
}
# Функция для выбора комнаты
def get_available_room():
for room_id, players in rooms.items():
if len(players) < MAX_PLAYERS:
return room_id
return None
# Функция для обработки клиента
def handle_client(conn, addr):
print(f"Подключен: {addr}"
# Определяем доступную комнату
room_id = get_available_room()
if room_id is not None:
rooms[room_id].append(conn)
conn.send(f"Вы подключены к комнате {room_id}".encode())
else:
conn.send("Нет доступных комнат. Пожалуйста, подождите.".encode())
conn.close()
return
try:
while True:
# Обработка сообщений от клиента (пример)
message = conn.recv(1024).decode()
if not message:
break
print(f"Сообщение от {addr}: {message}"
# Отправка сообщения всем игрокам в комнате
for player in rooms[room_id]:
if player != conn: # Не отправляем сообщение обратно отправителю
player.send(f"Игрок {addr} говорит: {message}".encode())
finally:
print(f"Отключен: {addr}"
rooms[room_id].remove(conn)
conn.close()
# Основной серверный код
def start_server():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', 5000))
server_socket.listen()
print("Сервер запущен и ожидает подключения..."
while True:
conn, addr = server_socket.accept()
threading.Thread(target=handle_client, args=(conn, addr)).start()
if __name__ == "__main__":
start_server()