better example

This commit is contained in:
2025-02-06 16:04:51 +01:00
parent f3e98543d7
commit e6a58eb999
13 changed files with 59 additions and 75 deletions

View File

@@ -1,70 +1,17 @@
#include <iostream>
#include <sp/Field.h>
#include <sp/GenericHandler.h>
#include <sp/MessageBase.h>
#include <memory>
#include <examples/PacketExample.h>
enum MyMsgId {
MyMsgId_Msg1,
MyMsgId_Msg2,
};
class MyHandler; // forward declaration of the handler class.
using MyMessage = sp::Message<sp::option::MsgIdType<MyMsgId>, // add id() operation
sp::option::ReadOperations, // add read() operation
sp::option::WriteOperations, // add write() operation
sp::option::Handler<MyHandler>, // add dispatch() operation
sp::option::ValidCheckInterface, // add valid() operation
sp::option::LittleEndian // use little endian for serialisation
>;
using ActualMessage1Fields = std::tuple<sp::Field<std::uint16_t>, sp::Field<std::int8_t>>;
template <typename TMessageInterface>
class ActualMessage1 : public sp::MessageBase<TMessageInterface,
sp::option::StaticNumIdImpl<MyMsgId_Msg1>, // provide idImpl() if needed
sp::option::DispatchImpl<ActualMessage1<TMessageInterface>>, // provide dispatchImpl() if needed
sp::option::FieldsImpl<ActualMessage1Fields> // provide access to fields and
// readImpl(), writeImpl(),
// lengthImpl(), validImpl()
// functions if needed
> {};
using MyActualMessage1 = ActualMessage1<MyMessage>;
using AllMessages = std::tuple<MyActualMessage1>;
class MyHandler : public sp::GenericHandler<MyMessage, AllMessages> {
public:
void Handle(MyActualMessage1& msg) {
std::cout << "Got message 1 !\n";
class KeepAliveHandler : public sp::PacketHandler {
void Handle(KeepAlivePacket& packet) {
std::cout << "KeepAlive handled !\n";
}
};
int main() {
MyMessage::MsgIdType test;
auto yes = std::make_unique<ActualMessage1<MyMessage>>();
auto& fields = yes->GetFields();
std::get<0>(fields) = 69;
std::get<1>(fields) = 42;
MyHandler handlerTest;
yes->Dispatch(handlerTest);
sp::DataBuffer buffer;
yes->Write(buffer);
auto yesyes = std::make_unique<ActualMessage1<MyMessage>>();
yesyes->Read(buffer);
std::cout << "Field 1 : " << yesyes->GetField<0>() << std::endl;
std::cout << "Field 2 : " << (unsigned) yesyes->GetField<1>() << std::endl;
std::unique_ptr<sp::PacketMessage> msg = std::make_unique<KeepAlivePacket>();
KeepAliveHandler handler;
msg->Dispatch(handler);
return 0;
}