raSystem  1.0 bata
raClient.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
5  // ----------------------------------------
7  {
8  }
9 
10  bool raClientSocket::Connect(const raString IP, int Port)
11  {
12  m_SocketAddress.sin_family = RA_INET;
13  m_SocketAddress.sin_port = Port;
14  m_SocketAddress.sin_addr.S_un.S_addr = inet_addr(IP.c_str());
15 
16  int err;
17  err = ::connect(m_Socket, (SOCKADDR*) &m_SocketAddress, sizeof(m_SocketAddress));
18  if(err != 0)
19  {
20  char buf[64];
21  sprintf(buf, "ClientSocket::Connect, Fehler Code %d", err);
22  RERROR(buf);
23  }
24 
25  return true;
26  }
27  //------------------------------------------------------------------------------------------
29  {
30  }
32  {
33  }
34  bool raClient::Connect(const raString IP, int Port)
35  {
36  m_Socket.Connect(IP, Port);
37  OnConnect(IP, Port);
38  return true;
39  }
41  {
42  raSocket::fdzero(false);
43  m_Socket.fdset(false);
44 
45  raSocket::select(false);
46  m_BytesToRead = m_Socket.Receive();
47  m_BufferPtr = m_Socket.GetBuffer();
48 
49  if(m_BytesToRead == 0)
50  {
51  OnConnectionLost();
52  }
53 
54  OnReceive(m_BytesToRead);
55 
56  return m_BytesToRead;
57  }
58  bool raClient::Send(LPCSTR Data, int Size)
59  {
60  raSocket::fdzero(true);
61  m_Socket.fdset(true);
62 
63  raSocket::select(true);
64 
65  OnSend(Data, Size);
66  return m_Socket.Send(Data, Size);
67  }
69  {
70  if(m_BufferPtr.c_str())
71  return *((int*) m_BufferPtr.c_str());
72  else return -1;
73  }
75  {
76  int* pPID = (int*)m_sendbuf;
77  *pPID = PID_TEXT;
78  *(pPID + 1) = (int)strlen(Text.c_str());
79  strncpy(m_sendbuf + 8, Text.c_str(), raSocket::RECVBUFLEN - 8);
80 
81  return Send(m_sendbuf, (int)sizeof(raPacketID) + (int)(sizeof(int) + strlen(Text.c_str()) + 1));
82  }
83 
85  {
86  int* pPID = (int*)m_sendbuf;
87  *pPID = PID_VECTOR3;
88  float* px = (float*) pPID + 1;
89  float* py = px + 1;
90  float* pz = py + 1;
91  *px = Vec.x;
92  *py = Vec.y;
93  *pz = Vec.z;
94  return Send(m_sendbuf, sizeof(raPacketID) + 3 * sizeof(float));
95  }
97  {
98  int* pPID = (int*) m_BufferPtr.c_str();
99  int laenge = *(pPID + 1);
100 
101  //strcpy(Buffer.c_str(), ( char*)(pPID + 2));
102  Buffer = raString((char*)(pPID + 2));
103 
104  int nBytesConsumed = 2 * sizeof(int) + laenge + 1;
105  m_BytesToRead -= nBytesConsumed;
106  if(m_BytesToRead > 0)
107  m_BufferPtr += nBytesConsumed;
108  else
109  m_BufferPtr = raString(NULL);
110  return laenge;
111  }
112 
114  {
115  int* pPID = (int*) m_BufferPtr.c_str();
116 
117  float* px = (float*) pPID + 1;
118  float* py = px + 1;
119  float* pz = py + 1;
120 
121  Vec.x = *px;
122  Vec.y = *py;
123  Vec.z = *pz;
124 
125  int nBytesConsumed = sizeof(int) + 3 * sizeof(float);
126  m_BytesToRead -= nBytesConsumed;
127  if(m_BytesToRead > 0)
128  m_BufferPtr += nBytesConsumed;
129  else
130  m_BufferPtr = raString(NULL);
131  }
133  {
134  int* pPID = (int*) m_BufferPtr.c_str();
135 
136  float* px = (float*)pPID + 1;
137  float* py = px + 1;
138 
139  Vec.x = *px;
140  Vec.y = *py;
141 
142  int nBytesConsumed = sizeof(int) + 2 * sizeof(float);
143  m_BytesToRead -= nBytesConsumed;
144  if(m_BytesToRead > 0)
145  m_BufferPtr += nBytesConsumed;
146  else
147  m_BufferPtr = raString(NULL);
148  }
150  {
151  int* pPID = (int*) m_BufferPtr.c_str();
152 
153  float *m11, *m12, *m13, *m14,
154  *m21, *m22, *m23, *m24,
155  *m31, *m32, *m33, *m34,
156  *m41, *m42, *m43, *m44;
157 
158  m11 = (float*)pPID + 1;
159  m12 = m11 + 1;
160  m13 = m12 + 1;
161  m14 = m13 + 1;
162  m21 = m14 + 1;
163  m22 = m21 + 1;
164  m23 = m22 + 1;
165  m24 = m23 + 1;
166  m31 = m24 + 1;
167  m32 = m31 + 1;
168  m33 = m32 + 1;
169  m34 = m33 + 1;
170  m41 = m34 + 1;
171  m42 = m41 + 1;
172  m43 = m42 + 1;
173  m44 = m43 + 1;
174 
175  Mat = raMatrix(*m11, *m12, *m13, *m14, *m21, *m22, *m23, *m24, *m31, *m32, *m33, *m34,
176  *m41, *m42, *m43, *m44);
177 
178  int nBytesConsumed = sizeof(int) + 16 * sizeof(float);
179  m_BytesToRead -= nBytesConsumed;
180  if(m_BytesToRead > 0)
181  m_BufferPtr += nBytesConsumed;
182  else
183  m_BufferPtr = raString(NULL);
184  }
186  {
187  int* pPID = (int*) m_BufferPtr.c_str();
188 
189  float *x = (float*)pPID + 1;
190  float *y = x + 1;
191  float *z = y + 1;
192  float *s = z + 1;
193 
194  Non.v.x = *x;
195  Non.v.y = *y;
196  Non.v.z = *z;
197  Non.s = *s;
198 
199  int nBytesConsumed = sizeof(int) + 16 * sizeof(float);
200  m_BytesToRead -= nBytesConsumed;
201  if(m_BytesToRead > 0)
202  m_BufferPtr += nBytesConsumed;
203  else
204  m_BufferPtr = raString(NULL);
205  }
207  {
208  int *pPID = (int*)m_BufferPtr.c_str();
209 
210  long *x1, *x2;
211  long *y1, *y2;
212 
213  x1 = (long*)pPID + 1;
214  x2 = x1 + 1;
215  y1 = x2 + 1;
216  y2 = y1 + 1;
217 
218  Rec.x1 = *x1;
219  Rec.x2 = *x2;
220  Rec.y1 = *y1;
221  Rec.y2 = *y2;
222 
223  int nBytesConsumed = sizeof(int) + 16 * sizeof(float);
224  m_BytesToRead -= nBytesConsumed;
225  if(m_BytesToRead > 0)
226  m_BufferPtr += nBytesConsumed;
227  else
228  m_BufferPtr = raString(NULL);
229  }
231  {
232  int *pPID = (int*)m_BufferPtr.c_str();
233 
234  float *r, *g, *b, *a;
235 
236  r = (float*)pPID + 1;
237  g = r + 1;
238  b = g + 1;
239  a = b + 1;
240 
241  Col.r = *r;
242  Col.g = *g;
243  Col.b = *b;
244  Col.a = *a;
245 
246  int nBytesConsumed = sizeof(int) + 16 * sizeof(float);
247  m_BytesToRead -= nBytesConsumed;
248  if(m_BytesToRead > 0)
249  m_BufferPtr += nBytesConsumed;
250  else
251  m_BufferPtr = raString(NULL);
252  }
254  {
255  int *pPID = (int*)m_BufferPtr.c_str();
256 
257  float *a, *b, *c, *d;
258 
259  a = (float*)pPID + 1;
260  b = a + 1;
261  c = b + 1;
262  d = c + 1;
263 
264  Plan.a = *a;
265  Plan.b = *b;
266  Plan.c = *c;
267  Plan.d = *d;
268 
269  int nBytesConsumed = sizeof(int) + 16 * sizeof(float);
270  m_BytesToRead -= nBytesConsumed;
271  if(m_BytesToRead > 0)
272  m_BufferPtr += nBytesConsumed;
273  else
274  m_BufferPtr = raString(NULL);
275  }
276 
278  {
279  OnDisconnect();
280 
281  m_Socket.Send(NULL, 0);
282  m_Socket.Disconnect();
283  }
284 };
raFloat y
Definition: raVector3.h:13
long x2
Definition: raRECT.h:17
void ReadMatrix(raMatrix &Mat)
Definition: raClient.cpp:149
raFloat x
Definition: raVector3.h:12
void ReadColor(raColor &Col)
Definition: raClient.cpp:230
void ReadVector2(raVector2 &Vec)
Definition: raClient.cpp:132
static void fdzero(bool write)
Definition: raSocket.cpp:50
static const int RECVBUFLEN
Definition: raSocket.h:27
Definition: raPostID.h:4
bool Connect(const raString IP, int Port)
Definition: raClient.cpp:10
raFloat x
Definition: raVector2.h:10
void ReadQuaternion(raQuaternion &Non)
Definition: raClient.cpp:185
raFloat d
Definition: raPlane.h:13
Definition: raColor.h:5
long y1
Definition: raRECT.h:18
void ReadPlane(raPlane &Plan)
Definition: raClient.cpp:253
float g
Definition: raColor.h:13
virtual bool Send(LPCSTR Data, int Size)
Definition: raClient.cpp:58
static void select(bool write)
Definition: raSocket.cpp:77
float b
Definition: raColor.h:14
raFloat z
Definition: raVector3.h:14
Definition: raPlane.h:3
raClient(void)
Definition: raClient.cpp:28
virtual void Disconnect()
Definition: raClient.cpp:277
long x1
Definition: raRECT.h:17
bool SendVector3(raVector3 &Vec)
Definition: raClient.cpp:84
raFloat c
Definition: raPlane.h:12
bool SendString(raString text)
Definition: raClient.cpp:74
raPacketID
Definition: raPostID.h:1
float a
Definition: raColor.h:15
long y2
Definition: raRECT.h:18
bool Send(LPCSTR Data, int Size)
Definition: raSocket.cpp:93
std::string raString
Definition: raMain.h:107
raFloat y
Definition: raVector2.h:11
raFloat b
Definition: raPlane.h:11
void ReadRect(raRECT &Rec)
Definition: raClient.cpp:206
#define RA_INET
Definition: raPostID.h:3
Definition: raRECT.h:3
int ReadString(raString buffer)
Definition: raClient.cpp:96
virtual int GetNextPacketID()
Definition: raClient.cpp:68
class RAPI raMatrix
Definition: raVector3.h:3
virtual bool Connect(const raString IP, int Port=28015)
Definition: raClient.cpp:34
~raClient(void)
Definition: raClient.cpp:31
void ReadVector3(raVector3 &Vec)
Definition: raClient.cpp:113
raVector3 v
Definition: raQuaternion.h:10
virtual int Receive(void)
Definition: raClient.cpp:40
SOCKET m_Socket
Definition: raSocket.h:30
sockaddr_in m_SocketAddress
Definition: raSocket.h:31
raFloat a
Definition: raPlane.h:10
void RAPI RERROR(raString x)
Definition: raMain.cpp:129
float r
Definition: raColor.h:12