Пример #1
0
def start_as_peer(args, node_type=None):
    print_prologue()

    # apply default configure values
    port = args.port or conf.PORT_PEER
    radio_station_target = f"{conf.IP_RADIOSTATION}:{conf.PORT_RADIOSTATION}"
    amqp_target = args.amqp_target or conf.AMQP_TARGET
    amqp_key = args.amqp_key or conf.AMQP_KEY

    if conf.CHANNEL_BUILTIN:
        if not amqp_key or amqp_key == conf.AMQP_KEY_DEFAULT:
            amqp_key = f"{util.get_private_ip()}:{port}"
            command_arguments.add_raw_command(command_arguments.Type.AMQPKey,
                                              amqp_key)

    check_port_available(int(port))

    if node_type is None:
        node_type = conf.NodeType.CommunityNode
    elif node_type == conf.NodeType.CitizenNode and not args.radio_station_target:
        util.exit_and_msg(f"citizen node needs subscribing peer target input")

    if args.radio_station_target:
        try:
            parse_result: ParseResult = urlparse(args.radio_station_target)

            if conf.SUBSCRIBE_USE_HTTPS:
                if not parse_result.scheme:
                    parse_result = urlparse(
                        f"https://{args.radio_station_target}")
            else:
                if not parse_result.scheme:
                    parse_result = urlparse(
                        f"http://{args.radio_station_target}")
                    if not parse_result.port:
                        parse_result = urlparse(
                            f"http://{args.radio_station_target}:{conf.PORT_RADIOSTATION}"
                        )

            radio_station_target = parse_result.netloc

        except Exception as e:
            util.exit_and_msg(
                f"'-r' or '--radio_station_target' option requires "
                f"[IP Address of Radio Station]:[PORT number of Radio Station], "
                f"or just [IP Address of Radio Station] format. error({e})")

    # run peer service with parameters
    logging.info(f"loopchain peer run with: port({port}) "
                 f"radio station target({radio_station_target})")

    PeerService(radio_station_target=radio_station_target,
                node_type=node_type).serve(port=port,
                                           agent_pin=args.agent_pin,
                                           amqp_target=amqp_target,
                                           amqp_key=amqp_key)

    print_eplilogue()
Пример #2
0
    def __init__(self, channel_name, amqp_target, amqp_key):
        self.__block_manager: BlockManager = None
        self.__score_container: CommonSubprocess = None
        self.__score_info: dict = None
        self.__peer_auth: PeerAuthorization = None
        self.__peer_manager: PeerManager = None
        self.__broadcast_scheduler: BroadcastScheduler = None
        self.__radio_station_stub = None
        self.__consensus: Consensus = None
        self.__proposer: Proposer = None
        self.__acceptor: Acceptor = None
        self.__timer_service = TimerService()

        loggers.get_preset().channel_name = channel_name
        loggers.get_preset().update_logger()

        channel_queue_name = conf.CHANNEL_QUEUE_NAME_FORMAT.format(channel_name=channel_name, amqp_key=amqp_key)
        self.__inner_service = ChannelInnerService(
            amqp_target, channel_queue_name, conf.AMQP_USERNAME, conf.AMQP_PASSWORD, channel_service=self)

        logging.info(f"ChannelService : {channel_name}, Queue : {channel_queue_name}")

        ChannelProperty().name = channel_name
        ChannelProperty().amqp_target = amqp_target

        StubCollection().amqp_key = amqp_key
        StubCollection().amqp_target = amqp_target

        command_arguments.add_raw_command(command_arguments.Type.Channel, channel_name)
        command_arguments.add_raw_command(command_arguments.Type.AMQPTarget, amqp_target)
        command_arguments.add_raw_command(command_arguments.Type.AMQPKey, amqp_key)

        ObjectManager().channel_service = self
Пример #3
0
    def __init__(self, channel_name, amqp_target, amqp_key, rollback=False):
        self.__block_manager: BlockManager = None
        self.__score_container: CommonSubprocess = None
        self.__score_info: dict = None
        self.__peer_auth: Signer = None
        self.__broadcast_scheduler: BroadcastScheduler = None
        self.__rs_client: RestClient = None
        self.__timer_service = TimerService()
        self.__node_subscriber: NodeSubscriber = None
        self._rollback: bool = rollback

        loggers.get_preset().channel_name = channel_name
        loggers.get_preset().update_logger()

        channel_queue_name = conf.CHANNEL_QUEUE_NAME_FORMAT.format(channel_name=channel_name, amqp_key=amqp_key)
        self.__inner_service = ChannelInnerService(
            amqp_target, channel_queue_name, conf.AMQP_USERNAME, conf.AMQP_PASSWORD, channel_service=self)

        logging.info(f"ChannelService : {channel_name}, Queue : {channel_queue_name}")

        ChannelProperty().name = channel_name
        ChannelProperty().amqp_target = amqp_target
        ChannelProperty().crep_root_hash = Hash32.fromhex(conf.CHANNEL_OPTION[channel_name].get('crep_root_hash'))

        StubCollection().amqp_key = amqp_key
        StubCollection().amqp_target = amqp_target

        command_arguments.add_raw_command(command_arguments.Type.Channel, channel_name)
        command_arguments.add_raw_command(command_arguments.Type.AMQPTarget, amqp_target)
        command_arguments.add_raw_command(command_arguments.Type.AMQPKey, amqp_key)

        ObjectManager().channel_service = self
        self.__state_machine = ChannelStateMachine(self)
