alignment #1
@@ -10,11 +10,7 @@ enum KeepAlivePacketFields {
|
|||||||
};
|
};
|
||||||
|
|
||||||
using KeepAliveFields = std::tuple<
|
using KeepAliveFields = std::tuple<
|
||||||
std::uint64_t, //<- KeepAliveId
|
std::uint64_t //<- KeepAliveId
|
||||||
sp::BitField<std::uint16_t,
|
|
||||||
sp::Field<std::uint16_t, 12>, //<- m_Tower
|
|
||||||
sp::Field<std::uint8_t, 4> //<- m_Upgrade
|
|
||||||
>
|
|
||||||
>;
|
>;
|
||||||
|
|
||||||
DeclarePacket(KeepAlive){
|
DeclarePacket(KeepAlive){
|
||||||
@@ -24,12 +20,4 @@ DeclarePacket(KeepAlive){
|
|||||||
std::uint64_t GetKeepAliveId() const {
|
std::uint64_t GetKeepAliveId() const {
|
||||||
return GetField<KeepAlive>();
|
return GetField<KeepAlive>();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::uint16_t GetTowerId() const {
|
|
||||||
return GetField<TestAlignField>().GetField<0>();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::uint8_t GetTowerUpgrade() const {
|
|
||||||
return GetField<TestAlignField>().GetField<1>();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
@@ -3,13 +3,15 @@
|
|||||||
enum PacketId {
|
enum PacketId {
|
||||||
KeepAlive = 0,
|
KeepAlive = 0,
|
||||||
Disconnect,
|
Disconnect,
|
||||||
|
UpgradeTower,
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <examples/KeepAlivePacket.h>
|
#include <examples/KeepAlivePacket.h>
|
||||||
#include <examples/DisconnectPacket.h>
|
#include <examples/DisconnectPacket.h>
|
||||||
|
#include <examples/UpgradeTowerPacket.h>
|
||||||
|
|
||||||
// they must be in the same order !
|
// they must be in the same order as in the enum !
|
||||||
using AllPackets = std::tuple<KeepAlivePacket, DisconnectPacket>;
|
using AllPackets = std::tuple<KeepAlivePacket, DisconnectPacket, UpgradeTowerPacket>;
|
||||||
|
|
||||||
#include <sp/default/DefaultPacketHandler.h>
|
#include <sp/default/DefaultPacketHandler.h>
|
||||||
#include <sp/default/DefaultPacketFactory.h>
|
#include <sp/default/DefaultPacketFactory.h>
|
||||||
30
include/examples/UpgradeTowerPacket.h
Normal file
30
include/examples/UpgradeTowerPacket.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <sp/default/DefaultPacket.h>
|
||||||
|
#include <sp/protocol/Field.h>
|
||||||
|
#include <sp/protocol/MessageBase.h>
|
||||||
|
|
||||||
|
enum UpgradeTowerPacketFields {
|
||||||
|
m_Tower = 0,
|
||||||
|
m_Upgrade,
|
||||||
|
};
|
||||||
|
|
||||||
|
using UpgradeTowerFields = std::tuple<
|
||||||
|
sp::BitField<std::uint16_t,
|
||||||
|
sp::Field<std::uint16_t, 12>, //<- m_Tower
|
||||||
|
sp::Field<std::uint8_t, 4> //<- m_Upgrade
|
||||||
|
>
|
||||||
|
>;
|
||||||
|
|
||||||
|
DeclarePacket(UpgradeTower){
|
||||||
|
public:
|
||||||
|
PacketConstructor(UpgradeTower)
|
||||||
|
|
||||||
|
std::uint16_t GetTowerId() const {
|
||||||
|
return GetField<0>().GetField<m_Tower>();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::uint8_t GetTowerUpgrade() const {
|
||||||
|
return GetField<0>().GetField<m_Upgrade>();
|
||||||
|
}
|
||||||
|
};
|
||||||
18
src/main.cpp
18
src/main.cpp
@@ -11,12 +11,17 @@ class KeepAliveHandler : public sp::PacketHandler {
|
|||||||
void Handle(DisconnectPacket& packet) {
|
void Handle(DisconnectPacket& packet) {
|
||||||
std::cout << "Disconnect handled !\n";
|
std::cout << "Disconnect handled !\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: add constness
|
||||||
|
void Handle(UpgradeTowerPacket& packet) {
|
||||||
|
std::cout << "UpgradeTower handled !\n";
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
auto keepAlive = std::make_unique<KeepAlivePacket>(69, std::make_tuple(666, 9));
|
auto upgradeTower = std::make_unique<UpgradeTowerPacket>(std::make_tuple(666, 9));
|
||||||
|
|
||||||
sp::PacketMessage* msg = keepAlive.get();
|
sp::PacketMessage* msg = upgradeTower.get();
|
||||||
|
|
||||||
KeepAliveHandler handler;
|
KeepAliveHandler handler;
|
||||||
msg->Dispatch(handler);
|
msg->Dispatch(handler);
|
||||||
@@ -27,13 +32,10 @@ int main() {
|
|||||||
std::uint8_t msgId;
|
std::uint8_t msgId;
|
||||||
buffer >> msgId;
|
buffer >> msgId;
|
||||||
|
|
||||||
auto keepAlive2 = std::make_unique<KeepAlivePacket>();
|
auto upgradeTower2 = std::make_unique<UpgradeTowerPacket>();
|
||||||
keepAlive2->Read(buffer);
|
upgradeTower2->Read(buffer);
|
||||||
|
|
||||||
std::cout << "KeepAlive2 : " << keepAlive2->GetKeepAliveId() << "\n";
|
std::cout << "Test : " << (unsigned) upgradeTower2->GetTowerId() << "\n";
|
||||||
|
|
||||||
keepAlive2->GetField<TestAlignField>().GetField<0>();
|
|
||||||
std::cout << "Test : " << (unsigned) keepAlive2->GetTowerId() << "\n";
|
|
||||||
|
|
||||||
sp::PacketFactory factory;
|
sp::PacketFactory factory;
|
||||||
auto packet = factory.CreateMessage(msgId);
|
auto packet = factory.CreateMessage(msgId);
|
||||||
|
|||||||
Reference in New Issue
Block a user