#ifndef ARSERVERHANDLERSTRINGS_H #define ARSERVERHANDLERSTRINGS_H #include "Aria.h" #include "ArServerBase.h" class ArServerClient; /** This will set up strings to send to MobileEyes so that server developers can easily add more information. There are different ways ways you can add a string (they all are the same way internally). The raw way is addString which takes a functor with a buffer and a buffer len, the functor then has to fill in the string when called. The other ways are set up for convenience and are wrappers in this class around the addString, the other ways are addStringInt, addStringDouble, addStringBool, these all take a functor that returns the type and a format string (in addition to the name and maxLen again). **/ class ArServerInfoStrings { public: /// Constructor AREXPORT ArServerInfoStrings(ArServerBase *server); /// Destructor AREXPORT ~ArServerInfoStrings(); /// Gets the information about the strings being sent AREXPORT void netGetStringsInfo(ArServerClient *client, ArNetPacket *packet); /// Gets the strings AREXPORT void netGetStrings(ArServerClient *client, ArNetPacket *packet); /// Adds a string to the list in the raw format AREXPORT void addString(const char *name, ArTypes::UByte2 maxLen, ArFunctor2 *functor); /// Gets the functor for adding a string (for ArStringInfoGroup) ArFunctor3 *> * getAddStringFunctor(void) { return &myAddStringFunctor; } /// Gets a string info holder, for internal purposes AREXPORT ArStringInfoHolder *internalGetStringInfoHolder(const char *name); protected: ArServerBase *myServer; AREXPORT void buildStringsInfoPacket(void); ArNetPacket myStringInfoPacket; AREXPORT void buildStringsPacket(void); ArNetPacket myStringPacket; ArTime myLastStringPacketBuild; std::list myStrings; ArTypes::UByte2 myMaxMaxLength; ArMutex myStringsMutex; ArFunctor3C *> myAddStringFunctor; ArFunctor2C myNetGetStringsInfoCB; ArFunctor2C myNetGetStringsCB; }; #endif // ARSERVERHANDLERSTRINGS_H