From 03ef9ea8ecf6edd135969d89bb501bc9b861b22f Mon Sep 17 00:00:00 2001 From: Swann Date: Fri, 22 Feb 2019 14:56:49 +0100 Subject: [PATCH] feat(rcf): start to handle late join clients --- bench.blend | Bin 0 -> 670760 bytes net_components.py | 103 +++++++++++++++++++++++++++++++++++++++++----- net_operators.py | 63 +++++++++++++++++++++++++++- 3 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 bench.blend diff --git a/bench.blend b/bench.blend new file mode 100644 index 0000000000000000000000000000000000000000..f86cadb5e1e7b29e924197af7d2f34c2080eadd8 GIT binary patch literal 670760 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𝔑le{(={=)iWw^(NU<2i-HKAh2F43 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 literal 0 HcmV?d00001 diff --git a/net_components.py b/net_components.py index 047e501..562e86a 100644 --- a/net_components.py +++ b/net_components.py @@ -9,6 +9,41 @@ import struct logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) +class RCFTranslation(): + def get(self,data): + """ + local program > rcf + + """ + raise NotImplementedError + + def set(self,data): + """ + rcf > local program + """ + raise NotImplementedError + +class RCFMsgFactory(): + """ + Abstract basic data bridge + """ + def __init__(self): + pass + raise NotImplementedError + + def load(self, data): + """ + local program > rcf + + """ + raise NotImplementedError + + def unload(self,data): + """ + rcf > local program + """ + raise NotImplementedError + # TODO: Add message time and author stamp for reliabilty class RCFMessage(object): @@ -25,25 +60,30 @@ class RCFMessage(object): mtype = None # data mtype (string) body = None # data blob - def __init__(self, key=None, id=None, mtype=None, body=None): + def __init__(self, key=None, id=None, mtype=None, body=None, factory=None): self.key = key self.mtype = mtype self.body = body self.id = id - + self.factory = factory + def store(self, dikt): """Store me in a dict if I have anything to store""" # this seems weird to check, but it's what the C example does # this currently erasing old value if self.key is not None and self.body is not None: - dikt[self.key] = self + if self.key in dikt: + dikt[self.key] = self + def send(self, socket): """Send key-value message to socket; any empty frames are sent as such.""" key = '' if self.key is None else self.key.encode() mtype = '' if self.mtype is None else self.mtype.encode() body = '' if self.body is None else umsgpack.packb(self.body) - socket.send_multipart([key, self.id, mtype, body]) + factory = '' if self.factory is None else umsgpack.packb(self.factory) + + socket.send_multipart([key, self.id, mtype, body,factory]) @classmethod def recv(cls, socket): @@ -72,7 +112,10 @@ class RCFMessage(object): class Client(): - def __init__(self, context=zmq.Context(), id="default", recv_callback=None): + def __init__(self, context=zmq.Context(), id="default", recv_callback=None,is_admin=False): + self.is_admin = is_admin + + #0MQ vars self.context = context self.pull_sock = None self.req_sock = None @@ -116,7 +159,23 @@ class Client(): async def main(self): logger.info("{} client launched".format(id)) - # Prepare our context and publisher socket + # Late join + logger.info("{} send snapshot request".format(id)) + self.req_snapshot.send(b"SNAPSHOT_REQUEST") + while True: + try: + rcfmsg_snapshot = RCFMessage.recv(snapshot) + except: + return + + if rcfmsg_snapshot.key == "SNAPSHOT_END": + logger.info("snapshot complete") + break + else: + logger.info("received : {}".format(rcfmsg_snapshot.key)) + rcfmsg_snapshot.store(self.property_map) + + # Prepare our context and publisher socket while True: # TODO: find a better way socks = dict(self.poller.poll(1)) @@ -125,7 +184,6 @@ class Client(): rcfmsg = RCFMessage.recv(self.pull_sock) rcfmsg.store(self.property_map) - # rcfmsg.dump() for f in self.recv_callback: f(rcfmsg) @@ -137,6 +195,10 @@ class Client(): rcfmsg.send(self.push_sock) # self.push_sock.send_multipart() + def req_snapshot(self): + # Sync + pass + def stop(self): logger.debug("Stopping client") self.poller.unregister(self.pull_sock) @@ -155,10 +217,12 @@ class Server(): self.collector_sock = None self.poller = None + self.property_map = {} self.id = id self.bind_ports() # Main client loop registration self.task = asyncio.ensure_future(self.main()) + logger.info("{} client initialized".format(id)) @@ -192,12 +256,31 @@ class Server(): socks = dict(self.poller.poll(1)) if self.request_sock in socks: - msg = self.request_sock.recv_multipart(zmq.DONTWAIT) - # Update all clients - self.pub_sock.send_multipart(msg) + msg = self.request_sock.recv_multipart() + + identity = msg[0] + request = msg[1] + if request == b"SNAPSHOT_REQUEST": + pass + else: + logger.info("Bad snapshot request") + break + + for k,v in self.property_map.items(): + logger.info("Sending {} snapshot to {}".format(k,identity)) + self.request_sock.send(identity,zmq.SNDMORE) + v.send(self.request_sock) + + logger.info("done".format(k,identity)) + + msg_end_snapshot = RCFMessage(key="SNAPSHOT_END") + self.request_sock.send(identity,zmq.SNDMORE) + msg_end_snapshot.send(self.request_sock) + elif self.collector_sock in socks: msg = self.collector_sock.recv_multipart(zmq.DONTWAIT) # Update all clients + self.pub_sock.send_multipart(msg) else: await asyncio.sleep(0.016) diff --git a/net_operators.py b/net_operators.py index fb6a534..42de35c 100644 --- a/net_operators.py +++ b/net_operators.py @@ -21,6 +21,64 @@ VECTOR_TYPES = ( 'Vector' ) +class VectorTypeTranslation(net_components.RCFTranslation): + def set(self,data): + """ + local program > rcf + + """ + return [data.x,data.y,data.z] + + def get(self,data): + """ + rcf > local program + """ + return mathutils.Vector((data[0],data[1],data[2])) + + +def match_supported_types(value): + type_factory = None + + if isinstance(value,bool): + print("float") + elif isinstance(value,mathutils.Vector): + print("vector") + type_factory = VectorTypeTranslation() + elif isinstance(value,mathutils.Euler): + print("Euler") + elif type(value) in NATIVE_TYPES: + print("native") + else: + raise NotImplementedError + + return type_factory + +# class RNAFractory(net_components.RCFMsgFactory): +# def __init__(self,data): +# self.load = match_type(): + +# def load(self,data): +# logger.debug(' casting from bpy') +# value_type = type(data) +# rna_value = None + +# if value_type is mathutils.Vector or mathutils.Euler: +# rna_value = [data.x,data.y,data.z] +# elif value_type is bpy.props.collection: +# pass # TODO: Collection replication +# elif value_type in NATIVE_TYPES: +# rna_value = data + +# return rna_value + +# def unload(self,data): +# rcf_value = None + +# if value_type == 'Vector': +# value_casted = mathutils.Vector((data[0],data[1],data[2])) + +# return rcf_value + # TODO: Less ugly method def from_bpy(value): logger.debug(' casting from bpy') @@ -55,6 +113,8 @@ def resolve_bpy_path(path): """ Get bpy property value from path """ + + t = time.perf_counter() path = path.split('/') obj = None @@ -102,9 +162,8 @@ def patch_scene(msg): attr_name = msg.key.split('/')[2] value = to_bpy(msg) - + # print(msg.get) logger.debug("Updating scene:\n object: {} attribute: {} , value: {}".format(obj, attr_name, value)) - try: setattr(obj,attr_name,value) except: