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

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) { void ServerManager::processLoginRequestPacket(LoginRequestPacket loginRequestPacket, Chattr::IOCPPASSINDATA* data) {
std::unique_lock<std::mutex> lock(resourceMutex_);
std::string userName( std::string userName(
(char*)loginRequestPacket.__data.data, (char*)loginRequestPacket.__data.data,
loginRequestPacket.__data.packetLength); loginRequestPacket.__data.packetLength);
@@ -216,6 +217,7 @@ void ServerManager::processLoginRequestPacket(LoginRequestPacket loginRequestPac
} }
void ServerManager::processRoomCreateRequestPacket(RoomCreateRequestPacket roomCreateRequestPacket, Chattr::IOCPPASSINDATA* data) { void ServerManager::processRoomCreateRequestPacket(RoomCreateRequestPacket roomCreateRequestPacket, Chattr::IOCPPASSINDATA* data) {
std::unique_lock<std::mutex> lock(resourceMutex_);
std::string roomName( std::string roomName(
(char*)roomCreateRequestPacket.__data.data, (char*)roomCreateRequestPacket.__data.data,
roomCreateRequestPacket.__data.packetLength); roomCreateRequestPacket.__data.packetLength);
@@ -237,6 +239,7 @@ void ServerManager::processRoomCreateRequestPacket(RoomCreateRequestPacket roomC
} }
void ServerManager::processRoomListRequest(RoomListRequestPacket roomListRequestPacket, Chattr::IOCPPASSINDATA* data) { void ServerManager::processRoomListRequest(RoomListRequestPacket roomListRequestPacket, Chattr::IOCPPASSINDATA* data) {
std::unique_lock<std::mutex> lock(resourceMutex_);
auto roomsList = getRoomList(); auto roomsList = getRoomList();
for (auto room : roomsList) { for (auto room : roomsList) {
@@ -267,6 +270,7 @@ void ServerManager::processRoomListRequest(RoomListRequestPacket roomListRequest
} }
void ServerManager::processRoomJoinRequestPacket(RoomJoinRequestPacket roomJoinRequestPacket, Chattr::IOCPPASSINDATA* data) { void ServerManager::processRoomJoinRequestPacket(RoomJoinRequestPacket roomJoinRequestPacket, Chattr::IOCPPASSINDATA* data) {
std::unique_lock<std::mutex> lock(resourceMutex_);
Snowflake myID, roomID; Snowflake myID, roomID;
::memcpy(&myID.snowflake, roomJoinRequestPacket.__data.myId, sizeof(Snowflake)); ::memcpy(&myID.snowflake, roomJoinRequestPacket.__data.myId, sizeof(Snowflake));
::memcpy(&roomID.snowflake, roomJoinRequestPacket.__data.roomId, 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) { void ServerManager::processRoomExitRequestPacket(RoomExitRequestPacket roomExitRequestPacket, Chattr::IOCPPASSINDATA* data) {
std::unique_lock<std::mutex> lock(resourceMutex_);
Snowflake myID, roomID; Snowflake myID, roomID;
::memcpy(&myID.snowflake, roomExitRequestPacket.__data.myId, sizeof(Snowflake)); ::memcpy(&myID.snowflake, roomExitRequestPacket.__data.myId, sizeof(Snowflake));
::memcpy(&roomID.snowflake, roomExitRequestPacket.__data.roomId, 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) { void ServerManager::processUsersListRequestPacket(UsersListRequestPacket usersListRequestPacket, Chattr::IOCPPASSINDATA* data) {
std::unique_lock<std::mutex> lock(resourceMutex_);
auto usersList = getUserList(); auto usersList = getUserList();
for (auto user : usersList) { for (auto user : usersList) {
@@ -343,6 +349,7 @@ void ServerManager::processUsersListRequestPacket(UsersListRequestPacket usersLi
} }
void ServerManager::processDataPostPacket(DataPostPacket dataPostPacket, IOCPPASSINDATA* data) { void ServerManager::processDataPostPacket(DataPostPacket dataPostPacket, IOCPPASSINDATA* data) {
std::unique_lock<std::mutex> lock(resourceMutex_);
Snowflake destID; Snowflake destID;
::memcpy(&destID.snowflake, dataPostPacket.__data.destId, sizeof(Snowflake)); ::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) { void ServerManager::processContinuePacket(ContinuePacket continuePacket, IOCPPASSINDATA* data) {
std::unique_lock<std::mutex> lock(resourceMutex_);
Snowflake destID; Snowflake destID;
::memcpy(&destID.snowflake, continuePacket.__data.destId, sizeof(Snowflake)); ::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) { bool ServerManager::registerUser(std::string userName, std::shared_ptr<TCPSocket> sock) {
std::lock_guard<std::mutex> lock(resourceMutex_);
if (userName2ID_.find(userName) != userName2ID_.end()) { if (userName2ID_.find(userName) != userName2ID_.end()) {
return false; return false;
} }
@@ -452,7 +459,6 @@ bool ServerManager::registerUser(std::string userName, std::shared_ptr<TCPSocket
} }
void ServerManager::deleteUser(Snowflake UID) { void ServerManager::deleteUser(Snowflake UID) {
std::lock_guard<std::mutex> lock(resourceMutex_);
userNames_.erase(UID); userNames_.erase(UID);
std::shared_ptr<TCPSocket> sock = UID2userSocket_[UID]; std::shared_ptr<TCPSocket> sock = UID2userSocket_[UID];
UID2userSocket_.erase(UID); UID2userSocket_.erase(UID);
@@ -460,7 +466,6 @@ void ServerManager::deleteUser(Snowflake UID) {
} }
std::vector<std::pair<Snowflake, std::string>> ServerManager::getUserList() { std::vector<std::pair<Snowflake, std::string>> ServerManager::getUserList() {
std::lock_guard<std::mutex> lock(resourceMutex_);
std::vector<std::pair<Snowflake, std::string>> userList; std::vector<std::pair<Snowflake, std::string>> userList;
userList.reserve(userNames_.size()); userList.reserve(userNames_.size());
@@ -471,7 +476,6 @@ std::vector<std::pair<Snowflake, std::string>> ServerManager::getUserList() {
} }
Snowflake ServerManager::createRoom(std::string roomName) { Snowflake ServerManager::createRoom(std::string roomName) {
std::lock_guard<std::mutex> lock(resourceMutex_);
Snowflake RID = GenerateID(); Snowflake RID = GenerateID();
roomNames_[RID] = roomName; roomNames_[RID] = roomName;
rooms_[RID] = std::unordered_map<Snowflake, std::shared_ptr<TCPSocket>>(); 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) { void ServerManager::deleteRoom(Snowflake RID) {
std::lock_guard<std::mutex> lock(resourceMutex_);
roomNames_.erase(RID); roomNames_.erase(RID);
rooms_.erase(RID); rooms_.erase(RID);
} }
std::vector<std::pair<Snowflake, std::string>> ServerManager::getRoomList() { std::vector<std::pair<Snowflake, std::string>> ServerManager::getRoomList() {
std::lock_guard<std::mutex> lock(resourceMutex_);
std::vector<std::pair<Snowflake, std::string>> roomList; std::vector<std::pair<Snowflake, std::string>> roomList;
roomList.reserve(roomNames_.size()); roomList.reserve(roomNames_.size());
@@ -496,13 +498,11 @@ std::vector<std::pair<Snowflake, std::string>> ServerManager::getRoomList() {
} }
void ServerManager::joinRoom(Snowflake UID, Snowflake RID) { void ServerManager::joinRoom(Snowflake UID, Snowflake RID) {
std::lock_guard<std::mutex> lock(resourceMutex_);
std::shared_ptr<TCPSocket> sock = UID2userSocket_[UID]; std::shared_ptr<TCPSocket> sock = UID2userSocket_[UID];
rooms_[RID][UID] = sock; rooms_[RID][UID] = sock;
} }
void ServerManager::exitRoom(Snowflake UID, Snowflake RID) { void ServerManager::exitRoom(Snowflake UID, Snowflake RID) {
std::lock_guard<std::mutex> lock(resourceMutex_);
rooms_[RID].erase(UID); rooms_[RID].erase(UID);
} }