Esempio n. 1
0
class EZSTHandler(BaseEZSTHandler):
    def __init__(self, **kw):
        super(EZSTHandler, self).__init__(**kw)

        self.__local_route = Route()
        self.__vlan_route = Route()

    def bind(self, host='', port=3257):
        super(BaseEZSTHandler, self).bind(host, port)
        self.broadcast('JOIN %s' % (self.uid))

    def doList(self, param):
        if param.upper() != 'VLAN':
            self.logger.info('Local Routing:\n%s' % (str(self.__local_route)))
        if param.upper() != 'LOCAL':
            self.logger.info('Vlan Routing:\n%s' % (str(self.__vlan_route)))

    def doPing(self, param):
        '''
            PING <host>:<port>
        '''
        address, port = param.split(':')
        port = int(port)
        self.logger.info('PING to %s:%d' % (address, port))
        self.write('PING', (address, port))

    def onPing(self, address, param):
        self.logger.info('PING from %s' % (str(address)))
        self.write('PONG', address)

    def onPong(self, address, param):
        self.logger.info('PONG from %s' % (str(address)))

    def onJoin(self, address, uid):
        if uid != self.uid:
            self.__local_route.add(uid, address)
            self.write('OK %s' % self.uid, address)

    def onOk(self, address, uid):
        self.__local_route.add(uid, address)
        self.write('QUERY', address)

    def onQuery(self, address, param):
        '''Query for global Unique ID
        '''
        safe_counter = 99 # Not to send peer information more than 99 times.

        for uid, addr in self.__vlan_route.list():
            self.write('PEER %s %s' % (uid, addr), address)

            if safe_counter > 0:
                break
            safe_counter -= 1

    def onPeer(self, address, param):
        # For QUERY 
        uid, sep, addr = param.partition(' ')
        addr = eval(addr)
        self.__vlan_route.add(uid, address)
        if BaseEZSTHandler.check_vlan(self.uid, param):
            logging.debug('Addr = %s' % (str(addr)))
            self.write('CONNECT %s' % (self.uid), addr)

    def onConnect(self, address, param):
        self.write('SUCCESS %s' % (self.uid), address)

    def onSuccess(self, address, param):
        pass

    def doSend(self, param, from_uid=None):
        try:
            to_uid, message = string.split(param, maxsplit=1)
        except ValueError:
            to_uid, message = param.strip(), ''

        address = None
        nexthops = self.__local_route.get(to_uid) + self.__vlan_route.get(to_uid)
        if from_uid is None:
            from_uid = self.uid

        for nexthop in nexthops:
            self.write('SEND %s %s %s' % (from_uid, to_uid, message), nexthop)
            break

    def onSend(self, address, param):
        from_uid, to_uid, message = string.split(param, maxsplit=2)
        if to_uid == self.uid:
            self.logger.info('SEND from %s: %s' % (address, message))
        else:
            self.doSend('%s %s' % (to_uid, message), from_uid)
Esempio n. 2
0
 def test_put_then_get_by_key(self):
     key = Route(tag="1", title = "1").put()
     key.get()
Esempio n. 3
0
class EZSTHandler(BaseEZSTHandler):
    def __init__(self, **kw):
        super(EZSTHandler, self).__init__(**kw)

        self.__local_route = Route()
        self.__vlan_route = Route()

    def bind(self, host='', port=3257):
        super(BaseEZSTHandler, self).bind(host, port)
        self.broadcast('JOIN %s' % (self.uid))

    def doList(self, param):
        if param.upper() != 'VLAN':
            self.logger.info('Local Routing:\n%s' % (str(self.__local_route)))
        if param.upper() != 'LOCAL':
            self.logger.info('Vlan Routing:\n%s' % (str(self.__vlan_route)))

    def doPing(self, param):
        '''
            PING <host>:<port>
        '''
        address, port = param.split(':')
        port = int(port)
        self.logger.info('PING to %s:%d' % (address, port))
        self.write('PING', (address, port))

    def onPing(self, address, param):
        self.logger.info('PING from %s' % (str(address)))
        self.write('PONG', address)

    def onPong(self, address, param):
        self.logger.info('PONG from %s' % (str(address)))

    def onJoin(self, address, uid):
        if uid != self.uid:
            self.__local_route.add(uid, address)
            self.write('OK %s' % self.uid, address)

    def onOk(self, address, uid):
        self.__local_route.add(uid, address)
        self.write('QUERY', address)

    def onQuery(self, address, param):
        '''Query for global Unique ID
        '''
        safe_counter = 99  # Not to send peer information more than 99 times.

        for uid, addr in self.__vlan_route.list():
            self.write('PEER %s %s' % (uid, addr), address)

            if safe_counter > 0:
                break
            safe_counter -= 1

    def onPeer(self, address, param):
        # For QUERY
        uid, sep, addr = param.partition(' ')
        addr = eval(addr)
        self.__vlan_route.add(uid, address)
        if BaseEZSTHandler.check_vlan(self.uid, param):
            logging.debug('Addr = %s' % (str(addr)))
            self.write('CONNECT %s' % (self.uid), addr)

    def onConnect(self, address, param):
        self.write('SUCCESS %s' % (self.uid), address)

    def onSuccess(self, address, param):
        pass

    def doSend(self, param, from_uid=None):
        try:
            to_uid, message = string.split(param, maxsplit=1)
        except ValueError:
            to_uid, message = param.strip(), ''

        address = None
        nexthops = self.__local_route.get(to_uid) + self.__vlan_route.get(
            to_uid)
        if from_uid is None:
            from_uid = self.uid

        for nexthop in nexthops:
            self.write('SEND %s %s %s' % (from_uid, to_uid, message), nexthop)
            break

    def onSend(self, address, param):
        from_uid, to_uid, message = string.split(param, maxsplit=2)
        if to_uid == self.uid:
            self.logger.info('SEND from %s: %s' % (address, message))
        else:
            self.doSend('%s %s' % (to_uid, message), from_uid)