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 ARCLIENTSWITCH_H
00027 #define ARCLIENTSWITCH_H
00028
00029 #include "Aria.h"
00030 #include "ArServerBase.h"
00031 #include "ArClientBase.h"
00032
00041 class ArClientSwitchManager : public ArASyncTask
00042 {
00043 public:
00044 AREXPORT ArClientSwitchManager(ArServerBase *serverBase,
00045 ArArgumentParser *parser);
00046 AREXPORT virtual ~ArClientSwitchManager();
00048 AREXPORT bool parseArgs(void);
00050 AREXPORT void logOptions(void) const;
00052 AREXPORT const char *getCentralServerHostName(void);
00054 AREXPORT void clientSwitch(ArNetPacket *packet);
00056 AREXPORT void netCentralHeartbeat(ArServerClient *client,
00057 ArNetPacket *packet);
00059 AREXPORT bool parseFile(const char *fileName);
00060 AREXPORT virtual void *runThread(void *arg);
00061 protected:
00062 AREXPORT void socketClosed(void);
00063 ArServerBase *myServer;
00064 ArArgumentParser *myParser;
00065
00066 ArFileParser myFileParser;
00067
00068 bool fileUserCallback(ArArgumentBuilder *arg);
00069 bool filePasswordCallback(ArArgumentBuilder *arg);
00070 bool fileServerKeyCallback(ArArgumentBuilder *arg);
00071
00072 enum State
00073 {
00074 IDLE,
00075 TRYING_CONNECTION,
00076 CONNECTING,
00077 CONNECTED,
00078 LOST_CONNECTION
00079 };
00080 State myState;
00081 ArTime myStartedState;
00082 bool myGaveTimeWarning;
00083
00084 AREXPORT void switchState(State state);
00085
00086 ArMutex myDataMutex;
00087
00088 bool myTryConnection;
00089 ArClientBase *myClient;
00090
00091 std::string myUser;
00092 std::string myPassword;
00093 std::string myServerKey;
00094
00095 std::string myCentralServer;
00096 int myCentralServerPort;
00097 std::string myIdentifier;
00098
00099 ArRetFunctorC<bool, ArClientSwitchManager> myParseArgsCB;
00100 ArConstFunctorC<ArClientSwitchManager> myLogOptionsCB;
00101 ArFunctorC<ArClientSwitchManager> mySocketClosedCB;
00102 ArFunctor1C<ArClientSwitchManager, ArNetPacket *> mySwitchCB;
00103 ArFunctor2C<ArClientSwitchManager, ArServerClient *,
00104 ArNetPacket *> myNetCentralHeartbeatCB;
00105 ArRetFunctor1C<bool, ArClientSwitchManager,
00106 ArArgumentBuilder *> myFileUserCB;
00107 ArRetFunctor1C<bool, ArClientSwitchManager,
00108 ArArgumentBuilder *> myFilePasswordCB;
00109 ArRetFunctor1C<bool, ArClientSwitchManager,
00110 ArArgumentBuilder *> myFileServerKeyCB;
00111 };
00112
00113
00114 #endif // ARCLIENTSWITCH_H
00115