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 #ifndef ARNETSERVER_H
00027 #define ARNETSERVER_H
00028
00029 #include "ariaTypedefs.h"
00030 #include "ArSocket.h"
00031 #include "ArFunctor.h"
00032 #include "ariaUtil.h"
00033 #include <list>
00034
00035
00036 class ArRobot;
00037
00038 class ArArgumentBuilder;
00039
00041
00054 class ArNetServer
00055 {
00056 public:
00058 AREXPORT ArNetServer(bool addAriaExitCB = true);
00060 AREXPORT ~ArNetServer();
00061
00063 AREXPORT bool open(ArRobot *robot, unsigned int port,
00064 const char *password, bool multipleClients = true,
00065 const char *openOnIP = NULL);
00066
00068 AREXPORT void close(void);
00069
00071 AREXPORT bool addCommand(const char *command,
00072 ArFunctor3<char **, int, ArSocket *> *functor,
00073 const char *help);
00074
00076 AREXPORT bool remCommand(const char *command);
00077
00078 #ifndef SWIG
00079
00082 AREXPORT void sendToAllClients(const char *str, ...);
00083 #endif
00084
00085 AREXPORT void sendToAllClientsPlain(const char *str);
00086
00087 #ifndef SWIG
00088
00091 AREXPORT void sendToClient(ArSocket *socket, const char *ipString,
00092 const char *str, ...);
00093 #endif
00094
00095 AREXPORT void sendToClientPlain(ArSocket *socket, const char *ipString,
00096 const char *str);
00097
00099 AREXPORT bool isOpen(void);
00100
00102 AREXPORT void setLoggingDataSent(bool loggingData);
00103
00105 AREXPORT bool getLoggingDataSent(void);
00106
00108 AREXPORT void setLoggingDataReceived(bool loggingData);
00109
00111 AREXPORT bool getLoggingDataReceived(void);
00112
00113
00115 AREXPORT void runOnce(void);
00116
00118 AREXPORT void internalGreeting(ArSocket *socket);
00119
00121 AREXPORT void internalHelp(ArSocket *socket);
00123 AREXPORT void internalHelp(char **argv, int argc, ArSocket *socket);
00125 AREXPORT void internalEcho(char **argv, int argc, ArSocket *socket);
00127 AREXPORT void internalQuit(char **argv, int argc, ArSocket *socket);
00129 AREXPORT void internalShutdownServer(char **argv, int argc,
00130 ArSocket *socket);
00132 AREXPORT void parseCommandOnSocket(ArArgumentBuilder *args,
00133 ArSocket *socket, bool allowLog = true);
00135 AREXPORT void internalAddSocketToList(ArSocket *socket);
00137 AREXPORT void internalAddSocketToDeleteList(ArSocket *socket);
00139 AREXPORT void squelchNormal(void);
00141 AREXPORT void setExtraString(const char *str) { myExtraString = str; }
00143 AREXPORT const char *getExtraString(void) { return myExtraString.c_str(); }
00145 AREXPORT int lock() {return(myMutex.lock());}
00147 AREXPORT int tryLock() {return(myMutex.tryLock());}
00149 AREXPORT int unlock() {return(myMutex.unlock());}
00150
00151 protected:
00152 ArMutex myMutex;
00153 std::map<std::string, ArFunctor3<char **, int, ArSocket *> *, ArStrCaseCmpOp> myFunctorMap;
00154 std::map<std::string, std::string, ArStrCaseCmpOp> myHelpMap;
00155 bool myLoggingDataSent;
00156 bool myLoggingDataReceived;
00157 bool myOpened;
00158 bool myWantToClose;
00159 bool mySquelchNormal;
00160 ArSocket myServerSocket;
00161 ArRobot *myRobot;
00162 std::string myPassword;
00163 bool myMultipleClients;
00164 unsigned int myPort;
00165 std::string myExtraString;
00166 std::list<ArSocket *> myConns;
00167 std::list<ArSocket *> myConnectingConns;
00168 std::list<ArSocket *> myDeleteList;
00169 ArFunctorC<ArNetServer> myTaskCB;
00170 ArFunctor3C<ArNetServer, char **, int, ArSocket *> myHelpCB;
00171 ArFunctor3C<ArNetServer, char **, int, ArSocket *> myEchoCB;
00172 ArFunctor3C<ArNetServer, char **, int, ArSocket *> myQuitCB;
00173 ArFunctor3C<ArNetServer, char **, int, ArSocket *> myShutdownServerCB;
00174 ArFunctorC<ArNetServer> myAriaExitCB;
00175 };
00176
00177 #endif // ARNETSERVER_H