Add support for ExtInfo Packet
This commit is contained in:
parent
d857ef88f1
commit
a3e4810a18
@ -92,6 +92,7 @@ namespace spades {
|
||||
PacketTypeHandShakeReturn = 32, // C2S
|
||||
PacketTypeVersionGet = 33, // S2C
|
||||
PacketTypeVersionSend = 34, // C2S
|
||||
PacketTypeExtensionInfo = 60,
|
||||
|
||||
};
|
||||
|
||||
@ -505,7 +506,7 @@ namespace spades {
|
||||
auto &reader = readerOrNone.value();
|
||||
|
||||
try {
|
||||
if (HandleHandshakePacket(reader)) {
|
||||
if (HandleHandshakePackets(reader)) {
|
||||
continue;
|
||||
}
|
||||
} catch (const std::exception &ex) {
|
||||
@ -696,11 +697,12 @@ namespace spades {
|
||||
}
|
||||
}
|
||||
|
||||
bool NetClient::HandleHandshakePacket(spades::client::NetPacketReader &reader) {
|
||||
bool NetClient::HandleHandshakePackets(spades::client::NetPacketReader &reader) {
|
||||
SPADES_MARK_FUNCTION();
|
||||
|
||||
switch (reader.GetType()) {
|
||||
case PacketTypeHandShakeInit: SendHandShakeValid(reader.ReadInt()); return true;
|
||||
case PacketTypeExtensionInfo: HandleExtensionPacket(reader); return true;
|
||||
case PacketTypeVersionGet: {
|
||||
if (reader.GetNumRemainingBytes() > 0) {
|
||||
// Enhanced variant
|
||||
@ -719,6 +721,25 @@ namespace spades {
|
||||
}
|
||||
}
|
||||
|
||||
void NetClient::HandleExtensionPacket(spades::client::NetPacketReader& reader) {
|
||||
std::unordered_map<uint8_t, uint8_t> implementedExtensions ( {{192, 1}, {120, 1}} );
|
||||
int ext_count = reader.ReadByte();
|
||||
for (int i = 0; i < ext_count; i++) {
|
||||
int ext_id = reader.ReadByte();
|
||||
int ext_version = reader.ReadByte();
|
||||
|
||||
auto got = implementedExtensions.find(ext_id);
|
||||
|
||||
if (got == implementedExtensions.end()) {
|
||||
SPLog("Client does not support extension %d", ext_id);
|
||||
} else {
|
||||
SPLog("Client supports extension %d", ext_id);
|
||||
extensions.emplace(got->first, got->second);
|
||||
}
|
||||
}
|
||||
SendSupportedExtensions();
|
||||
}
|
||||
|
||||
void NetClient::HandleGamePacket(spades::client::NetPacketReader &reader) {
|
||||
SPADES_MARK_FUNCTION();
|
||||
|
||||
@ -1760,6 +1781,18 @@ namespace spades {
|
||||
enet_peer_send(peer, 0, wri.CreatePacket());
|
||||
}
|
||||
|
||||
void NetClient::SendSupportedExtensions() {
|
||||
SPADES_MARK_FUNCTION();
|
||||
NetPacketWriter wri(PacketTypeExtensionInfo);
|
||||
wri.Write(static_cast<uint8_t>(extensions.size()));
|
||||
for (auto& i: extensions) {
|
||||
wri.Write(static_cast<uint8_t>(i.first)); // ext id
|
||||
wri.Write(static_cast<uint8_t>(i.second)); // ext version
|
||||
}
|
||||
SPLog("Sending extension support.");
|
||||
enet_peer_send(peer, 0, wri.CreatePacket());
|
||||
}
|
||||
|
||||
void NetClient::MapLoaded() {
|
||||
SPADES_MARK_FUNCTION();
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <cstdint>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "PhysicsConstants.h"
|
||||
#include "Player.h"
|
||||
@ -52,6 +53,12 @@ namespace spades {
|
||||
NetClientStatusConnected
|
||||
};
|
||||
|
||||
enum NetExtensionType {
|
||||
ExtensionType128Player = 192,
|
||||
ExtensionTypeMessageTypes = 193,
|
||||
ExtensionTypeKickReason = 194,
|
||||
};
|
||||
|
||||
class World;
|
||||
class NetPacketReader;
|
||||
struct PlayerInput;
|
||||
@ -88,6 +95,10 @@ namespace spades {
|
||||
std::shared_ptr<GameProperties> properties;
|
||||
|
||||
int protocolVersion;
|
||||
std::unordered_map<uint8_t, uint8_t> extensions;
|
||||
std::unordered_map<uint8_t, uint8_t> implementedExtensions {
|
||||
{ExtensionType128Player, 1},
|
||||
};
|
||||
|
||||
class BandwidthMonitor {
|
||||
ENetHost *host;
|
||||
@ -129,7 +140,8 @@ namespace spades {
|
||||
// used for some scripts including Arena by Yourself
|
||||
IntVector3 temporaryPlayerBlockColor;
|
||||
|
||||
bool HandleHandshakePacket(NetPacketReader &);
|
||||
bool HandleHandshakePackets(NetPacketReader &);
|
||||
void HandleExtensionPacket(NetPacketReader &);
|
||||
void HandleGamePacket(NetPacketReader &);
|
||||
World *GetWorld();
|
||||
Player *GetPlayer(int);
|
||||
@ -143,6 +155,7 @@ namespace spades {
|
||||
|
||||
void SendVersion();
|
||||
void SendVersionEnhanced(const std::set<std::uint8_t> &propertyIds);
|
||||
void SendSupportedExtensions();
|
||||
|
||||
public:
|
||||
NetClient(Client *);
|
||||
|
Loading…
x
Reference in New Issue
Block a user