diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-04-09 01:24:32 +0300 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-04-09 02:03:45 +0300 |
| commit | d32bd9d94d710c708484dc8918070fa906e891cb (patch) | |
| tree | 21d01f53ee0159912951dc994cebe190e264b2da /src | |
| parent | 5a686ee16a539bf8a8f72751f18a604477d5da5e (diff) | |
rz_kernel: rzdoc_reader_assoc_map, reader subscription management
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/rz_kernel.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py index 801f82b0..53749595 100644 --- a/src/server/rz_kernel.py +++ b/src/server/rz_kernel.py @@ -154,7 +154,50 @@ class RZ_Kernel(object): op = QT_RZDOC_Meta_NS_Filter(rzdoc)(op) self.db_ctl.exec_op(op) + def rzdoc__reader_subscribe(self, + remote_socket_addr=None, + rzdoc_name=None, + socket=None): + rzdoc = self.cache_lookup__rzdoc(rzdoc_name) + + r_assoc = RZDoc_Reader_Association() + r_assoc.remote_socket_addr = remote_socket_addr + r_assoc.rzdoc = rzdoc + r_assoc.socket = socket + + self.rzdoc_reader_assoc_map[rzdoc].append(r_assoc) + log.debug("rz_kernel: reader subscribed: assoc: %s" % (r_assoc)) + + def rzdoc__reader_unsubscribe__r_assoc(self, r_assoc): + return self.rzdoc__reader_unsubscribe(r_assoc.remote_socket_addr, + r_assoc.rzdoc_name, + r_assoc.socket) + + def rzdoc__reader_unsubscribe(self, + remote_socket_addr=None, + rzdoc_name=None, + socket=None): + + rzdoc = self.cache_lookup__rzdoc(rzdoc_name) + + rm_target = None + r_assoc_set = self.rzdoc_reader_assoc_map[rzdoc] + for r_assoc in r_assoc_set: + if r_assoc.socket == socket: + rm_target = r_assoc + + if None == rm_target: # target possibly removed after becoming stale + log.debug("rz_kernel: rzdoc__reader_unsubscribe: assoc not found: remote-address: " % (remote_socket_addr)) + return + + r_assoc_set.remove(rm_target) # FIXME: make thread safe + log.debug("rz_kernel: reader unsubscribed: %s" % (rm_target)) + + def rzdoc__reader_set_from_rzdoc(self, rzdoc): + rzdoc_r_set = self.rzdoc_reader_assoc_map[rzdoc] + ret_list = list(rzdoc_r_set) + return ret_list def rzdoc__clone(self, rzdoc, ctx=None): """ |
