Beispiel #1
0
int UserInfoList::GetUnusedUser(UserInfo *&user_info)
{
	AutoLock tmp_lock(&list_lock_);
	UserInfo *tmp_user = unused_user_info_list_.front();
	if(tmp_user)
	{
		tmp_user->Clear();
		user_info = tmp_user;
		unused_user_info_list_.pop_front();
		return 1;
	}
	else if(unused_user_info_list_.size() <= 0)
	{
		try
		{
			tmp_user = new UserInfo;
			if(tmp_user)
			{
				user_info = tmp_user;
			}
		}
		catch(...)
		{
			std::cout<<"new error"<<std::endl;
			return -2;
		}
		return 0;
	}
	else
		return -1;
}
Beispiel #2
0
void UserInfoList::ClearAllUserInfo()
{
	AutoLock tmp_lock(&list_lock_);
	std::map<int ,UserInfo *>::iterator tmp_map_iter;
	for(tmp_map_iter = user_info_list_.begin();tmp_map_iter != user_info_list_.end();tmp_map_iter++)
	{
		UserInfo *tmp_user = tmp_map_iter->second;
		PushUserInUnusedList(tmp_user);
	}
	user_info_list_.clear();
}
Beispiel #3
0
bool UserInfoList::AddUserInfo(int user_id,UserInfo *user_info)
{
	AutoLock tmp_lock(&list_lock_);
	if(user_info_list_[user_id])
	{
		std::cout<<"User "<<user_id<<" in list"<<std::endl;
		return false;
	}
	user_info_list_[user_id] = user_info;
	return true;
}
Beispiel #4
0
bool RoomManager::AddRoom(int room_id,ChatRoom *chat_room)
{
	AutoLock tmp_lock(&list_mutex_);
	if(NULL == chat_room)
		return false;

	if(NULL != room_list_[room_id])
	{
		return true;
	}
	room_list_[room_id] = chat_room;
}
void SendOrRecvMngBase::ReleaseMemory(mc_system_msg::PPerHandleData handledata)
{
	if(handledata != NULL){
		if(handledata->_socket != NULL && handledata->_offset == 0){
			//收到0字节的数据,说明客户端已经关闭了连接
			CloseSocket(handledata->_socket, __FUNCTION__);
		}

		boost::recursive_mutex::scoped_lock tmp_lock(_buffer_mutex);

		if(handledata->_buffer != NULL){
			_buffer_pool->free((void*)handledata->_buffer);
		}

		_obj_pool->destroy(handledata);
	}
}
Beispiel #6
0
bool RoomManager::DelRoom(int room_id)
{
	AutoLock tmp_lock(&list_mutex_);
	std::map<int,ChatRoom*>::iterator tmp_iter = room_list_.find(room_id);
	if(tmp_iter == room_list_.end())
	{
		return false;
	}

	ChatRoom *tmp_room = tmp_iter->second;
	if(!tmp_room)
	{
		unused_room_list_.push_back(tmp_room);
	}

	room_list_.erase(tmp_iter);
	return true;
}
mc_system_msg::PPerHandleData SendOrRecvMngBase::GetData(_pmy_socket socket)
{
	boost::recursive_mutex::scoped_lock tmp_lock(_buffer_mutex);

	mc_system_msg::PPerHandleData tmp_perHandledata = _obj_pool->construct((char*)_buffer_pool->malloc(), _buffer_size, socket);

	if(tmp_perHandledata != NULL && tmp_perHandledata->_buffer != NULL){
		memset(tmp_perHandledata->_buffer, 0, tmp_perHandledata->_buffer_size);
		return tmp_perHandledata;
	}
	else{
		if(tmp_perHandledata != NULL){
			_obj_pool->destroy(tmp_perHandledata);
		}

		return NULL;
	}
}
Beispiel #8
0
bool UserInfoList::InitUserList(int max_user_count)
{
	AutoLock tmp_lock(&list_lock_);
	max_user_count_ = max_user_count;
	try
	{
		for(int i = 0;i < max_user_count;i++)
		{
			UserInfo *tmp_user = new UserInfo;
			if(tmp_user)
			{
				unused_user_info_list_.push_back(tmp_user);
			}
		}
	}
	catch(...)
	{
		std::cout<<"new error"<<std::endl;
	}
	user_info_list_.clear();
	return true;
}
Beispiel #9
0
ChatRoom *RoomManager::GetNewRoom()
{
	AutoLock tmp_lock(&list_mutex_);
	ChatRoom *tmp_room = NULL;
	if(unused_room_list_.size() <= 0)
	{
		try
		{
			tmp_room = new ChatRoom;
		}
		catch(...)
		{
			tmp_room = NULL;
		}
		return tmp_room;
	}
	else
	{
		tmp_room = unused_room_list_.front();
		tmp_room->ResetRoom(0,-1);
		unused_room_list_.pop_front();
		return tmp_room;
	}
}
Beispiel #10
0
ChatRoom *RoomManager::GetRoom(int room_id)
{
	AutoLock tmp_lock(&list_mutex_);
	ChatRoom *tmp_room = room_list_[room_id];
	return tmp_room;
}
Beispiel #11
0
UserInfo *UserInfoList::GetUserInfo(int user_id)
{
	AutoLock tmp_lock(&list_lock_);
	UserInfo *tmp_user = user_info_list_[user_id];
	return tmp_user;
}
Beispiel #12
0
void UserInfoList::RemoveUser(int user_id)
{
	AutoLock tmp_lock(&list_lock_);
	user_info_list_.erase(user_id);
}
Beispiel #13
0
bool UserInfoList::PushUserInUnusedList(UserInfo *user_info)
{
	AutoLock tmp_lock(&list_lock_);
	unused_user_info_list_.push_back(user_info);
	return true;
}