#pragma once #include "NetworkPerception.h" #include "Perception.h" #include "Roboid.h" #include "Types.h" namespace Passer { namespace RoboidControl { /// @brief Interface for synchronizaing state between clients across a network class NetworkSync { public: /// @brief Retreive and send the roboid state /// @param roboid The roboid for which the state is updated virtual void NetworkUpdate(Roboid *roboid) = 0; /// @brief Inform that the given object is no longer being tracked /// @param obj virtual void DestroyObject(InterestingThing *obj) = 0; /// @brief The id of a Pose message static const char PoseMsg = 0x10; /// @brief A bit pattern for the pose, stating that this message contains a /// position in world coordinates static const char Pose_Position = 0x01; /// @brief A bit pattern for the pose, stating that this message contains an /// orientation in world coordinates static const char Pose_Orientation = 0x02; /// @brief A bit pattern for the pose, stating that this messsage contains a /// linear velocity in world coordinates static const char Pose_LinearVelocity = 0x04; /// @brief A bit pattern for the pose, stating that this message contains an /// angular velocity in world coordinates static const char Pose_AngularVelocity = 0x08; static const char DestroyMsg = 0x20; typedef void (*SendBuffer)(UInt8 *buffer, UInt16 bufferSize); void SendPoseMsg(SendBuffer sendBuffer, Roboid *roboid); void SendDestroyObject(SendBuffer sendBuffer, InterestingThing *obj); void PublishTrackedObjects(SendBuffer sendBuffer, InterestingThing **objects); protected: NetworkPerception *networkPerception; void PublishTrackedObject(SendBuffer sendBuffer, InterestingThing *object); void SendVector3(unsigned char *data, int startIndex, Vector3 v); void SendSingle100(unsigned char *data, int startIndex, float value); void SendInt32(unsigned char *data, int startIndex, Int32 value); }; } // namespace RoboidControl } // namespace Passer