void fs2netd_reset_connection() { bool reset_gameserver = false; if (Net_player->flags & NETINFO_FLAG_MT_CONNECTED) { fs2netd_gameserver_disconnect(); reset_gameserver = true; } FS2NetD_Disconnect(); fs2netd_reset_state(); // wait a little to allow for the port to clear Sleep(500); // try to reinit the server connection fs2netd_login(); Sleep(250); if ( reset_gameserver && fs2netd_is_online() ) { fs2netd_gameserver_start(); } }
void fs2netd_close() { // make sure that a hosted games is de-listed fs2netd_gameserver_disconnect(); FS2NetD_Disconnect(); fs2netd_reset_state(); PXO_options_loaded = false; Table_valid_status.clear(); FS2NetD_file_list.clear(); FS2NetD_ban_list.clear(); }
void fs2netd_disconnect() { if ( !Is_connected ) { return; } if (Net_player->flags & NETINFO_FLAG_MT_CONNECTED) { fs2netd_gameserver_disconnect(); } FS2NetD_Disconnect(); fs2netd_reset_state(); Sleep(500); }
// called when a given netgame is about to end completely void multi_endgame_cleanup() { int idx; hud_config_as_player(); send_leave_game_packet(); // flush all outgoing io, force all packets through multi_io_send_buffered_packets(); // mark myself as disconnected if(!(Game_mode & GM_STANDALONE_SERVER)){ Net_player->flags &= ~(NETINFO_FLAG_CONNECTED|NETINFO_FLAG_DO_NETWORKING); } /*this is a semi-hack so that if we're the master and we're quitting, we don't get an assert Karajorma - From the looks of things this code actually CAUSES an Int3 and doesn't cause an assert anymore besides if the game is over why are we setting flags on a Player_obj anyway? if((Net_player->flags & NETINFO_FLAG_AM_MASTER) && (Player_obj != NULL)){ Player_obj->flags &= ~(OF_PLAYER_SHIP); obj_set_flags( Player_obj, Player_obj->flags | OF_COULD_BE_PLAYER ); } */ // shut my socket down (will also let the server know i've received any notifications/error from him) // psnet_rel_close_socket( &(Net_player->reliable_socket) ); // 11/18/98 - DB, changed the above to kill all sockets. Its the safest thing to do for(idx=0; idx<MAX_PLAYERS; idx++){ psnet_rel_close_socket(&Net_players[idx].reliable_socket); Net_players[idx].reliable_socket = INVALID_SOCKET; } // set the game quitting flag in our local netgame info - this will _insure_ that even if we miss a packet or // there is some sequencing error, the next time through the multi_do_frame() loop, the game will be ended // Netgame.flags |= (NG_FLAG_QUITTING | NG_FLAG_ENDED); // close all open SPX/TCP reliable sockets if(Net_player->flags & NETINFO_FLAG_AM_MASTER){ // do it for all players, since we're leaving anyway. for(idx=0;idx<MAX_PLAYERS;idx++){ // 6/25/98 -- MWA delete all players from the game if ( &Net_players[idx] != Net_player ) { delete_player( idx ); } } } // if we're currently in the pause state, pop back into gameplay first if(gameseq_get_state() == GS_STATE_MULTI_PAUSED){ gameseq_pop_state(); } // handle game disconnect from FS2NetD (NOTE: must be done *before* standalone is reset!!) if ( MULTI_IS_TRACKER_GAME && (Net_player->flags & NETINFO_FLAG_AM_MASTER) ) { fs2netd_gameserver_disconnect(); } if (Game_mode & GM_STANDALONE_SERVER) { // multi_standalone_quit_game(); multi_standalone_reset_all(); } else { Player->flags |= PLAYER_FLAGS_IS_MULTI; // if we're in Parallax Online mode, log back in there gameseq_post_event(GS_EVENT_MULTI_JOIN_GAME); // if we have an error code, bring up the discon popup if ( ((Multi_endgame_notify_code != -1) || (Multi_endgame_error_code != -1)) && !(Game_mode & GM_STANDALONE_SERVER) ) { multi_endgame_popup(Multi_endgame_notify_code,Multi_endgame_error_code,Multi_endgame_wsa_error); } } /* extern CFILE *obj_stream; if(obj_stream != NULL){ cfclose(obj_stream); obj_stream = NULL; } */ // unload the multiplayer common interface palette multi_common_unload_palette(); // reinitialize endgame stuff // multi_endgame_init(); }