Mise à jour effectuée, merci de nous signaler tout dysfonctionnement ! | Upgrade done, please let us know about any dysfunction!

Commit 35532d12 authored by ZettaScript's avatar ZettaScript
Browse files

Server response & client

parent 5414c884
......@@ -7,7 +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).
## 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.
Le système de roulement des valeurs est aussi à faire.
......@@ -34,6 +34,8 @@ Exemple :
print(game.players[0].wallet)# Les joueurs ont créé leur DU
print(server.moneySupply(game.players))# On peut voir la masse monétaire doubler de tour en tour
Le fichier `testclient.py` est un client temporaire pour tester le serveur en développement.
## Sources
http://www.trm.creationmonetaire.info/TheorieRelativedelaMonnaie.pdf
......
......@@ -39,7 +39,7 @@ CONSTS = {
# Default server constants
PATH_CONF = "server.ini" # config file relative path
RECBUF = 1024 # reception buffer length
PROTOCOL_VERSIONS = [b"geco0"]# supported protocol versions
PROTOCOL_VERSIONS = ["geco0"]# supported protocol versions
VERSION = "0.0.0"
HOST = socket.gethostname() # server host name
PORT = 8651 # server port
......@@ -164,7 +164,7 @@ def readConfig():
CONSTS[key] = value
"""
Partie serveur en dessous, pas encore fonctionnelle.
Partie serveur en dessous, pas encore complètement fonctionnelle.
"""
if __name__ == "__main__":
# Config
......@@ -219,7 +219,8 @@ Options:\n\
client, addr = sock.accept()
paquet = b""
lf = 0
while True:
# TODO: taille des données indiquée en début de paquet plutôt que \n\n pour trouver EOT
while lf < 2:
raw = client.recv(RECBUF)
if raw:
paquet += raw
......@@ -233,18 +234,19 @@ Options:\n\
h = 0
else:
break
client.close()
# Parse paquet
try:
seps = [paquet.index(b"/")]
p_ver = paquet[:seps[0]]# protocol version
if not p_ver in PROTOCOL_VERSIONS:
if not p_ver.decode() in PROTOCOL_VERSIONS:
client.close()
print("Error: unsupported protocol version")
continue
seps.append(paquet.index(b"/", seps[0]+1))
seps.append(paquet.index(b"\n", seps[1]+1))
except ValueError:
client.close()
print("Error: decoding header")
continue
......@@ -258,15 +260,19 @@ Options:\n\
resp_lng = ""# response language
if p_data_expected:
if p_lng == "json":
p_raw = paquet[seps[2]+1:]
if p_lng == b"json":
try:
p_data = json.loads(p_raw)
except json.JSONDecodeError:
client.close()
print("Error: decoding JSON")
continue
if "query" in p_data:
resp = []
p_resp = True
resp = {}
resp_lng = "json"
if "games" in p_data["query"]:
......@@ -279,11 +285,13 @@ Options:\n\
resp["server_info"] = {"version":VERSION, "protocol_versions":PROTOCOL_VERSIONS}
else:
print("Error: unknown language '"+p_lng)
client.close()
print("Error: unknown language '"+str(p_lng)+"'")
continue
if p_resp:
if resp_lng == "json":
resp_raw = json.dumps(resp).encode()
# TODO: send response 'resp_raw' to the client
client.sendall(resp_raw)
client.close()
import socket, time, json
from sys import argv
from utils import *
PROTOCOL_VERSION = b"geco0"
PROTOCOL_LANG = b"json"
BUFFER = 1024
if "--help" in argv:
print("\n\
PyĞeconomicus test client\n\
\n\
Options:\n\
-h <hostname> Server hostname (default: '"+HOST+"')\n\
-p <port> Server port (default: "+str(PORT)+")\n\
--help Show this message\n\
")
HOST = getargv(argv, "-h", "127.0.0.1")
try:
PORT = int(getargv(argv, "-p", "8651"))
except ValueError:
print("Error: port must be an integer")
exit(1)
server_address = (HOST, PORT)
print("Server: "+str(server_address))
print("Type 'help' for a commands list, 'quit' or CTRL+C to quit.")
while True:
try:
p = input(">")
except KeyboardInterrupt:
print()
exit()
if p == "quit":
break
elif p == "help":
print("""Commands:
quit quit
help show help
i query=server_info
g query=games""")
continue
data = {}
if "i" in p:
if not "query" in data:
data["query"] = []
data["query"].append("server_info")
if "g" in p:
if not "query" in data:
data["query"] = []
data["query"].append("games")
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(server_address)
msg = PROTOCOL_VERSION+b"/"+PROTOCOL_LANG+b"/p\n"+json.dumps(data).encode()+b"\n\n"
sock.sendall(msg)
resp = sock.recv(BUFFER)
print(resp)
sock.close()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment