일단 동기화

This commit is contained in:
2025-05-07 16:52:45 +09:00
parent 993d41736d
commit 46abb2b2b9
3 changed files with 22 additions and 2 deletions

View File

@@ -14,6 +14,11 @@ public:
template<typename _Callable>
void init(_Callable _IOCPClient) {
roomNames_ = std::future<std::unordered_map<Snowflake, std::string>>();
findRoomId_ = std::future<std::unordered_map<std::string, Snowflake>>();
userNames_ = std::future<std::unordered_map<Snowflake, std::string>>();
findUserId_ = std::future<std::unordered_map<std::string, Snowflake>>();
auto config = ConfigManager::load();
log::setDefaultLogger(config.logLevel, config.logFileName, config.logfileSize, config.logfileCount);
threadPool_.init(0);

View File

@@ -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<ResponsePacket>();
auto promise = std::promise<ResponsePacket>();
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<Snowflake, std::string> 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<Snowflake, std::string>();
auto promise = std::promise<std::unordered_map<Snowflake, std::string>>();
userNames_ = promise.get_future();

View File

@@ -11,6 +11,7 @@ int main() {
Chattr::ClientManager client;
client.init();
client.run();
return 0;
Chattr::TCPSocket sock;
sock.init(AF_INET6);