00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "Aria.h"
00027 #include "ArExport.h"
00028 #include "ArServerData.h"
00029 #include "ArServerClient.h"
00030 #include "ArNetPacket.h"
00031
00032 AREXPORT ArServerData::ArServerData(
00033 const char *name, const char *description, unsigned int command,
00034 ArFunctor2<ArServerClient *, ArNetPacket *> *functor,
00035 const char *argumentDescription, const char *returnDescription,
00036 const char *commandGroup, const char *dataFlags,
00037 ArRetFunctor1<long, unsigned int> *getFrequencyFunctor,
00038 ArFunctor2<long, unsigned int> *requestChangedFunctor,
00039 ArFunctor2<ArServerClient *, ArNetPacket *>
00040 *requestOnceFunctor) :
00041 myDataFlagsBuilder(512, '|')
00042 {
00043 myName = name;
00044 myDescription = description;
00045 myReturnDescription = returnDescription;
00046 myArgumentDescription = argumentDescription;
00047 myCommand = command;
00048 myFunctor = functor;
00049 if (commandGroup != NULL)
00050 myCommandGroup = commandGroup;
00051 else
00052 myCommandGroup = "";
00053 myGetFrequencyFunctor = getFrequencyFunctor;
00054 myRequestChangedFunctor = requestChangedFunctor;
00055 myRequestOnceFunctor = requestOnceFunctor;
00056 if (dataFlags != NULL)
00057 {
00058 myDataFlagsBuilder.add(dataFlags);
00059 }
00060
00061 }
00062
00063 AREXPORT ArServerData::~ArServerData()
00064 {
00065
00066 }
00067
00068 AREXPORT bool ArServerData::hasDataFlag(const char *dataFlag)
00069 {
00070 myDataMutex.lock();
00071 size_t i;
00072 for (i = 0; i < myDataFlagsBuilder.getArgc(); i++)
00073 {
00074 if (strcmp(myDataFlagsBuilder.getArg(i), dataFlag) == 0)
00075 {
00076 myDataMutex.unlock();
00077 return true;
00078 }
00079 }
00080
00081 myDataMutex.unlock();
00082 return false;
00083 }
00084
00085 AREXPORT bool ArServerData::addDataFlags(const char *dataFlags)
00086 {
00087 myDataMutex.lock();
00088 myDataFlagsBuilder.add(dataFlags);
00089 myDataMutex.unlock();
00090 return true;
00091 }
00092
00093 AREXPORT bool ArServerData::remDataFlag(const char *dataFlag)
00094 {
00095 myDataMutex.lock();
00096 size_t i;
00097 for (i = myDataFlagsBuilder.getArgc(); i < myDataFlagsBuilder.getArgc(); i++)
00098 {
00099 if (strcmp(myDataFlagsBuilder.getArg(i), dataFlag) == 0)
00100 {
00101 myDataFlagsBuilder.removeArg(i);
00102 myDataMutex.unlock();
00103 return true;
00104 }
00105 }
00106
00107 myDataMutex.unlock();
00108 return false;
00109 }
00110
00111 AREXPORT void ArServerData::callRequestChangedFunctor(void)
00112 {
00113 if (myGetFrequencyFunctor == NULL || myRequestChangedFunctor == NULL)
00114 return;
00115 myRequestChangedFunctor->invoke(
00116 myGetFrequencyFunctor->invokeR(myCommand), myCommand);
00117 }