def connect_to_radio_station(self, is_reconnect=False): response = self.__radio_station_stub.call_in_times( method_name="ConnectPeer", message=loopchain_pb2.ConnectPeerRequest( channel=ChannelProperty().name, peer_object=b'', peer_id=ChannelProperty().peer_id, peer_target=ChannelProperty().peer_target, group_id=ChannelProperty().group_id), retry_times=conf.CONNECTION_RETRY_TIMES_TO_RS, is_stub_reuse=True, timeout=conf.CONNECTION_TIMEOUT_TO_RS) # start next ConnectPeer timer self.__timer_service.add_timer_convenient( timer_key=TimerService.TIMER_KEY_CONNECT_PEER, duration=conf.CONNECTION_RETRY_TIMER, callback=self.connect_to_radio_station, callback_kwargs={"is_reconnect": True}) if is_reconnect: return if response and response.status == message_code.Response.success: try: peer_list_data = PeerListData.load(response.peer_list) except Exception as e: traceback.print_exc() logging.error( f"Invalid peer list. Check your Radio Station. exception={e}" ) return self.__peer_manager.set_peer_list(peer_list_data) peers, peer_list = self.__peer_manager.get_peers_for_debug() logging.debug("peer list update: " + peers) # add connected peer to processes audience for each_peer in peer_list: util.logger.spam( f"peer_service:connect_to_radio_station peer({each_peer.target}-{each_peer.status})" ) if each_peer.status == PeerStatus.connected: self.__broadcast_scheduler.schedule_job( BroadcastCommand.SUBSCRIBE, each_peer.target)
def connect_to_radiostation( self, channel: str, is_reconnect: bool = False) -> loopchain_pb2.ConnectPeerReply: """connect to radiostation with channel :return: 접속정보, 실패시 None """ logging.debug(f"try to connect to radiostation channel({channel})") if self.stub_to_radiostation is None: logging.warning("fail make stub to Radio Station!!") return None # 공통 부분 response = self.stub_to_radiostation.call_in_times( method_name="ConnectPeer", message=loopchain_pb2.ConnectPeerRequest( channel=channel, peer_object=b'', peer_id=self.__peer_id, peer_target=self.__peer_target, group_id=self.group_id, cert=self.__auth.get_public_der()), retry_times=conf.CONNECTION_RETRY_TIMES_TO_RS, is_stub_reuse=True, timeout=conf.CONNECTION_TIMEOUT_TO_RS) if not is_reconnect: if response is not None and response.status == message_code.Response.success: peer_list_data = pickle.loads(response.peer_list) self.__channel_manager.get_peer_manager(channel).load( peer_list_data, False) logging.debug("peer list update: " + self.__channel_manager.get_peer_manager( channel).get_peers_for_debug()) else: logging.debug("using local peer list: " + self.__channel_manager.get_peer_manager( channel).get_peers_for_debug()) return response
def connect_to_radio_station(self, is_reconnect=False): response = self.__radio_station_stub.call_in_times( method_name="ConnectPeer", message=loopchain_pb2.ConnectPeerRequest( channel=ChannelProperty().name, peer_object=b'', peer_id=ChannelProperty().peer_id, peer_target=ChannelProperty().peer_target, group_id=ChannelProperty().group_id, cert=self.peer_auth.peer_cert), retry_times=conf.CONNECTION_RETRY_TIMES_TO_RS, is_stub_reuse=True, timeout=conf.CONNECTION_TIMEOUT_TO_RS) # start next ConnectPeer timer if TimerService.TIMER_KEY_CONNECT_PEER not in self.__timer_service.timer_list.keys( ): self.__timer_service.add_timer( TimerService.TIMER_KEY_CONNECT_PEER, Timer(target=TimerService.TIMER_KEY_CONNECT_PEER, duration=conf.CONNECTION_RETRY_TIMER, callback=self.connect_to_radio_station, callback_kwargs={"is_reconnect": True})) if is_reconnect: return if response and response.status == message_code.Response.success: peer_list_data = pickle.loads(response.peer_list) self.__peer_manager.load(peer_list_data, False) peers, peer_list = self.__peer_manager.get_peers_for_debug() logging.debug("peer list update: " + peers) # add connected peer to processes audience for each_peer in peer_list: util.logger.spam( f"peer_service:connect_to_radio_station peer({each_peer.target}-{each_peer.status})" ) if each_peer.status == PeerStatus.connected: self.__broadcast_scheduler.schedule_job( BroadcastCommand.SUBSCRIBE, each_peer.target)