extended server documentation
This commit is contained in:
parent
518804051d
commit
6acde9e295
@ -35,3 +35,8 @@
|
|||||||
- 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
|
@ -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
|
@ -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()
|
|
Loading…
x
Reference in New Issue
Block a user