Esempio n. 1
0
 def websocket_handler(self, ws):
     pathlist = filter(lambda x: bool(x), ws.path.split("/"))
     
     session = pathlist[0]
     sm = self.sm_mapping.get(session) or self.init_session(session)
     if not session in self.clients: 
         self.clients[session] = [ws]
         eventlet.spawn(self.websocket_response, sm, session)
     else:
         self.clients[session].append(ws)
     sm.send("websocket.connect")
     while True:
         message = ws.wait()
         if message is None:
             break
         evt = Processor.fromxml(str(message), origintype="javascript")
         sm.interpreter.externalQueue.put(evt)
     sm.send("websocket.disconnect")
     self.clients[session].remove(ws)
Esempio n. 2
0
    def websocket_handler(self, ws):
        pathlist = filter(lambda x: bool(x), ws.path.split("/"))

        session = pathlist[0]
        sm = self.sm_mapping.get(session) or self.init_session(session)
        if not session in self.clients:
            self.clients[session] = [ws]
            eventlet.spawn(self.websocket_response, sm, session)
        else:
            self.clients[session].append(ws)
        sm.send("websocket.connect")
        while True:
            message = ws.wait()
            if message is None:
                break
            evt = Processor.fromxml(str(message), origintype="javascript")
            sm.interpreter.externalQueue.put(evt)
        sm.send("websocket.disconnect")
        self.clients[session].remove(ws)
Esempio n. 3
0
def type_scxml(session, data, sm, environ):
    event = Processor.fromxml(data)
    event.type = "HTTP"
    return event
Esempio n. 4
0
def type_scxml(session, data, sm, environ, raw=None):
    event = Processor.fromxml(data)
    event.type = "HTTP"

    return event
Esempio n. 5
0
                              toQueue=toQueue)
            elif target == "#_internal":
                self.interpreter.raiseFunction(event, data, sendid=sendid)
                
            elif target.startswith("#_scxml_"): #sessionid
                sessionid = target.split("#_scxml_")[-1]
                try:
#                    toQueue = self.dm["_x"]["sessions"][sessionid].interpreter.externalQueue
                    toQueue = self.dm.sessions[sessionid].interpreter.externalQueue
                except KeyError:
                    raise SendCommunicationError("The session '%s' is inaccessible." % sessionid)
                sender = partial(defaultSend, event, data, toQueue=toQueue)
                
            elif target == "#_websocket":
                self.logger.debug("sending to _websocket")
                eventXML = Processor.toxml(eventstr, target, data, "", sendNode.get("id", ""), language="json")
                sender = partial(self.dm.websocket.put, eventXML)
            elif target.startswith("#_") and not target == "#_response": # invokeid
                try:
                    sessionid = self.dm.sessionid + "." + target[2:]
                    sm = self.dm.sessions[sessionid]
                except KeyError:
                    e = SendCommunicationError("Line %s: No valid invoke target at '%s'." % (sendNode.sourceline, sessionid))
                sender = partial(sm.interpreter.send, event, data, sendid=sendid)
                
            elif target.startswith("http://"): # target is a remote scxml processor
                origin = "unreachable"
                if self.dm["_ioprocessors"]["scxml"]["location"].startswith("http://"):
                    origin = self.dm["_ioprocessors"]["scxml"]["location"]
                
                eventXML = Processor.toxml(eventstr, target, data, origin, sendNode.get("id", ""))
Esempio n. 6
0
             self.parentId].interpreter.externalQueue
     except KeyError:
         raise SendCommunicationError("There is no parent session.")
     sender = partial(defaultSend,
                      self.interpreter.invokeId,
                      toQueue=toQueue)
 elif target == "#_internal":
     sender = partial(self.interpreter.raiseFunction,
                      event,
                      data,
                      sendid=sendid)
 elif target == "#_websocket":
     self.logger.debug("sending to _websocket")
     eventXML = Processor.toxml(eventstr,
                                target,
                                data,
                                "",
                                sendNode.get("id", ""),
                                language=self.datamodel)
     sender = partial(self.dm.websocket.put, eventXML)
 elif target.startswith(
         "#_") and not target == "#_response":  # invokeid
     try:
         sessionid = self.dm.sessionid + "." + target[2:]
         sm = self.dm.sessions[sessionid]
     except KeyError:
         e = SendCommunicationError(
             "Line %s: No valid invoke target at '%s'." %
             (sendNode.sourceline, sessionid))
     sender = partial(sm.interpreter.send,
                      event,
                      data,