snowflake id가 이상하게 생성되는 문제 해결결
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<std::mutex> lock(snowflakeGenerateMutex_);
|
||||
|
||||
std::size_t tid;
|
||||
#ifdef _WIN32
|
||||
DWORD tid = GetCurrentThreadId();
|
||||
tid = static_cast<std::size_t>(GetCurrentThreadId());
|
||||
#elif __linux__
|
||||
pthread_t tid = pthread_self();
|
||||
tid = static_cast<std::size_t>(pthread_self());
|
||||
#endif
|
||||
static int sequence = 0;
|
||||
|
||||
thread_local static int sequence = 0;
|
||||
Snowflake id = {};
|
||||
|
||||
auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - __EPOCH__.EPOCH);
|
||||
auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - epochInitializer.EPOCH);
|
||||
id.timestamp = timestamp.count();
|
||||
id.instance = tid;
|
||||
id.sequence = sequence++;
|
||||
|
||||
Reference in New Issue
Block a user