#if 0 #include "Protocol.h" #include "PacketReader.h" #include "PacketTypes.h" #include using std::string; namespace Feather::Network { void Protocol::HandlePacket(PacketReader& packet) { int id = packet.ReadVarInt(); printf("PacketReader[%u]: ID = %u\n", packet.Length(), id); switch (m_state) { case ProtocolState::HANDSHAKING: { if (id != 0) { // this could be, for example, Legacy Server List Ping 0xFE printf("[Protocol] Client sent packet with non-zero ID 0x%x while state was HANDSHAKING\n", id); break; } int clientProtocolVersion = packet.ReadVarInt(); string serverIp = packet.ReadString(); uint16_t port = packet.Read(); // next desired state ProtocolState intention = (ProtocolState)(packet.ReadVarInt()); printf("[Protocol] Client Intention Packet: version=%d, serverIp=%s, port=%u, intention=%d\n", clientProtocolVersion, serverIp.c_str(), port, intention ); SetState(intention); break; } case ProtocolState::STATUS: { ServerboundPacketType type = (ServerboundPacketType)id; printf("[Protocol] [STATUS mode] Client sent packet ID %d (%d)\n", id, type); switch (type) { case ServerboundPacketType::STATUS_PING_REQUEST: { printf("[Protocol] Client sent STATUS_PING_REQUEST\n"); const std::string json_template = R"({ "version": { "name": "1.16.1", "protocol": 736 }, "players": { "max": 10, "online": 10, "sample": [ { "name": "thinkofdeath", "id": "4566e69f-c907-48ee-8d71-d7ba5aa00d20" } ] }, "description": { "text": "Hello Nukem!" } })"; /*DynamicNetworkMessage msg(VARINT_MAX_SIZE + json_template.length()); // Packet ID msg.WriteVarInt(0); // JSON Contents msg.WriteString(json_template.c_str(), static_cast(json_template.length())); m_client->SendPacket(&msg);*/ break; } case ServerboundPacketType::STATUS_PING: int64_t timestamp = packet.Read(); printf("[Protocol] Client sent STATUS_PING: %lld\n", timestamp); /*DynamicNetworkMessage msg(VARINT_MAX_SIZE + sizeof(int64_t)); msg.WriteVarInt(1); msg.WriteLong(timestamp); m_client->SendPacket(&msg);*/ break; } break; } } } void Protocol::SetState(ProtocolState state) { printf("[Protocol] Switching state from %d to %d\n", m_state, state); // TODO: validate state here m_state = state; } } #endif