From 46abb2b2b95332539032997a7f1c86c8f902c418 Mon Sep 17 00:00:00 2001 From: HappyTanuki Date: Wed, 7 May 2025 16:52:45 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=BC=EB=8B=A8=20=EB=8F=99=EA=B8=B0?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Client/include/ClientManager/ClientManager.hpp | 5 +++++ Client/src/ClientManager/ClientManager.cpp | 18 ++++++++++++++++-- Client/src/client.cpp | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Client/include/ClientManager/ClientManager.hpp b/Client/include/ClientManager/ClientManager.hpp index 776bbda..02609b1 100644 --- a/Client/include/ClientManager/ClientManager.hpp +++ b/Client/include/ClientManager/ClientManager.hpp @@ -14,6 +14,11 @@ public: template void init(_Callable _IOCPClient) { + roomNames_ = std::future>(); + findRoomId_ = std::future>(); + userNames_ = std::future>(); + findUserId_ = std::future>(); + auto config = ConfigManager::load(); log::setDefaultLogger(config.logLevel, config.logFileName, config.logfileSize, config.logfileCount); threadPool_.init(0); diff --git a/Client/src/ClientManager/ClientManager.cpp b/Client/src/ClientManager/ClientManager.cpp index 11dff29..85ec5bf 100644 --- a/Client/src/ClientManager/ClientManager.cpp +++ b/Client/src/ClientManager/ClientManager.cpp @@ -48,7 +48,17 @@ void ClientManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA case PacketSet::ROOMLISTRESPONSE: case PacketSet::ROOMJOINRESPONSE: case PacketSet::ROOMEXITRESPONSE: - case PacketSet::USERSLISTRESPONSE: + case PacketSet::USERSLISTRESPONSE: { + UsersListResponsePacket usersListResponsePacket; + std::memcpy(&usersListResponsePacket.serialized, &pack.serialized, 8 + packetLength); + usersListResponsePacket.convToH(); + + lastResponsePacket_ = std::future(); + auto promise = std::promise(); + lastResponsePacket_ = promise.get_future(); + promise.set_value(usersListResponsePacket); + processUsersListResponsePacket(usersListResponsePacket, data); + } case PacketSet::RESPONSE: { ResponsePacket responsePacket; std::memcpy(&responsePacket.serialized, &pack.serialized, 8 + packetLength); @@ -81,6 +91,8 @@ void ClientManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA } break; } + + iocp_.recv(data_, 1); } PacketSet ClientManager::packetParser(Packet Packet) { @@ -171,8 +183,10 @@ void ClientManager::processRoomExitResponsePacket(RoomExitResponsePacket roomExi void ClientManager::processUsersListResponsePacket(UsersListResponsePacket usersListResponsePacket, Chattr::IOCPPASSINDATA* data) { std::unordered_map userNames; - if (userNames_.wait_for(std::chrono::seconds(0)) == std::future_status::ready) + if (userNames_.valid() && userNames_.wait_for(std::chrono::seconds(0)) == std::future_status::ready) userNames = userNames_.get(); + else + userNames = std::unordered_map(); auto promise = std::promise>(); userNames_ = promise.get_future(); diff --git a/Client/src/client.cpp b/Client/src/client.cpp index 5a15b63..3ef2554 100644 --- a/Client/src/client.cpp +++ b/Client/src/client.cpp @@ -11,6 +11,7 @@ int main() { Chattr::ClientManager client; client.init(); client.run(); + return 0; Chattr::TCPSocket sock; sock.init(AF_INET6);