Пример #1
0
 def __init__(self, chain, privkey, transport, discovery):
     self.chain = chain
     self.privkey = privkey
     self.address = privtoaddr(privkey)
     self.protocol = RaidenProtocol(transport, discovery, self)
     transport.protocol = self.protocol
     self.assetmanagers = dict()
     self.api = RaidenAPI(self)
Пример #2
0
 def __init__(self, chain, privkey, transport, discovery):
     self.chain = chain
     self.privkey = privkey
     self.address = privtoaddr(privkey)
     self.protocol = RaidenProtocol(transport, discovery, self)
     self.assetmanagers = dict()
     self.api = RaidenAPI(self)
Пример #3
0
class RaidenService(object):

    def __init__(self, chain, privkey, transport, discovery):
        self.chain = chain
        self.privkey = privkey
        self.address = privtoaddr(privkey)
        self.protocol = RaidenProtocol(transport, discovery, self)
        transport.protocol = self.protocol
        self.assetmanagers = dict()
        self.api = RaidenAPI(self)

    def __repr__(self):
        return '<{} {}>'.format(self.__class__.__name__, pex(self.address))

    def setup_assets(self):
        # create asset managers
        for asset_address in AssetManager.get_assets_for_address(self.chain, self.address):
            self.assetmanagers[asset_address] = AssetManager(self, asset_address)

    def sign(self, msg):
        assert isinstance(msg, SignedMessage)
        return msg.sign(self.privkey)

    def on_message(self, msg, msghash):
        print "\nON MESSAGE {} {}".format(self, msg)
        method = 'on_%s' % msg.__class__.__name__.lower()
        # update activity monitor (which also does pings to all addresses in channels)
        getattr(self, method)(msg)
        print "SEND ACK{} {}".format(self, msg)
        self.protocol.send_ack(msg.sender, messages.Ack(self.address, msghash))

    def on_message_failsafe(self, msg, msghash):
        method = 'on_%s' % msg.__class__.__name__.lower()
        # update activity monitor (which also does pings to all addresses in channels)
        try:
            getattr(self, method)(msg)
        except messages.BaseError as error:
            self.protocol.send_ack(msg.sender, error)
        else:
            self.protocol.send_ack(msg.sender, messages.Ack(self.address, msghash))

    def send(self, recipient, msg):
#        assert msg.sender
        assert isaddress(recipient)
        self.protocol.send(recipient, msg)

    def on_baseerror(self, msg):
        pass

    def on_ping(self, msg):
        pass  # ack already sent, activity monitor should have been notified in on_message

    def on_transfer(self, msg):
        am = self.assetmanagers[msg.asset]
        am.transfermanager.on_transfer(msg)

    on_lockedtransfer = on_transfer

    def on_mediatedtransfer(self, msg):
        am = self.assetmanagers[msg.asset]
        am.transfermanager.on_mediatedtransfer(msg)

    # events, that need to find a TransferTask

    def on_event_for_transfertask(self, msg):
        for am in self.assetmanagers.values():
            if msg.hashlock in am.transfermanager.transfertasks:
                am.transfermanager.transfertasks[msg.hashlock].on_event(msg)
                return True
    on_secretrequest = on_transfertimeout = on_canceltransfer = on_event_for_transfertask

    def on_secret(self, msg):
        self.on_event_for_transfertask(msg)
        for am in self.assetmanagers.values():
            am.on_secret(msg)

    def on_transferrequest(self, msg):
        am = self.assetmanagers[msg.asset]
        am.transfermanager.on_tranferrequest(msg)

    # other

    def on_rejected(self, msg):
        pass

    def on_hashlockrequest(self, msg):
        pass

    def on_exchangerequest(self, msg):
        pass
Пример #4
0
class RaidenService(object):
    """ Runs a service on a node """
    def __init__(self, chain, privkey, transport, discovery):
        self.chain = chain
        self.privkey = privkey
        self.address = privtoaddr(privkey)
        self.protocol = RaidenProtocol(transport, discovery, self)
        transport.protocol = self.protocol
        self.assetmanagers = dict()
        self.api = RaidenAPI(self)

    def __repr__(self):
        return '<{} {}>'.format(self.__class__.__name__, pex(self.address))

    def setup_assets(self):
        # create asset managers
        for asset_address in AssetManager.get_assets_for_address(
                self.chain, self.address):
            self.assetmanagers[asset_address] = AssetManager(
                self, asset_address)

    def sign(self, msg):
        assert isinstance(msg, SignedMessage)
        return msg.sign(self.privkey)

    def on_message(self, msg, msghash):
        log.debug("-" * 60)
        log.debug("ON MESSAGE {} {}".format(self, msg))
        method = 'on_%s' % msg.__class__.__name__.lower()
        # update activity monitor (which also does pings to all addresses in channels)
        getattr(self, method)(msg)
        log.debug("SEND ACK{} {}".format(self, msg))
        self.protocol.send_ack(msg.sender, messages.Ack(self.address, msghash))

    def on_message_failsafe(self, msg, msghash):
        method = 'on_%s' % msg.__class__.__name__.lower()
        # update activity monitor (which also does pings to all addresses in channels)
        try:
            getattr(self, method)(msg)
        except messages.BaseError as error:
            self.protocol.send_ack(msg.sender, error)
        else:
            self.protocol.send_ack(msg.sender,
                                   messages.Ack(self.address, msghash))

    def send(self, recipient, msg):
        # assert msg.sender
        assert isaddress(recipient)
        self.protocol.send(recipient, msg)

    def on_baseerror(self, msg):
        pass

    def on_ping(self, msg):
        pass  # ack already sent, activity monitor should have been notified in on_message

    def on_transfer(self, msg):
        am = self.assetmanagers[msg.asset]
        am.transfermanager.on_transfer(msg)

    on_lockedtransfer = on_transfer

    def on_mediatedtransfer(self, msg):
        am = self.assetmanagers[msg.asset]
        am.transfermanager.on_mediatedtransfer(msg)

    # events, that need to find a TransferTask

    def on_event_for_transfertask(self, msg):
        for am in self.assetmanagers.values():
            if msg.hashlock in am.transfermanager.transfertasks:
                am.transfermanager.transfertasks[msg.hashlock].on_event(msg)
                return True

    on_secretrequest = on_transfertimeout = on_canceltransfer = on_event_for_transfertask

    def on_secret(self, msg):
        self.on_event_for_transfertask(msg)
        for am in self.assetmanagers.values():
            am.on_secret(msg)

    def on_transferrequest(self, msg):
        am = self.assetmanagers[msg.asset]
        am.transfermanager.on_tranferrequest(msg)

    # other

    def on_rejected(self, msg):
        pass

    def on_hashlockrequest(self, msg):
        pass

    def on_exchangerequest(self, msg):
        pass