27class DLL_TOOLSFUNCTION
CXSocket :
public CXObject
31 friend CServerListenThread;
36 SOCKET_IDLE_MESSAGE = 0,
45 typedef enum SocketError
XEnumType(
unsigned int)
47 SOCKET_ERROR_NONE = 0,
48 SOCKET_ERROR_NO_SERVICE,
49 SOCKET_ERROR_CANT_GET_HOST_ADDRESS,
50 SOCKET_ERROR_NOT_CREATED,
51 SOCKET_ERROR_CANT_CREATE,
52 SOCKET_ERROR_CANT_CLOSE,
53 SOCKET_ERROR_CANT_CONNECT,
54 SOCKET_ERROR_CANT_LISTEN,
55 SOCKET_ERROR_CANT_BIND,
56 SOCKET_ERROR_INIT_FAILS_FIRST = SOCKET_ERROR_NO_SERVICE,
57 SOCKET_ERROR_INIT_FAILS_LAST = SOCKET_ERROR_CANT_BIND,
58 SOCKET_ERROR_CANT_SEND,
59 SOCKET_ERROR_CANT_SELECT,
61 SOCKET_ERROR_NO_DATA_AVAILABLE,
62 SOCKET_ERROR_CONNECTION_CLOSED,
63 SOCKET_ERROR_CANT_RECEIVE,
66 typedef enum SocketFlags
XEnumType(
unsigned int)
68 SOCKET_FLAGS_NONE = 0x00,
69 SOCKET_FLAGS_CLIENT = 0x01,
70 SOCKET_FLAGS_SERVER = 0x02,
73 SOCKET_FLAGS_KEEP_OPEN_ON_DESTROY = 0x10000,
76 typedef enum ReadDataMode
XEnumType(
unsigned int)
78 READ_WAITING_DATA = 0,
79 ONLY_IF_AVAILABLE_DATA,
80 WAIT_FOR_AVAILABLE_DATA
85 typedef bool (*SocketUserCancelCallback)(
void *callbackData);
88 mutable SocketError errorCode;
90 unsigned int maxClient, clientCount;
94 void *callbackUserData;
95 SocketReceiveDataCallback receiveDataCallback;
96 SocketUserCancelCallback userCancelCallback;
99 static bool InitService();
100 static void CloseService();
102 bool SendData(
const void *data,
fileuint datasize)
const;
103 bool ReadDataStream(
void *
message,
void *&data, ReadDataMode mode)
const;
104 static unsigned int GetDataBlocks(
void *
message,
const void *data, CDataBlockArray&
blocks);
112 const xSocket GetHandle()
const;
114 bool Attach(
const xSocket handle);
118 void SetCallbackData(
void *callbackUserData);
119 virtual bool UserCancel()
const;
120 void SetUserCancelCallback(SocketUserCancelCallback callback);
123 void SetReceiveDataCallback(SocketReceiveDataCallback callback);
126 SocketError GetErrorCode()
const {
return errorCode; }
127 void SetErrorCode(CXSocket::SocketError
error) { errorCode =
error; }
131 bool SendDatas(
unsigned int messageID,
const void *data,
fileuint size, ...)
const;
133 bool ReadCustomData(
unsigned int&
messageID,
CCustomData& data, ReadDataMode mode = ONLY_IF_AVAILABLE_DATA)
const;
134 void *ReadDatas(
unsigned int &
messageID,
fileuint & datasize, CDataBlockArray&
blocks, ReadDataMode mode)
const;
135 SocketError HasDataAvailable(
bool waitForData)
const;
142 bool StartListening();
143 bool StopListening(
bool wait);
144 unsigned int GetMaxClient()
const {
return maxClient; }
148 static void Free(
void *data);