extended server documentation

This commit is contained in:
steev 2024-01-05 02:01:28 +01:00
parent 518804051d
commit 6acde9e295
4 changed files with 18 additions and 78 deletions

View File

@ -34,4 +34,9 @@
- what turn state is currently active - what turn state is currently active
- draw state - draw state
- place state - place state
- is the player trying to do actions not allowed in the given state - is the player trying to do actions not allowed in the given state
# drawing cards:
- ensure the player only can have 7 cards
- if limit exceeds the player payes lifepoints and drops a card
- ensure the drawn card for sure still can be in the players deck

View File

@ -5,25 +5,27 @@ class TCPEventHandler:
def __init__(self, socket:socket): def __init__(self, socket:socket):
self.tcp_socket = socket self.tcp_socket = socket
def handleEvents(self, event): def handleEvents(self, message):
pass if message["event"] == "login":
# todo: handle login response here
pass
class UDPEventHandler: class UDPEventHandler:
def __init__(self, socket:socket): def __init__(self, socket:socket):
self.udp_socket = socket self.udp_socket = socket
def handleEvents(self, event): def handleEvents(self, message):
if event["event"] == "PlaceCard": if message["event"] == "PlaceCard":
pass pass
elif event["event"] == "MoveCard": elif message["event"] == "MoveCard":
pass pass
elif event["event"] == "RemoveCard": elif message["event"] == "RemoveCard":
pass pass
elif event["event"] == "AttackCard": elif message["event"] == "AttackCard":
pass pass
elif event["event"] == "AttackPlayer": elif message["event"] == "AttackPlayer":
pass pass
elif event["event"] == "ActivateEffectCard": elif message["event"] == "ActivateEffectCard":
pass pass
elif event["event"] == "ActivateMonsterCard": elif message["event"] == "ActivateMonsterCard":
pass pass

View File

@ -1,67 +0,0 @@
import selectors
import socket
import json
import types
sel = selectors.DefaultSelector()
clients = {} # Dictonary, um Clients zu speichern
def accept_wrapper(sock):
conn, addr = sock.accept()
print(f"Verbunden mit {addr}")
conn.setblocking(False)
data = types.SimpleNamespace(addr=addr, inb=b"", outb=b"")
events = selectors.EVENT_READ | selectors.EVENT_WRITE
sel.register(conn, events, data=data)
def service_connection(key, mask):
sock = key.fileobj
data = key.data
if mask & selectors.EVENT_READ:
recv_data = sock.recv(1024)
if recv_data:
data.outb += recv_data
try:
received_json = json.loads(recv_data.decode())
# Hier könnte man weitere Verarbeitungsschritte für die empfangenen Daten durchführen
except json.JSONDecodeError:
pass
else:
print("Verbindung geschlossen mit", data.addr)
sel.unregister(sock)
sock.close()
del clients[data.addr]
if mask & selectors.EVENT_WRITE:
if data.outb:
sent = sock.send(data.outb)
data.outb = data.outb[sent:]
def start_server():
host = '127.0.0.1'
port_tcp = 65432
port_udp = 65433
server_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_tcp.bind((host, port_tcp))
server_tcp.listen()
server_tcp.setblocking(False)
sel.register(server_tcp, selectors.EVENT_READ, data=None)
server_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_udp.bind((host, port_udp))
server_udp.setblocking(False)
sel.register(server_udp, selectors.EVENT_READ, data=None)
while True:
events = sel.select(timeout=None)
for key, mask in events:
if key.data is None:
accept_wrapper(key.fileobj)
else:
service_connection(key, mask)
if __name__ == "__main__":
start_server()