rosaria/Legacy/Aria/ArNetworking/include/ArServerInfoDrawings.h

89 lines
3.5 KiB
C
Raw Normal View History

2021-12-16 15:07:59 +01:00
#ifndef ARSERVERINFODRAWINGS_H
#define ARSERVERINFODRAWINGS_H
#include "Aria.h"
#include "ArServerBase.h"
class ArServerClient;
/** Service to provide clients with information about graphical figures to be
displayed with the map.
Use addDrawing() to add a figure, or use addRangeDevice() or
addRobotsRangeDevice() to automatically create standard drawings for
range devices.
Clients may use the <code>listDrawings</code> data
request to receive a list of figures and metadata about those figures.
The reply packet to the <code>listDrawings</code> request is as follows:
<ol>
<li>Number of figures (4-byte integer)Then, for each figure, the following values are given
<li>For each figure:
<ol>
<li>Figure name (null-terminated string)</li>
<li>Shape ID (null-terminated string)</li>
<li>Primary color: <ol>
<li>Unused (byte)</li>
<li>Red (byte)</li>
<li>Green (byte)</li>
<li>Blue (byte)</li>
</ol></li>
<li>Shape size (4-byte integer)</li>
<li>Layer number (4-byte integer)</li>
<li>Suggested refresh time (4-byte integer)</li>
<li>Secordary color: <ol>
<li>Unused (byte)</li>
<li>Red (byte)</li>
<li>Green (byte)</li>
<li>Blue (byte)</li>
</ol></li>
</li>
</ol>
</ol>
This command is in the <code>SensorInfo</code> permission group for users.
*/
class ArServerInfoDrawings
{
public:
/// Constructor
AREXPORT ArServerInfoDrawings(ArServerBase *server);
/// Destructor
AREXPORT virtual ~ArServerInfoDrawings();
/// Adds a shape to the set of figures
AREXPORT bool addDrawing(ArDrawingData *drawingData, const char *name,
ArFunctor2<ArServerClient *, ArNetPacket *> *functor);
/// Adds a specific range device to be drawn (using its default shape)
AREXPORT bool addRangeDevice(ArRangeDevice *rangeDevice);
/// Adds all of the robot's range devices (using their default shape)
AREXPORT bool addRobotsRangeDevices(ArRobot *robot);
/// Client callback: Puts the list of shapes that can be drawn and their metadata into a reply packet (internal use mostly)
AREXPORT void netListDrawings(ArServerClient *client, ArNetPacket *packet);
AREXPORT void netGetDrawingList(ArServerClient *client, ArNetPacket *packet);
/// Client callback utility: Puts the current data for the given range device into a reply packet (internal use mostly)
AREXPORT void netRangeDeviceCurrent(ArServerClient *client,
ArNetPacket *packet,
ArRangeDevice *device);
/// Client callback utilit: Puts the cumulative buffer of the given range device into a reply packet (internal use mostly)
AREXPORT void netRangeDeviceCumulative(ArServerClient *client,
ArNetPacket *packet,
ArRangeDevice *device);
/// internal function that gets the drawing data for a drawing
/// @internal
AREXPORT ArDrawingData *internalGetDrawingData(const char *name);
/// internal function that gets the functor for a drawing
/// @internal
AREXPORT ArFunctor2<ArServerClient *, ArNetPacket *> *internalGetDrawingCallback(const char *name);
protected:
ArServerBase *myServer;
std::map<std::string, ArDrawingData *, ArStrCaseCmpOp> myDrawingDatas;
std::map<std::string, ArFunctor2<ArServerClient *, ArNetPacket *> *, ArStrCaseCmpOp> myDrawingCallbacks;
ArFunctor2C<ArServerInfoDrawings, ArServerClient *, ArNetPacket *> myNetListDrawingsCB;
ArFunctor2C<ArServerInfoDrawings, ArServerClient *, ArNetPacket *> myNetGetDrawingListCB;
};
#endif