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()
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
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)
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()
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()