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