ReplicaNet and RNLobby  1
AdvertiseServer.h
1 /* START_LICENSE_HEADER
2 
3 Copyright (C) 2000 Martin Piper, original design and program code
4 Copyright (C) 2001 Replica Software
5 
6 This program file is copyright (C) Replica Software and can only be used under license.
7 For more information visit: http://www.replicanet.com/
8 Or email: info@replicanet.com
9 
10 END_LICENSE_HEADER */
11 #include "RNPlatform/Inc/MemoryTracking.h"
12 #ifndef _ADVERTISESERVER_H_
13 #define _ADVERTISESERVER_H_
14 #include "RNPlatform/Inc/ThreadClass.h"
15 #include "RNLobby/Inc/RNLobby.h"
16 #include "RNLobby/Inc/BaseTransportServer.h"
17 #include "RNXPSockets/Inc/XPSocket.h"
18 #include "RNODBCSQL/Inc/ODBCSQL.h"
19 #include "RNODBCSQL/Inc/Prepare.h"
20 #include "RNLog/Inc/Log.h"
21 #include <map>
22 
23 namespace RNReplicaNet
24 {
25 
26 namespace RNLobby
27 {
28 
35 {
36 public:
37  AdvertiseServer(const char *lobbyDSN = MRNLobbyDefaultDSN);
38  virtual ~AdvertiseServer();
39 
40  enum
41  {
42  kDefaultPort = 4008
43  };
44 
46  bool Start(const XPAddress &address = XPAddress(kDefaultPort));
47 
49  size_t GetNumActive(void) const;
50 
52  size_t GetNumTotal(void) const;
53 
54 private:
55  RNReplicaNet::RNLog::Log mLog;
56 
57  RNODBCSQL::ODBCSQL mWrite;
58  RNODBCSQL::ODBCSQL mRead;
59  struct RuleInfo
60  {
61  RuleInfo(const std::string &rule,const std::string &data) : mRule(rule),mData(data) {}
62  std::string mRule;
63  std::string mData;
64  };
65  struct PlayerInfo
66  {
67  PlayerInfo(const std::string &name,const std::string &data,int loginID) : mName(name),mData(data),mLoginID(loginID){}
68  std::string mName;
69  std::string mData;
70  int mLoginID;
71  };
72  struct SessionData
73  {
74  SessionData();
75  int mDBIndex;
76  XPAddress mExternalIP;
77  int mConnectionNOnce;
78 
79  // Temporary storage while an update is being received until the end packet then this gets stored into the DB
80  std::list<RuleInfo> mRules;
81  std::list<PlayerInfo> mPlayers;
82  };
83  std::map<Transport *,SessionData> mMapSessionDataByTransport;
84  std::map<int,Transport *> mMapByIndex;
85 
86  size_t mNumActive;
87  size_t mNumTotal;
88 
89  RNODBCSQL::Prepare mPreparedGamelistingsNoFilter;
90  RNODBCSQL::Prepare mPreparedDeleteServerRules;
91  RNODBCSQL::Prepare mPreparedInsertServerRules;
92  RNODBCSQL::Prepare mPreparedGameListingsByID;
93  RNODBCSQL::Prepare mPreparedServerRules;
94  RNODBCSQL::Prepare mPreparedDeleteServerPlayers;
95  RNODBCSQL::Prepare mPreparedInsertServerPlayers;
96  RNODBCSQL::Prepare mPreparedServerPlayers;
97  RNODBCSQL::Prepare mPreparedInsertGameListingsUrlUser;
98  RNODBCSQL::Prepare mPreparedInsertGameListingsUrl;
99  RNODBCSQL::Prepare mPreparedInsertGameListingsUser;
100  RNODBCSQL::Prepare mPreparedInsertGameListings;
101  RNODBCSQL::Prepare mPreparedUpdateGameListingsUrlUser;
102  RNODBCSQL::Prepare mPreparedUpdateGameListingsUrl;
103  RNODBCSQL::Prepare mPreparedUpdateGameListingsUser;
104  RNODBCSQL::Prepare mPreparedDeleteGameListings;
105 
106  bool CallbackPoll(void);
107 
108  bool CallbackParseValidMessage(Transport *transport,DynamicMessageHelper &message,const size_t length);
109 
110  int InsertEntry(const int titleID,const int loginID,const XPAddress &externalIP,const char *url=0,const char *userBlock = 0);
111 
112  bool UpdateEntry(const int index,const char *url = 0,const char *userBlock = 0);
113 
114  bool RemoveEntry(const int index);
115 
116  void CallbackAccepted(Transport *transport);
117 
118  void CallbackDisconnected(Transport *transport);
119 };
120 
121 } // namespace RNLobby
122 
123 } // namespace RNReplicaNet
124 
125 #endif
Definition: Transport.h:35
size_t GetNumTotal(void) const
Returns the total number of advertised sessions.
A server base class that handles encrypted messages to and from a transport.
Definition: BaseTransportServer.h:30
Definition: XPSocket.h:91
size_t GetNumActive(void) const
Returns the number of active advertised sessions.
Definition: AdvertiseServer.h:34
bool Start(const XPAddress &address=XPAddress(kDefaultPort))
Because this uses a TransportUDP connection it will call XPURL::RegisterDefaultTransports() ...
Definition: MessageHelper.h:211