lobby add works need to do ready up next

This commit is contained in:
2023-04-23 18:58:10 -07:00
parent 4ab107eee2
commit 41f9433de5
6 changed files with 321 additions and 184 deletions

View File

@@ -2,31 +2,59 @@ import socket
import time
import threading
from common import *
from constants import *
import json
class ServerVCKO:
def __init__(self):
self.host = socket.gethostname()
self.port = 8328
self.header_size = 1024
self.format = "utf-8"
self.disconnect_message = "!DISCONNECT"
self.server_socket = socket.socket()
self.server_socket.bind((self.host, self.port))
self.server_socket.bind((self.host, Constants.port))
self.game_list = []
self.lobby = []
def handle_client(self, conn, addr):
print(f"Connection from: {addr}")
connected = True
while connected:
msg_length = conn.recv(self.header_size).decode(self.format)
msg_length = conn.recv(Constants.header_size).decode(Constants.text_format)
if msg_length:
msg_length = int(msg_length)
msg = conn.recv(msg_length).decode(self.format)
if msg == self.disconnect_message:
connected = False
msg = conn.recv(msg_length).decode(Constants.text_format)
first_word = msg.split()[0]
match first_word:
case "connection_check":
connected = False
conn.send("received".encode(Constants.text_format))
case "lobby":
connected = False
full_command = msg.split()
if full_command[1] == "join" and len(full_command) > 2:
joining_player_name = ' '.join(full_command[2:])
joining_player_id = shortuuid.uuid()
joining_player = LobbyMember(joining_player_name, joining_player_id)
self.lobby.append(joining_player)
message = f"lobby joined {joining_player_id}"
conn.send(joining_player_id.encode(Constants.text_format))
elif full_command[1] == "get_status":
lobby_data = []
for lobby_member in self.lobby:
player_dict = {
"name": lobby_member.name,
"player_id": lobby_member.player_id,
"is_ready": lobby_member.is_ready
}
lobby_data.append(player_dict)
json_data = json.dumps(lobby_data)
print(json_data)
conn.send(json_data.encode(Constants.text_format))
else:
conn.send("invalid message".encode(Constants.text_format))
case _:
connected = False
conn.send("invalid message".encode(Constants.text_format))
print(f"[{addr}] {msg}")
conn.send("msg received".encode(self.format))
conn.close()
def start(self):
@@ -39,6 +67,13 @@ class ServerVCKO:
print(f"Active threads: {threading.active_count() - 1}")
class LobbyMember:
def __init__(self, player_name, player_id):
self.name = player_name
self.player_id = player_id
self.is_ready = False
if __name__ == '__main__':
print("server starting")
server = ServerVCKO()