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()
|