54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
import zmq
|
|
import json
|
|
import time
|
|
from multiprocessing import Process, Queue
|
|
from world.Fishtank import Fishtank
|
|
from util.Util import logout
|
|
|
|
class Server(object):
|
|
def __init__(self, recv_port):
|
|
self.recv_port = recv_port
|
|
self.recv_queue = Queue()
|
|
self.recv_proc = Process(
|
|
target=self.socket_listener,
|
|
args=(self.recv_port, self.recv_queue))
|
|
|
|
def socket_listener(self, port, recv_queue):
|
|
logout("Socket thread starting", "Server.socket_listener")
|
|
context = zmq.Context()
|
|
socket = context.socket(zmq.REP)
|
|
socket.bind("tcp://*:{}".format(port))
|
|
|
|
while True:
|
|
message = socket.recv()
|
|
response = b"Undefined response"
|
|
try:
|
|
serial = json.loads(message)
|
|
if "class" in serial:
|
|
logout("Received: {}".format(serial["class"]), "Server.socket_listener")
|
|
recv_queue.put(serial, False)
|
|
response = b"Received"
|
|
except:
|
|
response = b"Error"
|
|
socket.send(response)
|
|
|
|
def run(self, argv):
|
|
# Launch the recv process
|
|
self.recv_proc.start()
|
|
logout("Socket thread launched", "Server")
|
|
time.sleep(0.2)
|
|
|
|
# Build the world
|
|
fishtank = Fishtank(self.recv_queue)
|
|
|
|
for i in range(len(argv)):
|
|
if argv[i] == "-ball":
|
|
from entity.dummy.DebugBall import DebugBall
|
|
fishtank.add_entity(DebugBall())
|
|
if argv[i] == "-tube":
|
|
tube_port = int(argv[i+1])
|
|
from world.NetworkGate import NetworkGate
|
|
network_gate = NetworkGate("localhost", tube_port)
|
|
from entity.Tube import Tube
|
|
fishtank.add_entity(Tube(network_gate))
|
|
fishtank.run() |