def _run_access_check(self) -> None: """Check with the master server to see if we're likely joinable.""" from ba._netutils import serverget serverget( 'bsAccessCheck', { 'port': _ba.get_game_port(), 'b': _ba.app.build_number }, callback=self._access_check_response, )
def _access_check_response(self, data: Optional[Dict[str, Any]]) -> None: gameport = _ba.get_game_port() if data is None: print('error on UDP port access check (internet down?)') else: if data['accessible']: print(f'{Clr.SBLU}UDP port {gameport} access check successful.' f' Your server appears to be joinable from the' f' internet.{Clr.RST}') else: print(f'{Clr.SRED}UDP port {gameport} access check failed.' f' Your server does not appear to be joinable' f' from the internet.{Clr.RST}')
def _on_accessible_response(self, data: Optional[Dict[str, Any]]) -> None: t_addr = self._t_addr t_accessible = self._t_accessible t_accessible_extra = self._t_accessible_extra self._doing_access_check = False color_bad = (1, 1, 0) color_good = (0, 1, 0) if data is None or 'address' not in data or 'accessible' not in data: if t_addr: ba.textwidget(edit=t_addr, text=ba.Lstr(resource='gatherWindow.' 'noConnectionText'), color=color_bad) if t_accessible: ba.textwidget(edit=t_accessible, text=ba.Lstr(resource='gatherWindow.' 'noConnectionText'), color=color_bad) if t_accessible_extra: ba.textwidget(edit=t_accessible_extra, text='', color=color_bad) return if t_addr: ba.textwidget(edit=t_addr, text=data['address'], color=color_good) if t_accessible: if data['accessible']: ba.textwidget(edit=t_accessible, text=ba.Lstr(resource='gatherWindow.' 'manualJoinableYesText'), color=color_good) if t_accessible_extra: ba.textwidget(edit=t_accessible_extra, text='', color=color_good) else: ba.textwidget( edit=t_accessible, text=ba.Lstr(resource='gatherWindow.' 'manualJoinableNoWithAsteriskText'), color=color_bad, ) if t_accessible_extra: ba.textwidget( edit=t_accessible_extra, text=ba.Lstr(resource='gatherWindow.' 'manualRouterForwardingText', subs=[('${PORT}', str(_ba.get_game_port()))]), color=color_bad, )
def access_check_response(data: Optional[Dict[str, Any]]) -> None: gameport = _ba.get_game_port() if data is None: print('error on UDP port access check (internet down?)') else: if data['accessible']: print('UDP port', gameport, ('access check successful. Your ' 'server appears to be joinable ' 'from the internet.')) else: print('UDP port', gameport, ('access check failed. Your server ' 'does not appear to be joinable ' 'from the internet.'))
def _on_public_party_accessible_response( self, data: Optional[Dict[str, Any]]) -> None: # If we've got status text widgets, update them. text = self._host_status_text if text: if data is None: ba.textwidget( edit=text, text=ba.Lstr(resource='gatherWindow.' 'partyStatusNoConnectionText'), color=(1, 0, 0), ) else: if not data.get('accessible', False): ex_line: Union[str, ba.Lstr] if self._local_address is not None: ex_line = ba.Lstr( value='\n${A} ${B}', subs=[('${A}', ba.Lstr(resource='gatherWindow.' 'manualYourLocalAddressText')), ('${B}', self._local_address)]) else: ex_line = '' ba.textwidget( edit=text, text=ba.Lstr( value='${A}\n${B}${C}', subs=[('${A}', ba.Lstr(resource='gatherWindow.' 'partyStatusNotJoinableText')), ('${B}', ba.Lstr(resource='gatherWindow.' 'manualRouterForwardingText', subs=[('${PORT}', str(_ba.get_game_port()))])), ('${C}', ex_line)]), color=(1, 0, 0)) else: ba.textwidget(edit=text, text=ba.Lstr(resource='gatherWindow.' 'partyStatusJoinableText'), color=(0, 1, 0))
def launch_server_session() -> None: """Kick off a host-session based on the current server config.""" from ba._netutils import serverget from ba import _freeforallsession from ba import _teamssession app = _ba.app servercfg = copy.deepcopy(app.server_config) appcfg = app.config # Convert string session type to the class. # Hmm should we just keep this as a string? session_type_name = servercfg.get('session_type', 'ffa') sessiontype: Type[ba.Session] if session_type_name == 'ffa': sessiontype = _freeforallsession.FreeForAllSession elif session_type_name == 'teams': sessiontype = _teamssession.TeamsSession else: raise Exception('invalid session_type value: ' + session_type_name) if _ba.get_account_state() != 'signed_in': print('WARNING: launch_server_session() expects to run ' 'with a signed in server account') if app.run_server_first_run: print((('BallisticaCore headless ' if app.subplatform == 'headless' else 'BallisticaCore ') + str(app.version) + ' (' + str(app.build_number) + ') entering server-mode ' + time.strftime('%c'))) playlist_shuffle = servercfg.get('playlist_shuffle', True) appcfg['Show Tutorial'] = False appcfg['Free-for-All Playlist Selection'] = (servercfg.get( 'playlist_name', '__default__') if session_type_name == 'ffa' else '__default__') appcfg['Free-for-All Playlist Randomize'] = playlist_shuffle appcfg['Team Tournament Playlist Selection'] = (servercfg.get( 'playlist_name', '__default__') if session_type_name == 'teams' else '__default__') appcfg['Team Tournament Playlist Randomize'] = playlist_shuffle appcfg['Port'] = servercfg.get('port', 43210) # Set series lengths. app.teams_series_length = servercfg.get('teams_series_length', 7) app.ffa_series_length = servercfg.get('ffa_series_length', 24) # And here we go. _ba.new_host_session(sessiontype) # Also lets fire off an access check if this is our first time # through (and they want a public party). if app.run_server_first_run: def access_check_response(data: Optional[Dict[str, Any]]) -> None: gameport = _ba.get_game_port() if data is None: print('error on UDP port access check (internet down?)') else: if data['accessible']: print('UDP port', gameport, ('access check successful. Your ' 'server appears to be joinable ' 'from the internet.')) else: print('UDP port', gameport, ('access check failed. Your server ' 'does not appear to be joinable ' 'from the internet.')) port = _ba.get_game_port() serverget('bsAccessCheck', { 'port': port, 'b': app.build_number }, callback=access_check_response) app.run_server_first_run = False app.server_config_dirty = False