Пример #4
0
def start_as_peer(args):
    print_prologue()

    # apply default configure values
    port = args.port or conf.PORT_PEER
    amqp_target = args.amqp_target or conf.AMQP_TARGET
    amqp_key = args.amqp_key or conf.AMQP_KEY

    if conf.CHANNEL_BUILTIN:
        if not amqp_key or amqp_key == conf.AMQP_KEY_DEFAULT:
            amqp_key = f"{utils.get_private_ip()}:{port}"
            command_arguments.add_raw_command(command_arguments.Type.AMQPKey,
                                              amqp_key)

    check_port_available(int(port))

    PeerService().serve(port=port,
                        agent_pin=args.agent_pin,
                        amqp_target=amqp_target,
                        amqp_key=amqp_key)

    print_epilogue()
Пример #5
0
def start_as_peer(args, node_type=None):
    print_prologue()

    # apply default configure values
    port = args.port or conf.PORT_PEER
    radio_station_ip = conf.IP_RADIOSTATION
    radio_station_port = conf.PORT_RADIOSTATION
    radio_station_ip_sub = conf.IP_RADIOSTATION
    radio_station_port_sub = conf.PORT_RADIOSTATION
    amqp_target = args.amqp_target or conf.AMQP_TARGET
    amqp_key = args.amqp_key or conf.AMQP_KEY

    if conf.CHANNEL_BUILTIN:
        if not amqp_key or amqp_key == conf.AMQP_KEY_DEFAULT:
            amqp_key = f"{util.get_private_ip()}:{port}"
            command_arguments.add_raw_command(command_arguments.Type.AMQPKey,
                                              amqp_key)

    check_port_available(int(port))

    if node_type is None:
        node_type = conf.NodeType.CommunityNode
    elif node_type == conf.NodeType.CitizenNode and not args.radio_station_target:
        util.exit_and_msg(f"citizen node needs subscribing peer target input")

    if args.radio_station_target:
        try:
            is_set_https = False
            if "https://" in args.radio_station_target:
                is_set_https = True
                args.radio_station_target = args.radio_station_target.split(
                    "https://")[1]
                util.logger.spam(
                    f"args.radio_station_target({args.radio_station_target})")
            elif ':' in args.radio_station_target:
                target_list = util.parse_target_list(args.radio_station_target)
                if len(target_list) == 2:
                    radio_station_ip, radio_station_port = target_list[0]
                    radio_station_ip_sub, radio_station_port_sub = target_list[
                        1]
                else:
                    radio_station_ip, radio_station_port = target_list[0]
                    # util.logger.spam(f"peer "
                    #                  f"radio_station_ip({radio_station_ip}) "
                    #                  f"radio_station_port({radio_station_port}) "
                    #                  f"radio_station_ip_sub({radio_station_ip_sub}) "
                    #                  f"radio_station_port_sub({radio_station_port_sub})")
            elif len(args.radio_station_target.split('.')) == 4:
                radio_station_ip = args.radio_station_target
            elif len(args.radio_station_target.split('.')) >= 2:
                is_set_https = True
            else:
                raise Exception("Invalid IP format")

            if is_set_https:
                radio_station_ip = args.radio_station_target
                radio_station_port = 443
                util.logger.spam(
                    f"start_as_peer:radio_station_ip {radio_station_ip}")

        except Exception as e:
            util.exit_and_msg(
                f"'-r' or '--radio_station_target' option requires "
                f"[IP Address of Radio Station]:[PORT number of Radio Station], "
                f"or just [IP Address of Radio Station] format. error({e})")

    # run peer service with parameters
    logging.info(f"loopchain peer run with: port({port}) "
                 f"radio station({radio_station_ip}:{radio_station_port})")

    PeerService(radio_station_ip=radio_station_ip,
                radio_station_port=radio_station_port,
                node_type=node_type).serve(port=port,
                                           agent_pin=args.agent_pin,
                                           amqp_target=amqp_target,
                                           amqp_key=amqp_key)

    print_eplilogue()