Changeset 722

Show
Ignore:
Timestamp:
07/21/08 01:06:44 (4 months ago)
Author:
sylvain
Message:

Added node item retrieval component

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • oss/headstock/headstock/protocol/extension/pubsub.py

    r677 r722  
    1313           'ItemPublicationDispatcher', 'ItemDeletionDispatcher', 
    1414           'MessageEventDispatcher', 'NodePurgeDispatcher', 
    15            'PubSubDispatcher'
     15           'PubSubDispatcher', 'ItemRetrievalDispatcher'
    1616 
    1717class SubscriptionDispatcher(component): 
     
    305305        yield 1 
    306306 
    307 class ItemPublicationDispatcher(component): 
     307class ItemRetrievalDispatcher(component): 
    308308     
    309309    Inboxes = {"inbox"              : "bridge.Element instance", 
    310310               "control"            : "Shutdown the client stream", 
    311                "forward"            : "headstock.api.contact.Message instance to be sent back to the client. Transforms the instance to a bridge.Element instance and puts it into the 'outbox'", 
     311               "forward"            : "", 
    312312               } 
    313313     
     
    323323     
    324324    def __init__(self): 
    325        super(ItemPublicationDispatcher, self).__init__()  
     325       super(ItemRetrievalDispatcher, self).__init__()  
    326326 
    327327    def main(self): 
     
    338338            if self.dataReady("forward"): 
    339339                s = self.recv("forward") 
    340                 self.send(Node.to_publication_element(s), "outbox") 
     340                self.send(Node.to_request_item(s), "outbox") 
    341341 
    342342            if self.dataReady("inbox"): 
     
    350350 
    351351                if key in self.outboxes: 
    352                     self.send(Node.from_publication_element(e), key) 
     352                    self.send(Node.from_request_item(e), key) 
    353353                    handled = True 
    354354 
     
    363363        yield 1 
    364364 
    365 class ItemDeletionDispatcher(component): 
     365class ItemPublicationDispatcher(component): 
    366366     
    367367    Inboxes = {"inbox"              : "bridge.Element instance", 
     
    381381     
    382382    def __init__(self): 
     383       super(ItemPublicationDispatcher, self).__init__()  
     384 
     385    def main(self): 
     386        yield 1 
     387 
     388        while 1: 
     389            if self.dataReady("control"): 
     390                mes = self.recv("control") 
     391                 
     392                if isinstance(mes, shutdownMicroprocess) or isinstance(mes, producerFinished): 
     393                    self.send(producerFinished(), "signal") 
     394                    break 
     395 
     396            if self.dataReady("forward"): 
     397                s = self.recv("forward") 
     398                self.send(Node.to_publication_element(s), "outbox") 
     399 
     400            if self.dataReady("inbox"): 
     401                handled = False 
     402                a = self.recv("inbox") 
     403                e = a.xml_parent.xml_parent 
     404                self.send(('INCOMING', e), "log") 
     405                 
     406                msg_type = e.get_attribute_value(u'type') or 'get' 
     407                key = 'xmpp.%s' % unicode(msg_type) 
     408 
     409                if key in self.outboxes: 
     410                    self.send(Node.from_publication_element(e), key) 
     411                    handled = True 
     412 
     413                if not handled: 
     414                    self.send(e, "unknown") 
     415                     
     416            if not self.anyReady(): 
     417                self.pause() 
     418   
     419            yield 1 
     420 
     421        yield 1 
     422 
     423class ItemDeletionDispatcher(component): 
     424     
     425    Inboxes = {"inbox"              : "bridge.Element instance", 
     426               "control"            : "Shutdown the client stream", 
     427               "forward"            : "headstock.api.contact.Message instance to be sent back to the client. Transforms the instance to a bridge.Element instance and puts it into the 'outbox'", 
     428               } 
     429     
     430    Outboxes = {"outbox"       : "bridge.Element instance", 
     431                "signal"       : "Shutdown signal", 
     432                "log"          : "log", 
     433                "unknown"      : "Unknown element that could not be dispatched properly", 
     434                "xmpp.get"     : "Activity requests", 
     435                "xmpp.set"     : "Activity responses", 
     436                "xmpp.result"  : "Activity responses", 
     437                "xmpp.error"   : "Activity response error", 
     438                } 
     439     
     440    def __init__(self): 
    383441       super(ItemDeletionDispatcher, self).__init__()  
    384442 
     
    464522    Inboxes = {"inbox"               : "bridge.Element instance", 
    465523               "control"             : "Shutdown the client stream", 
     524               "retrieve.inbox"        : "", 
     525               "retrieve.forward"      : "", 
    466526               "create.inbox"        : "", 
    467527               "create.forward"      : "", 
     
    479539               "retract.forward"     : "", 
    480540               "message.inbox"       : "", 
     541               "in.retrieve.error"        : "Retrieve items response error", 
     542               "in.retrieve.get"          : "Retrieve items requests", 
     543               "in.retrieve.set"          : "Retrieve items responses", 
     544               "in.retrieve.result"       : "Retrieve items responses", 
    481545               "in.create.error"        : "Publish items response error", 
    482546               "in.create.get"          : "Publish items requests", 
     
    512576                "unknown"                 : "Unknown element that could not be dispatched properly", 
    513577                "log"                     : "log", 
     578                "retrieve.outbox"           : "", 
    514579                "create.outbox"           : "", 
    515580                "purge.outbox"            : "", 
     
    520585                "retract.outbox"          : "", 
    521586                "message.outbox"          : "", 
     587                "out.retrieve.error"       : "Retrieve items responses", 
     588                "out.retrieve.get"          : "Retrieve items requests", 
     589                "out.retrieve.set"          : "Retrieve items responses", 
     590                "out.retrieve.result"       : "Retrieve items responses", 
    522591                "out.create.get"          : "Publish items requests", 
    523592                "out.create.set"          : "Publish items responses", 
     
    639708        nodedeletedisp.activate() 
    640709 
     710        itemretrievedisp = ItemRetrievalDispatcher() 
     711        self.link((self, 'retrieve.inbox'), (itemretrievedisp, 'inbox'), passthrough=1) 
     712        self.link((self, 'retrieve.forward'), (itemretrievedisp, 'forward'), passthrough=1) 
     713        self.link((self, 'in.retrieve.get'), (itemretrievedisp, 'forward'), passthrough=1) 
     714        self.link((self, 'in.retrieve.set'), (itemretrievedisp, 'forward'), passthrough=1) 
     715        self.link((self, 'in.retrieve.result'), (itemretrievedisp, 'forward'), passthrough=1) 
     716        self.link((self, 'in.retrieve.error'), (itemretrievedisp, 'forward'), passthrough=1) 
     717        self.link((itemretrievedisp, 'outbox'), (self, 'retrieve.outbox'), passthrough=2) 
     718        self.link((itemretrievedisp, 'xmpp.get'), (self, 'out.retrieve.get'), passthrough=2) 
     719        self.link((itemretrievedisp, 'xmpp.set'), (self, 'out.retrieve.set'), passthrough=2) 
     720        self.link((itemretrievedisp, 'xmpp.result'), (self, 'out.retrieve.result'), passthrough=2) 
     721        self.link((itemretrievedisp, 'xmpp.error'), (self, 'out.retrieve.error'), passthrough=2) 
     722        self.link((itemretrievedisp, 'unknown'), (self, 'unknown'), passthrough=2) 
     723        self.link((itemretrievedisp, 'log'), (self, 'log'), passthrough=2) 
     724        self.addChildren(itemretrievedisp) 
     725        itemretrievedisp.activate() 
     726 
    641727        itempublishdisp = ItemPublicationDispatcher() 
    642728        self.link((self, 'publish.inbox'), (itempublishdisp, 'inbox'), passthrough=1)