자잘한 버그 픽스

This commit is contained in:
2025-05-03 18:55:13 +09:00
parent 6ad787eed7
commit 4e03b84b1d
4 changed files with 54 additions and 7 deletions

View File

@@ -88,6 +88,4 @@ int main() {
Chattr::ResponsePacket packet; Chattr::ResponsePacket packet;
sock.recv(&packet.serialized, 10, 0); sock.recv(&packet.serialized, 10, 0);
packet.convToH(); packet.convToH();
sleep(1000000);
} }

View File

@@ -30,7 +30,7 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
case PacketSet::LOGINREQUEST: { case PacketSet::LOGINREQUEST: {
pack.convToN(); pack.convToN();
LoginRequestPacket loginRequestPacket; LoginRequestPacket loginRequestPacket;
std::memcpy(&loginRequestPacket.serialized, &pack, 8 + pack.__data.packetLength); std::memcpy(&loginRequestPacket.serialized, &pack, 8 + packetLength);
loginRequestPacket.convToH(); loginRequestPacket.convToH();
std::string userName( std::string userName(
@@ -44,12 +44,14 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
loginResponsePacket.__data.dataType = Chattr::DataType::TEXT; loginResponsePacket.__data.dataType = Chattr::DataType::TEXT;
loginResponsePacket.__data.packetLength = sizeof(Chattr::ResponseStatusCode) + sizeof(Snowflake); loginResponsePacket.__data.packetLength = sizeof(Chattr::ResponseStatusCode) + sizeof(Snowflake);
loginResponsePacket.__data.responseStatusCode = Chattr::ResponseStatusCode::OK; loginResponsePacket.__data.responseStatusCode = Chattr::ResponseStatusCode::OK;
::memcpy(loginResponsePacket.__data.yourId, &userSocket2UID_[data->socket], sizeof(Snowflake)); Snowflake yourId = userSocket2UID_[data->socket];
::memcpy(loginResponsePacket.__data.yourId, &yourId, sizeof(Snowflake));
loginResponsePacket.convToN(); loginResponsePacket.convToN();
memcpy(data->wsabuf.buf, loginResponsePacket.serialized, 16); memcpy(data->wsabuf.buf, loginResponsePacket.serialized, 16);
data->sendbytes = 16; data->sendbytes = 16;
data->transferredbytes = 16; data->transferredbytes = 16;
data->wsabuf.len = 16;
data->IOCPInstance->send(data, 1, 0); data->IOCPInstance->send(data, 1, 0);
} }
break; break;
@@ -61,11 +63,47 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
break; break;
case PacketSet::ROOMEXITREQUEST: case PacketSet::ROOMEXITREQUEST:
break; break;
case PacketSet::USERSLISTREQUEST: case PacketSet::USERSLISTREQUEST: {
pack.convToN();
UsersListRequestPacket usersListRequestPacket;
std::memcpy(&usersListRequestPacket.serialized, &pack, 8 + packetLength);
usersListRequestPacket.convToH();
auto usersList = getUserList();
for (auto user : usersList) {
UsersListResponsePacket usersListResponsePacket;
usersListResponsePacket.__data.packetType = Chattr::PacketCategory::PACKET_RESPONSE;
usersListResponsePacket.__data.requestType = Chattr::RequestType::USERS_LIST;
usersListResponsePacket.__data.dataType = Chattr::DataType::BINARY;
usersListResponsePacket.__data.packetLength = sizeof(Chattr::ResponseStatusCode) + sizeof(std::uint32_t) + sizeof(Snowflake) + user.second.size();
usersListResponsePacket.__data.responseStatusCode = Chattr::ResponseStatusCode::OK;
usersListResponsePacket.__data.usersCount = usersList.size();
::memcpy(usersListResponsePacket.__data.userId, &user.first, sizeof(Snowflake));
::memcpy(usersListResponsePacket.__data.name, user.second.c_str(), user.second.size());
int sendPacketLength = usersListResponsePacket.__data.packetLength;
Chattr::IOCPPASSINDATA* ptr = new Chattr::IOCPPASSINDATA;
::memset(&ptr->overlapped, 0, sizeof(OVERLAPPED));
ptr->socket = data->socket;
ptr->recvbytes = ptr->sendbytes = 0;
ptr->wsabuf.buf = ptr->buf;
ptr->wsabuf.len = 1500;
ptr->IOCPInstance = data->IOCPInstance;
usersListResponsePacket.convToN();
memcpy(ptr->wsabuf.buf, usersListResponsePacket.serialized, sendPacketLength + 8);
data->sendbytes = sendPacketLength + 8;
data->transferredbytes = sendPacketLength + 8;
data->wsabuf.len = sendPacketLength + 8;
data->IOCPInstance->send(ptr, 1, 0);
}
}
break; break;
case PacketSet::DATAPOSTTEXT: { case PacketSet::DATAPOSTTEXT: {
pack.convToN(); pack.convToN();
std::memcpy(&dataPostPacket.serialized, &pack, 8 + pack.__data.packetLength); std::memcpy(&dataPostPacket.serialized, &pack, 8 + packetLength);
dataPostPacket.convToH(); dataPostPacket.convToH();
Snowflake destID = {}; Snowflake destID = {};
@@ -95,6 +133,7 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
memcpy(data->wsabuf.buf, responsePacket.serialized, 10); memcpy(data->wsabuf.buf, responsePacket.serialized, 10);
data->sendbytes = 10; data->sendbytes = 10;
data->transferredbytes = 10; data->transferredbytes = 10;
data->wsabuf.len = 10;
data->IOCPInstance->send(data, 1, 0); data->IOCPInstance->send(data, 1, 0);
for (auto dest : destinationSockets) { for (auto dest : destinationSockets) {
@@ -114,6 +153,7 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
memcpy(ptr->wsabuf.buf, dataPostPacket.serialized, packetLength + 6); memcpy(ptr->wsabuf.buf, dataPostPacket.serialized, packetLength + 6);
data->sendbytes = packetLength + 6; data->sendbytes = packetLength + 6;
data->transferredbytes = packetLength + 6; data->transferredbytes = packetLength + 6;
data->wsabuf.len = packetLength + 6;
data->IOCPInstance->send(ptr, 1, 0); data->IOCPInstance->send(ptr, 1, 0);
} }
} }
@@ -134,6 +174,7 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
memcpy(data->wsabuf.buf, responsePacket.serialized, 10); memcpy(data->wsabuf.buf, responsePacket.serialized, 10);
data->sendbytes = 10; data->sendbytes = 10;
data->transferredbytes = 10; data->transferredbytes = 10;
data->wsabuf.len = 10;
data->IOCPInstance->send(data, 1, 0); data->IOCPInstance->send(data, 1, 0);
break; break;
} }

