#pragma once #include "../LinearAlgebra/Spherical.h" #include "../LinearAlgebra/SwingTwist.h" #include "../float16/float16.h" #include "CoreThing.h" #include "Participant.h" namespace Passer::Control { class IMessage { public: virtual unsigned char Serialize(unsigned char *buffer); static bool SendMsg(Participant *client, IMessage msg); }; class InvestigateMsg : public IMessage { public: static const unsigned char id = 0x81; static const unsigned char length = 3; unsigned char networkId; unsigned char thingId; InvestigateMsg(unsigned char networkId, unsigned char thingId); virtual unsigned char Serialize(unsigned char *buffer) override; static bool Send(Participant *client, unsigned char networkId, unsigned char thingId); }; class ThingMsg : public IMessage { public: static const unsigned char id = 0x80; static const unsigned char length = 5; unsigned char networkId; unsigned char thingId; unsigned char thingType; unsigned char parentId; ThingMsg(unsigned char networkId, unsigned char thingId, unsigned char thingType, unsigned char parentId); virtual unsigned char Serialize(unsigned char *buffer) override; static bool Send(Participant *client, unsigned char networkId, unsigned char thingId, unsigned char thingType, unsigned char parentId); }; class NameMsg : public IMessage { public: static const unsigned char id = 0x91; static const unsigned char length = 4; unsigned char networkId; unsigned char thingId; unsigned char nameLength; const char *name; NameMsg(unsigned char networkId, unsigned char thingId, const char *name, unsigned char nameLength); virtual unsigned char Serialize(unsigned char *buffer) override; static bool Send(Participant *client, CoreThing *thing, unsigned char nameLength); }; class ModelUrlMsg : public IMessage { public: static const unsigned char id = 0x90; unsigned char networkId; unsigned char thingId; float scale; unsigned char urlLength; const char *url; ModelUrlMsg(unsigned char networkId, unsigned char thingId, unsigned char urlLegth, const char *url, float scale = 1); virtual unsigned char Serialize(unsigned char *buffer) override; }; class PoseMsg : public IMessage { public: static const unsigned char id = 0x10; unsigned char length = 4 + 4 + 4; unsigned char networkId; unsigned char thingId; unsigned char poseType; const unsigned char Pose_Position = 0x01; const unsigned char Pose_Orientation = 0x02; Spherical16 position; SwingTwist16 orientation; PoseMsg(unsigned char networkId, unsigned char thingId, unsigned char poseType, Spherical16 position, SwingTwist16 orientation); virtual unsigned char Serialize(unsigned char *buffer) override; }; } // namespace Passer::Control using namespace Passer::Control;