일단 동기화
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -11,6 +11,7 @@ int main() {
|
||||
Chattr::ClientManager client;
|
||||
client.init();
|
||||
client.run();
|
||||
return 0;
|
||||
|
||||
Chattr::TCPSocket sock;
|
||||
sock.init(AF_INET6);
|
||||
|
||||
Reference in New Issue
Block a user