View File

@@ -216,12 +216,14 @@ public:
}; };
std::uint8_t* convToN() { std::uint8_t* convToN() {
__data.packetLength = ::htons(__data.packetLength); __data.packetLength = ::htons(__data.packetLength);
__data.responseStatusCode = (ResponseStatusCode)::htons((std::uint16_t)__data.responseStatusCode);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
__data.yourId[i] = ::htons(__data.yourId[i]); __data.yourId[i] = ::htons(__data.yourId[i]);
return serialized; return serialized;
} }
std::uint8_t* convToH() { std::uint8_t* convToH() {
__data.packetLength = ::ntohs(__data.packetLength); __data.packetLength = ::ntohs(__data.packetLength);
__data.responseStatusCode = (ResponseStatusCode)::ntohs((std::uint16_t)__data.responseStatusCode);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
__data.yourId[i] = ::ntohs(__data.yourId[i]); __data.yourId[i] = ::ntohs(__data.yourId[i]);
return serialized; return serialized;
@@ -244,12 +246,14 @@ public:
}; };
std::uint8_t* convToN() { std::uint8_t* convToN() {
__data.packetLength = ::htons(__data.packetLength); __data.packetLength = ::htons(__data.packetLength);
__data.responseStatusCode = (ResponseStatusCode)::htons((std::uint16_t)__data.responseStatusCode);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
__data.createdRoomId[i] = ::htons(__data.createdRoomId[i]); __data.createdRoomId[i] = ::htons(__data.createdRoomId[i]);
return serialized; return serialized;
} }
std::uint8_t* convToH() { std::uint8_t* convToH() {
__data.packetLength = ::ntohs(__data.packetLength); __data.packetLength = ::ntohs(__data.packetLength);
__data.responseStatusCode = (ResponseStatusCode)::ntohs((std::uint16_t)__data.responseStatusCode);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
__data.createdRoomId[i] = ::ntohs(__data.createdRoomId[i]); __data.createdRoomId[i] = ::ntohs(__data.createdRoomId[i]);
return serialized; return serialized;
@@ -273,6 +277,7 @@ public:
}; };
std::uint8_t* convToN() { std::uint8_t* convToN() {
__data.packetLength = ::htons(__data.packetLength); __data.packetLength = ::htons(__data.packetLength);
__data.responseStatusCode = (ResponseStatusCode)::htons((std::uint16_t)__data.responseStatusCode);
__data.roomCount = ::htonl(__data.roomCount); __data.roomCount = ::htonl(__data.roomCount);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
__data.roomId[i] = ::htons(__data.roomId[i]); __data.roomId[i] = ::htons(__data.roomId[i]);
@@ -280,6 +285,7 @@ public:
} }
std::uint8_t* convToH() { std::uint8_t* convToH() {
__data.packetLength = ::ntohs(__data.packetLength); __data.packetLength = ::ntohs(__data.packetLength);
__data.responseStatusCode = (ResponseStatusCode)::ntohs((std::uint16_t)__data.responseStatusCode);
__data.roomCount = ::ntohl(__data.roomCount); __data.roomCount = ::ntohl(__data.roomCount);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
__data.roomId[i] = ::ntohs(__data.roomId[i]); __data.roomId[i] = ::ntohs(__data.roomId[i]);
@@ -308,12 +314,14 @@ public:
}; };
std::uint8_t* convToN() { std::uint8_t* convToN() {
__data.packetLength = ::htons(__data.packetLength); __data.packetLength = ::htons(__data.packetLength);
__data.responseStatusCode = (ResponseStatusCode)::htons((std::uint16_t)__data.responseStatusCode);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
__data.userId[i] = ::htons(__data.userId[i]); __data.userId[i] = ::htons(__data.userId[i]);
return serialized; return serialized;
} }
std::uint8_t* convToH() { std::uint8_t* convToH() {
__data.packetLength = ::ntohs(__data.packetLength); __data.packetLength = ::ntohs(__data.packetLength);
__data.responseStatusCode = (ResponseStatusCode)::ntohs((std::uint16_t)__data.responseStatusCode);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
__data.userId[i] = ::ntohs(__data.userId[i]); __data.userId[i] = ::ntohs(__data.userId[i]);
return serialized; return serialized;

View File

@@ -53,7 +53,7 @@ public:
threadPool->enqueueJob(iocpWather, completionPort_, callback); threadPool->enqueueJob(iocpWather, completionPort_, callback);
return; return;
} }
data->transfrredbytes = cbTransfrred; data->transferredbytes = cbTransfrred;
threadPool->enqueueJob(callback, data); threadPool->enqueueJob(callback, data);
threadPool->enqueueJob(iocpWather, completionPort_, callback); threadPool->enqueueJob(iocpWather, completionPort_, callback);
}; };