뮤텍스 범위(임계 영역) 재설정.

This commit is contained in:
2025-05-10 02:04:11 +09:00
parent 65b7aa8f6e
commit 25527405d5

View File

@@ -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);
}