void LGSSvr::player_disconnected( LGS_Service* ps) { //处理断线 if( ps->player_ == 0) return; //防止因为异步导致的多次discnnect通知 { ACE_Guard<ACE_Thread_Mutex> mon( get_mutex()); USED_PLAYERS_VECTOR::iterator fiter =NS_STL::find( used_players_.begin(), used_players_.end(), ps->player_); if( fiter == used_players_.end()) return; } MODULE_LOG_DEBUG( MODULE_TEMP, "userlost from client. user:[%d]", ps->player_->uuid_.userid_); //向rgs发送断线通知 PRO::Pro_SvrUserLost_NTF* ntf =PROTOCOL_NEW PRO::Pro_SvrUserLost_NTF(); SESSION_UUID_FILL( ntf, ps->player_->server_index_, ps->player_->uuid_) this->send_to_rgs( ntf); //释放玩家资源 release_player( ps->player_); }
static void media_player_free(gpointer data) { DBusConnection *conn = btd_get_dbus_connection(); struct media_player *mp = data; struct media_adapter *adapter = mp->adapter; if (mp->player) { adapter->players = g_slist_remove(adapter->players, mp); release_player(mp); } g_dbus_remove_watch(conn, mp->watch); g_dbus_remove_watch(conn, mp->properties_watch); g_dbus_remove_watch(conn, mp->track_watch); if (mp->track) g_hash_table_unref(mp->track); if (mp->settings) g_hash_table_unref(mp->settings); g_timer_destroy(mp->timer); g_free(mp->sender); g_free(mp->path); g_free(mp->status); g_free(mp); }
void GTSSvr::player_disconnected( GTS_Service* ps) { //处理断线 if( ps->player_ == 0) return; //防止多次disconnect通知 { ACE_Guard<ACE_Thread_Mutex> mon( get_mutex()); USED_PLAYERS_VECTOR::iterator fiter =NS_STL::find( used_players_.begin(), used_players_.end(), ps->player_); if( fiter == used_players_.end()) return; } //选服成功 //TODO:断线保持 /* if( ps->player_->is_ingame()) { MODULE_LOG_DEBUG( MODULE_TEMP, "userlost from client. user:[%d], and will keep living in 5 minutes.", ps->player_->uuid_.userid_); //断线保持注册 PRO::Pro_SvrDisconnKeep_req *req =PROTOCOL_NEW PRO::Pro_SvrDisconnKeep_req(); PRO_UUID_FILL( req, ps->player_->global_index_, ps->player_->uuid_); req->token_ =ps->player_->team_proxy_->token_; //保存的gts索引 req->gts_id_ =GLOBALCONFIG_INS->get_appsn(); req->proxy_index_ =ps->player_->team_proxy_->proxy_index_; this->send_to_cts( req); //选线成功之后断线,提供断线保持 player_linkkeep( ps->player_); } else */ { MODULE_LOG_DEBUG( MODULE_TEMP, "userlost from client. user:[%d]", ps->player_->uuid_.userid_); //其他情况走正常的断线流程 if( ps->player_->is_selteamsucc()) { PRO::Pro_SvrUserLost_NTF* ntf =PROTOCOL_NEW PRO::Pro_SvrUserLost_NTF(); PRO_UUID_FILL( ntf, ps->player_->global_index_, ps->player_->uuid_) this->send_to_cts( ntf); } //释放玩家资源 release_player( ps->player_); } }