ReplicaNet and RNLobby  1
XPSocketClass.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 /* A class implementation of the C style XPSocket library */
13 #ifndef __XPSOCKETCLASS_H__
14 #define __XPSOCKETCLASS_H__
15 
16 #include "XPSocket.h"
17 
18 namespace RNReplicaNet
19 {
20 
28 class XPSocket
29 {
30 public:
31 friend class XPSocketUrgent;
32 //friend class XPStream;
37  XPSocket();
38 
43  virtual ~XPSocket();
44 
49  static int GetLastError(void);
50 
55  virtual int Create(void);
56 
62  int Connect(const XPAddress &addr);
63 
69  int Send(const char *data);
70 
77  int Send(const char *data,const int len);
78 
85  int Recv(char *const data,const int maxlen);
86 
91  int Close(void);
92 
98  int Listen(const int port = XPSOCK_PORT_ANY);
99 
105  int Listen(const XPAddress &addr);
106 
111  XPSocket *Accept(void);
112 
118  int SetSendBuffer(const int size);
119 
125  int SetRecvBuffer(const int size);
126 
132  int GetAddress(XPAddress *const addr);
133 
139  int GetPeerAddress(XPAddress *const addr);
140 
145  static int GetMaxPacketSize(void) {return XPSOCK_MAXPACKETSIZE;};
146 
152  int MutateSocket(XPSocket *socket);
153 
158  bool IsAlive(void);
159 
165 
166 private:
167 
168  t_XPSocket *mSocket;
170  enum SocketState
171  {
172  TypeUndefined = 0,
173  TypeTCP = 1,
174  TypeUDP = 2
175  };
177  SocketState mSocketState;
178 };
179 
180 /* A macro to make our life easier */
181 #define SOCKET_ASSERT_TYPE(x) \
182  if (mSocketState == (x)) \
183  { \
184  assert(0 && "XPSOCK_ILLEGALOPERATION"); \
185  asocket_lasterror = XPSOCK_ILLEGALOPERATION; \
186  return XPSOCK_EERROR; \
187  } \
188  if ((x) == TypeUDP) \
189  { \
190  mSocketState = TypeTCP; \
191  } \
192  else \
193  { \
194  mSocketState = TypeUDP; \
195  }
196 
197 #define SOCKET_ASSERT_TYPEP(x) \
198  if (mSocketState == (x)) \
199  { \
200  assert(0 && "XPSOCK_ILLEGALOPERATION"); \
201  asocket_lasterror = XPSOCK_ILLEGALOPERATION; \
202  return pcXPSOCK_EERROR; \
203  } \
204  if ((x) == TypeUDP) \
205  { \
206  mSocketState = TypeTCP; \
207  } \
208  else \
209  { \
210  mSocketState = TypeUDP; \
211  }
212 
213 #define pcXPSOCK_EERROR ((RNReplicaNet::XPSocket *) XPSOCK_EERROR)
215 } // namespace RNXPSockets
216 
217 #endif
virtual int Create(void)
Definition: XPSocketClass.cpp:43
int MutateSocket(XPSocket *socket)
Definition: XPSocketClass.cpp:163
int SetSendBuffer(const int size)
Definition: XPSocketClass.cpp:142
int Connect(const XPAddress &addr)
Definition: XPSocketClass.cpp:58
Definition: XPSocket.h:91
static int GetMaxPacketSize(void)
Definition: XPSocketClass.h:145
bool IsAlive(void)
Definition: XPSocketClass.cpp:177
int Send(const char *data)
Definition: XPSocketClass.cpp:65
int SetRecvBuffer(const int size)
Definition: XPSocketClass.cpp:147
int GetAddress(XPAddress *const addr)
Definition: XPSocketClass.cpp:152
t_XPSocket * GetSocketPointer(void)
Definition: XPSocketClass.cpp:182
static int GetLastError(void)
Definition: XPSocketClass.cpp:38
virtual ~XPSocket()
Definition: XPSocketClass.cpp:30
XPSocket * Accept(void)
Definition: XPSocketClass.cpp:114
int GetPeerAddress(XPAddress *const addr)
Definition: XPSocketClass.cpp:157
int Recv(char *const data, const int maxlen)
Definition: XPSocketClass.cpp:79
int Close(void)
Definition: XPSocketClass.cpp:88
Definition: XPSocket.h:167
Definition: XPSocketClass.h:28
int Listen(const int port=XPSOCK_PORT_ANY)
Definition: XPSocketClass.cpp:100
XPSocket()
Definition: XPSocketClass.cpp:21
Definition: XPSocketUrgentClass.h:26