summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/rz_kernel.py43
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):
"""