コード例 #1
0
ファイル: LGSSvr.cpp プロジェクト: roseboych/mmorpg-xfw
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_);
}
コード例 #2
0
ファイル: media.c プロジェクト: adityakamath/ArduHack
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);
}
コード例 #3
0
ファイル: GTSSvr.cpp プロジェクト: roseboych/mmorpg-xfw
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_);
	}
}