ReplicaNet and RNLobby  1
BaseTransportServer.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 _BASETRANSPORTSERVER_H_
13 #define _BASETRANSPORTSERVER_H_
14 #include <map>
15 #include "RNPlatform/Inc/SysTime.h"
16 #include "RNPlatform/Inc/Encryption.h"
17 #include "RNPlatform/Inc/ThreadClass.h"
18 #include "RNPlatform/Inc/Thread.h"
19 #include "RNXPURL/Inc/Transport.h"
20 #include "RNPlatform/Inc/MessageHelper.h"
21 #include "RNLobby/Inc/CommonServer.h"
22 
23 namespace RNReplicaNet
24 {
25 
26 namespace RNLobby
27 {
28 
30 class BaseTransportServer : private CommonServer , public ThreadClass , public Thread
31 {
32 public:
34  virtual ~BaseTransportServer();
35 
39  void SetEncryptionKey(const void *data,const int length);
40 
46  virtual bool StartWithTransport(Transport *transport,const bool allowDelete = true,const bool isListen = true);
47 
51  virtual bool Stop(void);
52 
53  static SysTimeType FloatTime(void);
54 
56  size_t GetNumConnections(void) const;
57 
59  size_t GetNumTotalSessions(void) const;
60 
62  bool SetAsDisconnecting(Transport *transport);
63 
64 protected:
65  struct Entry
66  {
67  Entry() : mLastPacketTime(0.0f) , mLastPacketsSent(0) , mWaitingForDisconnect(-1.0f) , mError(false) ,
68  mClientACKConnectionNonce(false) , mCachedConnectionNonce(0) {}
69  SysTimeType mLastPacketTime;
70  int mLastPacketsSent;
71  SysTimeType mWaitingForDisconnect;
72  bool mError;
73  bool mClientACKConnectionNonce;
74  int mCachedConnectionNonce;
75  };
76 
79  virtual bool CallbackParseValidMessage(Transport *transport,DynamicMessageHelper &message,const size_t length) { return true; }
80 
82  virtual bool PackageAndSendData(Transport *transport,const DynamicMessageHelper &message);
83 
87  virtual bool CallbackParsePacketData(Transport *transport,void *data,size_t &length,DynamicMessageHelper &result,Entry &entry);
88 
90  virtual void CallbackAccepted(Transport *transport) {}
91 
93  virtual void CallbackDisconnected(Transport *transport) {}
94 
97  virtual void CallbackDataReceived(DynamicMessageHelper &message) {}
98 
101  virtual void CallbackDataSend(DynamicMessageHelper &message) {}
102 
105  virtual void CallbackQueryReplyTime(const float seconds) {}
106 
109  virtual bool CallbackPoll(void) { return true; }
110 
113  virtual void CallbackTidy(void) {}
114 
115  int ThreadEntry(void);
116 
117  void GenerateNewNonce(void);
118 
119 private:
120 
121  void ThreadExiting(const int returnCode);
122  void Tidy(void);
123 
124  int RunThink(Transport *transport,Entry &entry);
125 
126 protected:
127  Transport *mTransport;
128  bool mAllowDelete;
129 
130  int mNOnce;
131  std::map<Transport*,Entry> mConnected;
132 
133  bool mIsListen;
134  bool mClientGotAPacket;
135  bool mClientIsStable;
136 
137  Entry mClientEntry;
138 
139  size_t mNumConnections;
140  size_t mNumTotalConnections;
141 
143  int GetConnectionNOnce(Transport *transport = 0, const Entry *entry = 0);
144 
145  int CalculateConnectionNOnce(Transport *transport);
146 
147  const Entry *FindEntry(Transport *transport);
148 };
149 
150 } // namespace RNLobby
151 
152 } // namespace RNReplicaNet
153 
154 #endif
Definition: Transport.h:35
virtual void CallbackAccepted(Transport *transport)
Called when the server accepts a connection or when a non-listen class instance connection gets a fir...
Definition: BaseTransportServer.h:90
virtual void CallbackQueryReplyTime(const float seconds)
Definition: BaseTransportServer.h:105
A server base class that handles encrypted messages to and from a transport.
Definition: BaseTransportServer.h:30
int GetConnectionNOnce(Transport *transport=0, const Entry *entry=0)
Gets the connection's NOnce with respect to a Transport.
bool SetAsDisconnecting(Transport *transport)
This will put the connection into a list pending disconnection after a timeout period.
virtual void CallbackTidy(void)
Definition: BaseTransportServer.h:113
A common server support class.
Definition: CommonServer.h:27
virtual bool CallbackParseValidMessage(Transport *transport, DynamicMessageHelper &message, const size_t length)
Definition: BaseTransportServer.h:79
size_t GetNumTotalSessions(void) const
Returns the total number of connections.
size_t GetNumConnections(void) const
Returns the number of active connections.
virtual bool StartWithTransport(Transport *transport, const bool allowDelete=true, const bool isListen=true)
virtual bool CallbackPoll(void)
Definition: BaseTransportServer.h:109
virtual void CallbackDisconnected(Transport *transport)
Called when the transport is disconnected. This is also called if there is a problem trying to connec...
Definition: BaseTransportServer.h:93
virtual void CallbackDataSend(DynamicMessageHelper &message)
Definition: BaseTransportServer.h:101
Definition: BaseTransportServer.h:65
virtual bool CallbackParsePacketData(Transport *transport, void *data, size_t &length, DynamicMessageHelper &result, Entry &entry)
virtual bool PackageAndSendData(Transport *transport, const DynamicMessageHelper &message)
The class mutex is locked during the context of this function.
virtual void CallbackDataReceived(DynamicMessageHelper &message)
Definition: BaseTransportServer.h:97
Definition: MessageHelper.h:211
void SetEncryptionKey(const void *data, const int length)
Definition: ThreadClass.h:96
Definition: Thread.h:29