diff --git a/Client/include/ClientManager/ClientManager.hpp b/Client/include/ClientManager/ClientManager.hpp index 4ecf85b..5f8228e 100644 --- a/Client/include/ClientManager/ClientManager.hpp +++ b/Client/include/ClientManager/ClientManager.hpp @@ -53,6 +53,7 @@ public: } void processresponsePacket(ResponsePacket responsePacket, IOCPPASSINDATA* data); + void processLoginResponsePacket(LoginResponsePacket loginResponsePacket, IOCPPASSINDATA* data); void processRoomCreateResponsePacket(RoomCreateResponsePacket roomCreateResponsePacket, IOCPPASSINDATA* data); void processRoomListResponse(RoomListResponsePacket roomListResponsePacket, IOCPPASSINDATA* data); void processRoomJoinResponsePacket(RoomJoinResponsePacket roomJoinResponsePacket, IOCPPASSINDATA* data); diff --git a/Client/src/ClientManager/ClientManager.cpp b/Client/src/ClientManager/ClientManager.cpp index c904a50..fb31d15 100644 --- a/Client/src/ClientManager/ClientManager.cpp +++ b/Client/src/ClientManager/ClientManager.cpp @@ -31,7 +31,13 @@ void ClientManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA PacketSet packetSet = packetParser(pack); pack.convToN(); switch (packetSet) { - case PacketSet::LOGINRESPONSE: + case PacketSet::LOGINRESPONSE: { + LoginResponsePacket loginResponsePacket; + std::memcpy(&loginResponsePacket.serialized, &pack.serialized, 8 + packetLength); + loginResponsePacket.convToH(); + processLoginResponsePacket(loginResponsePacket, data); + } + break; case PacketSet::ROOMCREATERESPONSE: case PacketSet::ROOMLISTRESPONSE: case PacketSet::ROOMJOINRESPONSE: @@ -152,6 +158,11 @@ void ClientManager::processresponsePacket(ResponsePacket responsePacket, IOCPPAS // data->IOCPInstance->send(data, 1, 0); } + +void ClientManager::processLoginResponsePacket(LoginResponsePacket loginResponsePacket, IOCPPASSINDATA* data) { + ::memcpy(&myID_.snowflake, loginResponsePacket.__data.yourId, sizeof(Snowflake)); +} + void ClientManager::processRoomCreateResponsePacket(RoomCreateResponsePacket roomCreateResponsePacket, Chattr::IOCPPASSINDATA* data) { // std::string roomName( // (char*)roomCreateResponsePacket.__data.data, diff --git a/impl/Utils/GenerateID.cpp b/impl/Utils/GenerateID.cpp index de82d3d..445adf4 100644 --- a/impl/Utils/GenerateID.cpp +++ b/impl/Utils/GenerateID.cpp @@ -3,25 +3,28 @@ namespace Chattr { Snowflake GenerateID() { - static struct _EPOCH { - _EPOCH() { + static struct EpochInitializer { + EpochInitializer() { EPOCH = std::chrono::system_clock::now(); } std::chrono::system_clock::time_point EPOCH; - } __EPOCH__; + } epochInitializer; static std::mutex snowflakeGenerateMutex_; std::lock_guard lock(snowflakeGenerateMutex_); -#ifdef _WIN32 - DWORD tid = GetCurrentThreadId(); -#elif __linux__ - pthread_t tid = pthread_self(); -#endif - static int sequence = 0; + + std::size_t tid; + #ifdef _WIN32 + tid = static_cast(GetCurrentThreadId()); + #elif __linux__ + tid = static_cast(pthread_self()); + #endif + + thread_local static int sequence = 0; Snowflake id = {}; - auto timestamp = std::chrono::duration_cast(std::chrono::system_clock::now() - __EPOCH__.EPOCH); + auto timestamp = std::chrono::duration_cast(std::chrono::system_clock::now() - epochInitializer.EPOCH); id.timestamp = timestamp.count(); id.instance = tid; id.sequence = sequence++;