Skip to content
Snippets Groups Projects
Commit 548475ec authored by ZettaScript's avatar ZettaScript
Browse files

Protocol

parent 35532d12
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ Le serveur permettra d'héberger plusieurs parties, afin d'épargner aussi aux a ...@@ -7,6 +7,7 @@ Le serveur permettra d'héberger plusieurs parties, afin d'épargner aussi aux a
N'hésitez pas à me contacter si vous avez des idées ou des critiques concernant le principe ou ma manière d'implémenter, de coder... Il faut adapter les règles du jeu au support informatique, ce qui nécessite de faire des choix (par exemple, j'ai décidé de remplacer le système de billets par une valeur numérique, mais je garde le roulement des valeurs). N'hésitez pas à me contacter si vous avez des idées ou des critiques concernant le principe ou ma manière d'implémenter, de coder... Il faut adapter les règles du jeu au support informatique, ce qui nécessite de faire des choix (par exemple, j'ai décidé de remplacer le système de billets par une valeur numérique, mais je garde le roulement des valeurs).
## Documentation ## Documentation
La classe `Game` représente une partie, et peut servir pour toute la durée d'un jeu, pour plusieurs systèmes monétaires. La classe `Game` représente une partie, et peut servir pour toute la durée d'un jeu, pour plusieurs systèmes monétaires.
La partie serveur, pour les interactions, ainsi que le système d'échanges ne sont pas encore implémentés. La classe de la monnaie dette non plus. La partie serveur, pour les interactions, ainsi que le système d'échanges ne sont pas encore implémentés. La classe de la monnaie dette non plus.
Le système de roulement des valeurs est aussi à faire. Le système de roulement des valeurs est aussi à faire.
...@@ -36,6 +37,15 @@ Exemple : ...@@ -36,6 +37,15 @@ Exemple :
Le fichier `testclient.py` est un client temporaire pour tester le serveur en développement. Le fichier `testclient.py` est un client temporaire pour tester le serveur en développement.
### Protocole
Le protocole utilisé entre clients et serveur est très simple.
VERSION/LANG/LENGTH\nDATA
**VERSION** étant la version du protocole utilisée pour le paquet, **LANG** le langage utilisé pour coder les données, **LENGTH** la taille des données, **DATA** les données.
Pour le moment, seul le JSON est utilisé.
## Sources ## Sources
http://www.trm.creationmonetaire.info/TheorieRelativedelaMonnaie.pdf http://www.trm.creationmonetaire.info/TheorieRelativedelaMonnaie.pdf
......
...@@ -217,21 +217,32 @@ Options:\n\ ...@@ -217,21 +217,32 @@ Options:\n\
print("Server started at "+str(server_address)) print("Server started at "+str(server_address))
while loop: while loop:
client, addr = sock.accept() client, addr = sock.accept()
client.settimeout(5)
paquet = b"" paquet = b""
lf = 0 p_len_tmp = ""
# TODO: taille des données indiquée en début de paquet plutôt que \n\n pour trouver EOT p_len = None
while lf < 2: p_data_index = None
i = 0
while True:
try:
raw = client.recv(RECBUF) raw = client.recv(RECBUF)
except socket.timeout:
break
if raw: if raw:
paquet += raw
if lf >= 0:
for c in raw: for c in raw:
if p_len == None:
if c == 10:# LF if c == 10:# LF
lf += 1 p_len = int(p_len_tmp, 16)
elif c != 13:# CR p_data_index = len(paquet)+1
lf = 0 elif (c >= 48 and c <= 57) or (c >= 97 and c <= 102) or (c >= 65 and c <= 70):# [0-9a-fA-F]
if lf > 1: p_len_tmp += chr(c)
h = 0 else:
p_len_tmp = ""
else:
i += 1
paquet += bytes([c])
if p_len != None and i >= p_len:
break
else: else:
break break
...@@ -251,16 +262,13 @@ Options:\n\ ...@@ -251,16 +262,13 @@ Options:\n\
continue continue
p_lng = paquet[seps[0]+1:seps[1]]# data language p_lng = paquet[seps[0]+1:seps[1]]# data language
p_mod = chr(paquet[seps[1]+1])# mode
p_data_expected = p_mod in "pPQ"# if data expected
p_resp = p_mod in "IPQS"# if response expected by client
resp_raw = b""# raw response resp_raw = b""# raw response
resp = None# response resp = None# response
resp_lng = ""# response language resp_lng = ""# response language
if p_data_expected: if p_len > 0:
p_raw = paquet[seps[2]+1:] p_raw = paquet[p_data_index:]
if p_lng == b"json": if p_lng == b"json":
try: try:
......
...@@ -57,7 +57,8 @@ while True: ...@@ -57,7 +57,8 @@ while True:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(server_address) sock.connect(server_address)
msg = PROTOCOL_VERSION+b"/"+PROTOCOL_LANG+b"/p\n"+json.dumps(data).encode()+b"\n\n" raw = json.dumps(data).encode()
msg = PROTOCOL_VERSION+b"/"+PROTOCOL_LANG+b"/"+hex(len(raw))[2:].encode()+b"\n"+raw
sock.sendall(msg) sock.sendall(msg)
resp = sock.recv(BUFFER) resp = sock.recv(BUFFER)
print(resp) print(resp)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment