コード例 #1
0
def main():
    from solipsis.core.event import EventFactory
    from solipsis.core.peerevent import PeerEventFactory
    from solipsis.core.controlevent import ControlEventFactory
    
    from solipsis.util.parameter import Parameters
    from solipsis.core.node import Node
    
    configFileName = searchPath + '/conf/solipsis.conf'
    params = Parameters(configFileName)
    node = Node(params)

    EventFactory.init(node)
    f1 = PeerEventFactory()
    f2 = ControlEventFactory()
    EventFactory.register(PeerEventFactory.TYPE, f1)
    EventFactory.register(ControlEventFactory.TYPE, f2)

    f3 = EventFactory.getInstance(PeerEventFactory.TYPE)
    best = f3.createBEST()
    f4 = EventFactory.getInstance(ControlEventFactory.TYPE)
    dead = f4.createDEAD(54)

    print best
    print dead
    return 0
コード例 #2
0
ファイル: seed.py プロジェクト: BackupTheBerlios/solipsis-svn
    def TIMER(self, event):
        manager = self.node.getPeersManager()
        nbSeeds = len(self.portList)
        nbPeers = manager.getNumberOfPeers()
        # we have connected to all other seeds
        if nbPeers == nbSeeds -1 :
            self.logger.debug('Entering Idle state')
            ar = manager.computeAwarenessRadius()
            self.node.setAwarenessRadius(ar)
            self.node.setExpectedPeers(nbPeers)
            self.node.startPeriodicTasks()
            self.sendUpdate()
            self.node.setState(state.Idle())
        else:
            self.logger.debug('Not connected to all seeds: %d/%d', nbPeers,
                              nbSeeds -1)

            # relaunch timer
            self.startTimer()

            connectedPorts = []
            for peer in manager.enumeratePeers():
                connectedPorts.append(peer.getAddress().getPort())

            #self.logger.debug('ports: %s' , str(connectedPorts))

            for port in self.portList:
                if (port <> self.node.getAddress().getPort()) and \
                       ( port not in connectedPorts):
                    f = EventFactory.getInstance(PeerEvent.TYPE)
                    hello = f.createHELLO()
                    hello.setRecipientAddress(Address(self.node.host, port))
                    self.node.dispatch(hello)
コード例 #3
0
    def addService(self, srvId, srvDesc, srvConnectionString):
        """ add a new service to the node. """
        factory = EventFactory.getInstance(ControlEvent.TYPE)
        addSrv = factory.createADDSERVICE(srvId, srvDesc, srvConnectionString)
        self.incoming.put(addSrv)

        return self.ok
コード例 #4
0
    def disconnect(self):
        """ Disconnect node
        Return OK """
        factory = EventFactory.getInstance(ControlEvent.TYPE)
        controlEvent = factory.createDISCONNECT
        self.incoming.put(controlEvent)

        return self.ok
コード例 #5
0
 def getNodeInfo(self):
     """ Return all the caracteristics of the node
     [id, positionX, positionY, AR, CA, pseudo, orientation ]
     """
     factory = EventFactory.getInstance(ControlEvent.TYPE)
     controlEvent = factory.createGETNODEINFO()
     self.incoming.put(controlEvent)
     return self.ok
コード例 #6
0
 def delService(self, srvId):
     """ Remove a service
     srvId : id of the service to remove
     Return : OK """
     factory = EventFactory.getInstance(ControlEvent.TYPE)
     rmSrv = factory.createDELSERVICE(srvId)
     self.incoming.put(rmSrv)
     return self.ok
コード例 #7
0
 def getPeerInfo(self, id):
     """ Return all the caracteristics of a peer
     [id, positionX, positionY, AR, CA, pseudo, orientation ]
     id : id of the peer
     """
     factory = EventFactory.getInstance(ControlEvent.TYPE)
     controlEvent = factory.createGETPEERINFO(id)
     self.incoming.put(controlEvent)
     return self.ok
コード例 #8
0
 def jump(self, x, y, z):
     """ Reception of a jump order
     x,y,z : target coordinates. These parameters are passed as string
     to avoid int overflow problems
     """
     pos = Position(long(x), long(y), long(z))
     factory = EventFactory.getInstance(ControlEvent.TYPE)
     jump = factory.createJUMP(pos)
     self.incoming.put(jump)
     return self.ok
コード例 #9
0
    def run(self):
        """ Receive messages from other nodes and process them.
        Send messages to other nodes.
        """

        try:
            try:
                self.socket.bind((self.host, self.port))
                self.socket.setblocking(0)
                self.logger.debug("UDP connector started:" + str(self.socket.getsockname()))

                while not self.stopThread:

                    data = ""
                    # send outgoing messages
                    if not self.outgoing.empty():
                        e = self.outgoing.get()
                        self._send_no_wait(e)

                    readsock, writesock, errsock = select.select([self.socket], [], [], 2)

                    if len(readsock):
                        try:
                            # receive and process message from other nodes
                            data, sender = self.socket.recvfrom(self.BUFFER_SIZE)
                            if len(data) > 0:
                                self.logger.debug("recvfrom %s:%s: %s", sender[0],
                                                sender[1],data)

                                # Parse data and create a new event
                                netEvent = self.parser.createEvent(data)

                                # store ip address and port of sender
                                netEvent.setSenderAddress(Address(sender[0], sender[1]))

                                # add a new event to the queue of events that need to be
                                # processed
                                self.incoming.put(netEvent)
                        except ValueError:
                            self.logger.warn("NetThread - parsing error - unknown message " + data)
                        except:
                            self.logger.debug("Exception in network thread - " +
                                            str(sys.exc_info()[0]))
                            raise

            except Exception, e:
                evt = EventFactory.getInstance(ControlEvent.TYPE).createABORT('UDP connector error-' +
                                                                              str(e))
                self.incoming.put(evt)
                raise

        finally:
            self.socket.close()
            self.logger.info('End of Network Server...')
            sys.exit(0)
コード例 #10
0
    def kill(self):
        """ Kill the node and stop connection betwwen navigator and node
        """
        # send a KILL order to the node
        factory = EventFactory.getInstance(ControlEvent.TYPE)
        kill = factory.createKILL()
        self.incoming.put(kill)

        # stop this connector
        self.connector.stop()

        return self.ok
コード例 #11
0
 def setUp(self):
     configFileName = "../../conf/solipsis.conf"
     configFileName = "../../conf/solipsis.conf"
     parser = OptionParser('')
     param = Parameters(parser, configFileName)
     self.node = Node(param)
     EventFactory.init(self.node)
     EventFactory.register(PeerEventFactory.TYPE, PeerEventFactory())
     EventFactory.register(ControlEventFactory.TYPE, ControlEventFactory())
コード例 #12
0
    def testCreateEvent(self):
        pf = EventFactory.getInstance(PeerEvent.TYPE)
        evt = pf.createHELLO()
        
        print evt.__dict__
        print '\n'
        n = Notification()
        n.setFromEvent(evt)
        print n.__dict__
        print '\n'
        e= n.createEvent()
        print e.__dict__
        print '\n'

        e2 = pf.createHEARTBEAT()
        parser = PeerEventParser()
        print parser.getData(e2)