뮤텍스 범위(임계 영역) 재설정.
This commit is contained in:
@@ -180,6 +180,7 @@ PacketSet ServerManager::packetParser(Packet Packet) {
|
||||
}
|
||||
|
||||
void ServerManager::processLoginRequestPacket(LoginRequestPacket loginRequestPacket, Chattr::IOCPPASSINDATA* data) {
|
||||
std::unique_lock<std::mutex> lock(resourceMutex_);
|
||||
std::string userName(
|
||||
(char*)loginRequestPacket.__data.data,
|
||||
loginRequestPacket.__data.packetLength);
|
||||
@@ -216,6 +217,7 @@ void ServerManager::processLoginRequestPacket(LoginRequestPacket loginRequestPac
|
||||
}
|
||||
|
||||
void ServerManager::processRoomCreateRequestPacket(RoomCreateRequestPacket roomCreateRequestPacket, Chattr::IOCPPASSINDATA* data) {
|
||||
std::unique_lock<std::mutex> lock(resourceMutex_);
|
||||
std::string roomName(
|
||||
(char*)roomCreateRequestPacket.__data.data,
|
||||
roomCreateRequestPacket.__data.packetLength);
|
||||
@@ -237,6 +239,7 @@ void ServerManager::processRoomCreateRequestPacket(RoomCreateRequestPacket roomC
|
||||
}
|
||||
|
||||
void ServerManager::processRoomListRequest(RoomListRequestPacket roomListRequestPacket, Chattr::IOCPPASSINDATA* data) {
|
||||
std::unique_lock<std::mutex> lock(resourceMutex_);
|
||||
auto roomsList = getRoomList();
|
||||
|
||||
for (auto room : roomsList) {
|
||||
@@ -267,6 +270,7 @@ void ServerManager::processRoomListRequest(RoomListRequestPacket roomListRequest
|
||||
}
|
||||
|
||||
void ServerManager::processRoomJoinRequestPacket(RoomJoinRequestPacket roomJoinRequestPacket, Chattr::IOCPPASSINDATA* data) {
|
||||
std::unique_lock<std::mutex> lock(resourceMutex_);
|
||||
Snowflake myID, roomID;
|
||||
::memcpy(&myID.snowflake, roomJoinRequestPacket.__data.myId, sizeof(Snowflake));
|
||||
::memcpy(&roomID.snowflake, roomJoinRequestPacket.__data.roomId, sizeof(Snowflake));
|
||||
@@ -290,6 +294,7 @@ void ServerManager::processRoomJoinRequestPacket(RoomJoinRequestPacket roomJoinR
|
||||
}
|
||||
|
||||
void ServerManager::processRoomExitRequestPacket(RoomExitRequestPacket roomExitRequestPacket, Chattr::IOCPPASSINDATA* data) {
|
||||
std::unique_lock<std::mutex> lock(resourceMutex_);
|
||||
Snowflake myID, roomID;
|
||||
::memcpy(&myID.snowflake, roomExitRequestPacket.__data.myId, sizeof(Snowflake));
|
||||
::memcpy(&roomID.snowflake, roomExitRequestPacket.__data.roomId, sizeof(Snowflake));
|
||||
@@ -313,6 +318,7 @@ void ServerManager::processRoomExitRequestPacket(RoomExitRequestPacket roomExitR
|
||||
}
|
||||
|
||||
void ServerManager::processUsersListRequestPacket(UsersListRequestPacket usersListRequestPacket, Chattr::IOCPPASSINDATA* data) {
|
||||
std::unique_lock<std::mutex> lock(resourceMutex_);
|
||||
auto usersList = getUserList();
|
||||
|
||||
for (auto user : usersList) {
|
||||
@@ -343,6 +349,7 @@ void ServerManager::processUsersListRequestPacket(UsersListRequestPacket usersLi
|
||||
}
|
||||
|
||||
void ServerManager::processDataPostPacket(DataPostPacket dataPostPacket, IOCPPASSINDATA* data) {
|
||||
std::unique_lock<std::mutex> lock(resourceMutex_);
|
||||
Snowflake destID;
|
||||
::memcpy(&destID.snowflake, dataPostPacket.__data.destId, sizeof(Snowflake));
|
||||
|
||||
@@ -391,6 +398,7 @@ void ServerManager::processDataPostPacket(DataPostPacket dataPostPacket, IOCPPAS
|
||||
}
|
||||
|
||||
void ServerManager::processContinuePacket(ContinuePacket continuePacket, IOCPPASSINDATA* data) {
|
||||
std::unique_lock<std::mutex> lock(resourceMutex_);
|
||||
Snowflake destID;
|
||||
::memcpy(&destID.snowflake, continuePacket.__data.destId, sizeof(Snowflake));
|
||||
|
||||
@@ -439,7 +447,6 @@ void ServerManager::processContinuePacket(ContinuePacket continuePacket, IOCPPAS
|
||||
}
|
||||
|
||||
bool ServerManager::registerUser(std::string userName, std::shared_ptr<TCPSocket> sock) {
|
||||
std::lock_guard<std::mutex> lock(resourceMutex_);
|
||||
if (userName2ID_.find(userName) != userName2ID_.end()) {
|
||||
return false;
|
||||
}
|
||||
@@ -452,7 +459,6 @@ bool ServerManager::registerUser(std::string userName, std::shared_ptr<TCPSocket
|
||||
}
|
||||
|
||||
void ServerManager::deleteUser(Snowflake UID) {
|
||||
std::lock_guard<std::mutex> lock(resourceMutex_);
|
||||
userNames_.erase(UID);
|
||||
std::shared_ptr<TCPSocket> sock = UID2userSocket_[UID];
|
||||
UID2userSocket_.erase(UID);
|
||||
@@ -460,7 +466,6 @@ void ServerManager::deleteUser(Snowflake UID) {
|
||||
}
|
||||
|
||||
std::vector<std::pair<Snowflake, std::string>> ServerManager::getUserList() {
|
||||
std::lock_guard<std::mutex> lock(resourceMutex_);
|
||||
std::vector<std::pair<Snowflake, std::string>> userList;
|
||||
userList.reserve(userNames_.size());
|
||||
|
||||
@@ -471,7 +476,6 @@ std::vector<std::pair<Snowflake, std::string>> ServerManager::getUserList() {
|
||||
}
|
||||
|
||||
Snowflake ServerManager::createRoom(std::string roomName) {
|
||||
std::lock_guard<std::mutex> lock(resourceMutex_);
|
||||
Snowflake RID = GenerateID();
|
||||
roomNames_[RID] = roomName;
|
||||
rooms_[RID] = std::unordered_map<Snowflake, std::shared_ptr<TCPSocket>>();
|
||||
@@ -479,13 +483,11 @@ Snowflake ServerManager::createRoom(std::string roomName) {
|
||||
}
|
||||
|
||||
void ServerManager::deleteRoom(Snowflake RID) {
|
||||
std::lock_guard<std::mutex> lock(resourceMutex_);
|
||||
roomNames_.erase(RID);
|
||||
rooms_.erase(RID);
|
||||
}
|
||||
|
||||
std::vector<std::pair<Snowflake, std::string>> ServerManager::getRoomList() {
|
||||
std::lock_guard<std::mutex> lock(resourceMutex_);
|
||||
std::vector<std::pair<Snowflake, std::string>> roomList;
|
||||
roomList.reserve(roomNames_.size());
|
||||
|
||||
@@ -496,13 +498,11 @@ std::vector<std::pair<Snowflake, std::string>> ServerManager::getRoomList() {
|
||||
}
|
||||
|
||||
void ServerManager::joinRoom(Snowflake UID, Snowflake RID) {
|
||||
std::lock_guard<std::mutex> lock(resourceMutex_);
|
||||
std::shared_ptr<TCPSocket> sock = UID2userSocket_[UID];
|
||||
rooms_[RID][UID] = sock;
|
||||
}
|
||||
|
||||
void ServerManager::exitRoom(Snowflake UID, Snowflake RID) {
|
||||
std::lock_guard<std::mutex> lock(resourceMutex_);
|
||||
rooms_[RID].erase(UID);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user