コード例 #1
0
 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,
     )
コード例 #2
0
 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}')
コード例 #3
0
 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,
                 )
コード例 #4
0
 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.'))
コード例 #5
0
    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))
コード例 #6
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