From be6ea6e92f758faa6cdb1388d251029f93de5899 Mon Sep 17 00:00:00 2001 From: HappyTanuki Date: Sat, 10 May 2025 00:08:59 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=BC=EB=8B=A8=20=ED=81=B4=EB=9D=BC?= =?UTF-8?q?=EC=9D=B4=EC=96=B8=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=B1=84?= =?UTF-8?q?=EC=9B=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../include/ClientManager/ClientManager.hpp | 1 - Client/src/ClientManager/ClientManager.cpp | 68 ++++++++++++++++++- .../include/ServerManager/ServerManager.hpp | 4 +- Server/src/ServerManager/ServerManager.cpp | 6 +- 4 files changed, 73 insertions(+), 6 deletions(-) diff --git a/Client/include/ClientManager/ClientManager.hpp b/Client/include/ClientManager/ClientManager.hpp index 3b4123b..10e52da 100644 --- a/Client/include/ClientManager/ClientManager.hpp +++ b/Client/include/ClientManager/ClientManager.hpp @@ -69,7 +69,6 @@ public: void getUserList(); void createRoom(std::string roomName); - void deleteRoom(Snowflake RID); void getRoomList(); void joinRoom(Snowflake UID, Snowflake RID); diff --git a/Client/src/ClientManager/ClientManager.cpp b/Client/src/ClientManager/ClientManager.cpp index 9cf0a93..faa9c67 100644 --- a/Client/src/ClientManager/ClientManager.cpp +++ b/Client/src/ClientManager/ClientManager.cpp @@ -267,18 +267,82 @@ void ClientManager::getUserList() { } void ClientManager::createRoom(std::string roomName) { -} + RoomCreateRequestPacket roomCreateRequestPacket; + roomCreateRequestPacket.__data.packetType = PacketCategory::PACKET_REQUEST; + roomCreateRequestPacket.__data.requestType = RequestType::ROOM_CREATE; + roomCreateRequestPacket.__data.dataType = DataType::BINARY; + roomCreateRequestPacket.__data.packetLength = roomName.size(); + memcpy(roomCreateRequestPacket.__data.data, roomName.c_str(), roomName.size()); -void ClientManager::deleteRoom(Snowflake RID) { + int packetLength = roomCreateRequestPacket.__data.packetLength; + + data_->recvbytes = data_->sendbytes = 0; + data_->transferredbytes = 0; + data_->wsabuf.len = packetLength + 8; + + roomCreateRequestPacket.convToN(); + memcpy(data_->wsabuf.buf, roomCreateRequestPacket.serialized, packetLength + 8); + iocp_.send(data_, 1, 0, true); } void ClientManager::getRoomList() { + RoomListRequestPacket roomListRequestPacket; + roomListRequestPacket.__data.packetType = PacketCategory::PACKET_REQUEST; + roomListRequestPacket.__data.requestType = RequestType::ROOM_LIST; + roomListRequestPacket.__data.dataType = DataType::BINARY; + roomListRequestPacket.__data.packetLength = 0; + + int packetLength = roomListRequestPacket.__data.packetLength; + + data_->recvbytes = data_->sendbytes = 0; + data_->transferredbytes = 0; + data_->wsabuf.len = packetLength + 8; + + roomListRequestPacket.convToN(); + memcpy(data_->wsabuf.buf, roomListRequestPacket.serialized, packetLength + 8); + iocp_.send(data_, 1, 0, true); } void ClientManager::joinRoom(Snowflake UID, Snowflake RID) { + RoomJoinRequestPacket roomJoinRequestPacket; + roomJoinRequestPacket.__data.packetType = PacketCategory::PACKET_REQUEST; + roomJoinRequestPacket.__data.requestType = RequestType::ROOM_JOIN; + roomJoinRequestPacket.__data.dataType = DataType::BINARY; + roomJoinRequestPacket.__data.packetLength = sizeof(Snowflake) * 2; + memcpy(roomJoinRequestPacket.__data.myId, &UID.snowflake, sizeof(Snowflake)); + memcpy(roomJoinRequestPacket.__data.roomId, &RID.snowflake, sizeof(Snowflake)); + + int packetLength = roomJoinRequestPacket.__data.packetLength; + + data_->recvbytes = data_->sendbytes = 0; + data_->transferredbytes = 0; + data_->wsabuf.len = packetLength + 8; + roomJoinRequestPacket.convToN(); + memcpy(data_->wsabuf.buf, roomJoinRequestPacket.serialized, packetLength + 8); + iocp_.send(data_, 1, 0, true); + inRoom_ = true; + myRoomID_ = RID; } void ClientManager::exitRoom(Snowflake UID, Snowflake RID) { + RoomExitRequestPacket roomExitRequestPacket; + roomExitRequestPacket.__data.packetType = PacketCategory::PACKET_REQUEST; + roomExitRequestPacket.__data.requestType = RequestType::ROOM_EXIT; + roomExitRequestPacket.__data.dataType = DataType::BINARY; + roomExitRequestPacket.__data.packetLength = sizeof(Snowflake) * 2; + memcpy(roomExitRequestPacket.__data.myId, &UID.snowflake, sizeof(Snowflake)); + memcpy(roomExitRequestPacket.__data.roomId, &RID.snowflake, sizeof(Snowflake)); + + int packetLength = roomExitRequestPacket.__data.packetLength; + + data_->recvbytes = data_->sendbytes = 0; + data_->transferredbytes = 0; + data_->wsabuf.len = packetLength + 8; + + roomExitRequestPacket.convToN(); + memcpy(data_->wsabuf.buf, roomExitRequestPacket.serialized, packetLength + 8); + iocp_.send(data_, 1, 0, true); + inRoom_ = false; } void ClientManager::run() { diff --git a/Server/include/ServerManager/ServerManager.hpp b/Server/include/ServerManager/ServerManager.hpp index 0ef0e93..e3fd8ca 100644 --- a/Server/include/ServerManager/ServerManager.hpp +++ b/Server/include/ServerManager/ServerManager.hpp @@ -51,7 +51,7 @@ public: void processDataPostPacket(DataPostPacket dataPostPacket, IOCPPASSINDATA* data); void processContinuePacket(ContinuePacket continuePacket, IOCPPASSINDATA* data); - void registerUser(std::string userName, std::shared_ptr sock); + bool registerUser(std::string userName, std::shared_ptr sock); void deleteUser(Snowflake UID); std::vector> getUserList(); @@ -82,7 +82,7 @@ private: std::unordered_map, Snowflake> userSocket2UID_; std::unordered_map userNames_; - + std::unordered_map userName2ID_; }; diff --git a/Server/src/ServerManager/ServerManager.cpp b/Server/src/ServerManager/ServerManager.cpp index 6456cca..ae139cb 100644 --- a/Server/src/ServerManager/ServerManager.cpp +++ b/Server/src/ServerManager/ServerManager.cpp @@ -418,10 +418,14 @@ void ServerManager::processContinuePacket(ContinuePacket continuePacket, IOCPPAS } } -void ServerManager::registerUser(std::string userName, std::shared_ptr sock) { +bool ServerManager::registerUser(std::string userName, std::shared_ptr sock) { std::lock_guard lock(resourceMutex_); + if (userName2ID_.find(userName) != userName2ID_.end()) { + return false; + } Snowflake UID = GenerateID(); userNames_[UID] = userName; + userName2ID_[userName] = UID; UID2userSocket_[UID] = sock; userSocket2UID_[sock] = UID; }