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; }
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(); }
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; }
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); } }
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; } }
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; }
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; } }
ChatRoom *RoomManager::GetRoom(int room_id) { AutoLock tmp_lock(&list_mutex_); ChatRoom *tmp_room = room_list_[room_id]; return tmp_room; }
UserInfo *UserInfoList::GetUserInfo(int user_id) { AutoLock tmp_lock(&list_lock_); UserInfo *tmp_user = user_info_list_[user_id]; return tmp_user; }
void UserInfoList::RemoveUser(int user_id) { AutoLock tmp_lock(&list_lock_); user_info_list_.erase(user_id); }
bool UserInfoList::PushUserInUnusedList(UserInfo *user_info) { AutoLock tmp_lock(&list_lock_); unused_user_info_list_.push_back(user_info); return true; }