자잘한 버그 픽스

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

@@ -30,7 +30,7 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
case PacketSet::LOGINREQUEST: {
pack.convToN();
LoginRequestPacket loginRequestPacket;
std::memcpy(&loginRequestPacket.serialized, &pack, 8 + pack.__data.packetLength);
std::memcpy(&loginRequestPacket.serialized, &pack, 8 + packetLength);
loginRequestPacket.convToH();
std::string userName(
@@ -44,12 +44,14 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
loginResponsePacket.__data.dataType = Chattr::DataType::TEXT;
loginResponsePacket.__data.packetLength = sizeof(Chattr::ResponseStatusCode) + sizeof(Snowflake);
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();
memcpy(data->wsabuf.buf, loginResponsePacket.serialized, 16);
data->sendbytes = 16;
data->transferredbytes = 16;
data->wsabuf.len = 16;
data->IOCPInstance->send(data, 1, 0);
}
break;
@@ -61,11 +63,47 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
break;
case PacketSet::ROOMEXITREQUEST:
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;
case PacketSet::DATAPOSTTEXT: {
pack.convToN();
std::memcpy(&dataPostPacket.serialized, &pack, 8 + pack.__data.packetLength);
std::memcpy(&dataPostPacket.serialized, &pack, 8 + packetLength);
dataPostPacket.convToH();
Snowflake destID = {};
@@ -95,6 +133,7 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
memcpy(data->wsabuf.buf, responsePacket.serialized, 10);
data->sendbytes = 10;
data->transferredbytes = 10;
data->wsabuf.len = 10;
data->IOCPInstance->send(data, 1, 0);
for (auto dest : destinationSockets) {
@@ -114,6 +153,7 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
memcpy(ptr->wsabuf.buf, dataPostPacket.serialized, packetLength + 6);
data->sendbytes = packetLength + 6;
data->transferredbytes = packetLength + 6;
data->wsabuf.len = packetLength + 6;
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);
data->sendbytes = 10;
data->transferredbytes = 10;
data->wsabuf.len = 10;
data->IOCPInstance->send(data, 1, 0);
break;
}