Main Page | Class List | Directories | File List | Class Members

CodeServer.h

00001 /* START_LICENSE_HEADER
00002 
00003 Copyright (C) 2000 Martin Piper, original design and program code
00004 Copyright (C) 2001-2005 Replica Software
00005 
00006 This program file is copyright (C) Replica Software and can only be used under license.
00007 For more information visit: http://www.replicanet.com/
00008 Or email: info@replicanet.com
00009 
00010 END_LICENSE_HEADER */
00011 #ifndef _CODESERVER_H_
00012 #define _CODESERVER_H_
00013 #include "RNPlatform/Inc/DLLExportAPI.h"
00014 #include "RNPlatform/Inc/RegistryManagerMap.h"
00015 #include "RNPlatform/Inc/Encryption.h"
00016 #include "RNPlatform/Inc/ThreadClass.h"
00017 #include "RNPlatform/Inc/Thread.h"
00018 #include "RNXPSockets/Inc/XPSockets.h"
00019 
00020 namespace RNReplicaNet
00021 {
00022 
00023 namespace RNLobby
00024 {
00025 
00028 class CodeServer : private ThreadClass , private Thread
00029 {
00030 public:
00031     class CodeEntry
00032     {
00033     public:
00034         struct ThisLess
00035         {
00036             bool operator()(const std::string &s1, const std::string &s2) const
00037             {
00038                 return strcmp(s1.c_str(), s2.c_str()) < 0;
00039             }
00040         };
00041         CodeEntry();
00042 
00043         // ctor variables
00044         XPAddress mLastAddress;
00045         float mLastTime;
00046         int mUserSuppliedReply;
00047         int mLastNOnce1,mLastNOnce2;
00048 
00049         // ctor body variables
00050         std::string mTheCode;
00051     };
00052 
00053     enum Reply
00054     {
00055         kReply_ValidKey = 0,
00056         kReply_UnspecifiedError,
00057         kReply_InvalidKey,
00058         kReply_KeyInUse,
00059         kReply_Timeout,
00060         kReply_CorruptReply
00061     };
00062     enum
00063     {
00064         kDefaultPort = 20001
00065     };
00066 
00067 
00068     CodeServer();
00069     virtual ~CodeServer();
00070 
00076     bool ReadCodeFile(const char *filename, const bool duplicateCodeCheck = false);
00077 
00084     bool AddCode(const char *code, const bool duplicateCodeCheck = false,const int userSuppliedReply = 0);
00085 
00090     bool RemoveCode(const char *code = 0);
00091 
00094     bool Start(const int UDPPort = CodeServer::kDefaultPort);
00095 
00099     bool Stop(bool hardware = false);
00100 
00105     void SetEncryptionKey(const void *data,const int length);
00106 
00110     void SetCodeTimeout(const float time = (60.0f * 30.0f));
00111 
00114     float GetCodeTimeout(void) const;
00115 
00121     virtual void CallbackDataReceived(void *data,int &length,const int maxLength,XPAddress &address) {}
00122 
00125     virtual void CallbackVersion(const int version) {}
00126 
00134     virtual void CallbackKeyData(char *keyData,const int maxLength,int &nOnce1,int &nOnce2,bool &updateDatabase) {}
00135 
00141     virtual void CallbackQueryReply(Reply &reply,int &userSuppliedReply,int &nOnce1,int &nOnce2) {}
00142 
00148     virtual void CallbackDataSend(void *data,int &length,const int maxLength,XPAddress &address) {}
00149 
00152     virtual void CallbackQueryReplyTime(const float seconds) {}
00153 
00154 private:
00155     virtual int ThreadEntry(void);
00156 
00157 protected:
00158     RegistryManagerMap<std::string,CodeEntry,CodeEntry::ThisLess> mCodes;
00159     MutexClass mCodesMutex;
00160 private:
00161     XPSocketUrgent *mListen;
00162 
00163     Encryption::Key mCryptoKey;
00164     float mCodeTimeout;
00165 };
00166 
00167 };
00168 
00169 };
00170 
00171 #endif

Generated on Sun Oct 30 01:12:43 2005 for RNLobby by  doxygen 1.4.1