일단 동기화
This commit is contained in:
@@ -14,6 +14,11 @@ public:
|
|||||||
|
|
||||||
template<typename _Callable>
|
template<typename _Callable>
|
||||||
void init(_Callable _IOCPClient) {
|
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();
|
auto config = ConfigManager::load();
|
||||||
log::setDefaultLogger(config.logLevel, config.logFileName, config.logfileSize, config.logfileCount);
|
log::setDefaultLogger(config.logLevel, config.logFileName, config.logfileSize, config.logfileCount);
|
||||||
threadPool_.init(0);
|
threadPool_.init(0);
|
||||||
|
|||||||
@@ -48,7 +48,17 @@ void ClientManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
|
|||||||
case PacketSet::ROOMLISTRESPONSE:
|
case PacketSet::ROOMLISTRESPONSE:
|
||||||
case PacketSet::ROOMJOINRESPONSE:
|
case PacketSet::ROOMJOINRESPONSE:
|
||||||
case PacketSet::ROOMEXITRESPONSE:
|
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: {
|
case PacketSet::RESPONSE: {
|
||||||
ResponsePacket responsePacket;
|
ResponsePacket responsePacket;
|
||||||
std::memcpy(&responsePacket.serialized, &pack.serialized, 8 + packetLength);
|
std::memcpy(&responsePacket.serialized, &pack.serialized, 8 + packetLength);
|
||||||
@@ -81,6 +91,8 @@ void ClientManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
iocp_.recv(data_, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketSet ClientManager::packetParser(Packet Packet) {
|
PacketSet ClientManager::packetParser(Packet Packet) {
|
||||||
@@ -171,8 +183,10 @@ void ClientManager::processRoomExitResponsePacket(RoomExitResponsePacket roomExi
|
|||||||
void ClientManager::processUsersListResponsePacket(UsersListResponsePacket usersListResponsePacket, Chattr::IOCPPASSINDATA* data) {
|
void ClientManager::processUsersListResponsePacket(UsersListResponsePacket usersListResponsePacket, Chattr::IOCPPASSINDATA* data) {
|
||||||
std::unordered_map<Snowflake, std::string> userNames;
|
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();
|
userNames = userNames_.get();
|
||||||
|
else
|
||||||
|
userNames = std::unordered_map<Snowflake, std::string>();
|
||||||
|
|
||||||
auto promise = std::promise<std::unordered_map<Snowflake, std::string>>();
|
auto promise = std::promise<std::unordered_map<Snowflake, std::string>>();
|
||||||
userNames_ = promise.get_future();
|
userNames_ = promise.get_future();
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ int main() {
|
|||||||
Chattr::ClientManager client;
|
Chattr::ClientManager client;
|
||||||
client.init();
|
client.init();
|
||||||
client.run();
|
client.run();
|
||||||
|
return 0;
|
||||||
|
|
||||||
Chattr::TCPSocket sock;
|
Chattr::TCPSocket sock;
|
||||||
sock.init(AF_INET6);
|
sock.init(AF_INET6);
|
||||||
|
|||||||
Reference in New Issue
Block a user