feat: test progress

This commit is contained in:
Swann Martinez
2019-07-18 18:15:01 +02:00
parent 51093b1307
commit 672d215b40
3 changed files with 67 additions and 44 deletions

View File

@ -13,13 +13,14 @@ STATE_ACTIVE = 2
class Client(object):
def __init__(self,factory=None, config=None):
def __init__(self,factory=None, id='default'):
assert(factory)
self._rep_store = {}
self._net_client = ClientNetService(
store_reference=self._rep_store,
factory=factory)
factory=factory,
id=id)
self._factory = factory
def connect(self):
@ -58,7 +59,7 @@ class Client(object):
pass
class ClientNetService(threading.Thread):
def __init__(self,store_reference=None, factory=None):
def __init__(self,store_reference=None, factory=None,id="default"):
# Threading
threading.Thread.__init__(self)
@ -68,6 +69,7 @@ class ClientNetService(threading.Thread):
self._exit_event = threading.Event()
self._factory = factory
self._store_reference = store_reference
self._id = id
assert(self._factory)
@ -75,7 +77,7 @@ class ClientNetService(threading.Thread):
self.context = zmq.Context.instance()
self.snapshot = self.context.socket(zmq.DEALER)
self.snapshot.setsockopt(zmq.IDENTITY, b'SERVER')
self.snapshot.setsockopt(zmq.IDENTITY, self._id.encode())
self.snapshot.connect("tcp://127.0.0.1:5560")
self.subscriber = self.context.socket(zmq.SUB)
@ -90,7 +92,7 @@ class ClientNetService(threading.Thread):
def run(self):
logger.info("Client is online")
logger.info("{} online".format(self._id))
poller = zmq.Poller()
poller.register(self.snapshot, zmq.POLLIN)
poller.register(self.subscriber, zmq.POLLIN)
@ -103,6 +105,7 @@ class ClientNetService(threading.Thread):
ACTIVE : Do nothing
"""
if self.state == STATE_INITIAL:
logger.debug('{} : request snapshot'.format(self._id))
self.snapshot.send(b"SNAPSHOT_REQUEST")
self.state = STATE_SYNCING
@ -112,19 +115,22 @@ class ClientNetService(threading.Thread):
SYNCING : Ask for snapshots
ACTIVE : Do nothing
"""
items = dict(poller.poll(1))
items = dict(poller.poll(10))
if self.snapshot in items:
if self.state == STATE_SYNCING:
datablock = ReplicatedDatablock.pull(self.snapshot, self._factory)
if isinstance(datablock, RepCommand):
if datablock.buffer == 'SNAPSHOT_END':
self.state = STATE_ACTIVE
logger.debug('{} : snapshot done'.format(self._id))
# We receive updates from the server !
if self.subscriber in items:
if self.state == STATE_ACTIVE:
logger.debug("Receiving changes from server")
logger.debug("{} : Receiving changes from server".format(self._id))
datablock = ReplicatedDatablock.pull(self.subscriber, self._factory)
datablock.store(self._store_reference)
@ -216,7 +222,7 @@ class ServerNetService(threading.Thread):
while not self._exit_event.is_set():
# Non blocking poller
socks = dict(poller.poll())
socks = dict(poller.poll(10))
# Snapshot system for late join (Server - Client)
if self.snapshot in socks: