Advertisement
Guest User

Untitled

a guest
Mar 31st, 2014
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <string>
  2. #include <iostream>
  3. #include <sstream>
  4. #include <Windows.h>
  5.  
  6. #include "networkmessage.h"
  7.  
  8. NetworkMessage::NetworkMessage()
  9. {
  10.   Reset();
  11. }
  12.  
  13. NetworkMessage::~NetworkMessage()
  14. {
  15.  
  16. }
  17.  
  18. void NetworkMessage::Reset()
  19. {
  20.   m_MsgSize = 0;
  21.   m_ReadPos = 2;
  22. }
  23.  
  24. bool NetworkMessage::ReadFromSocket(SOCKET socket)
  25. {
  26.  
  27.     // just read the size to avoid reading 2 messages at once
  28.     m_MsgSize = recv(socket, (char*)m_MsgBuf, 2, 0);
  29.  
  30.     // for now we expect 2 bytes at once, it should not be splitted
  31.     int datasize = m_MsgBuf[0] | m_MsgBuf[1] >> 8;
  32.     if ((m_MsgSize != 2) || (datasize > NETWORKMESSAGE_MAXSIZE-2))
  33.     {
  34.         Reset();
  35.         return false;
  36.     }
  37.  
  38.     // read the real data
  39.     m_MsgSize += recv(socket, (char*)m_MsgBuf+2, datasize, 0);
  40.  
  41.     // we got something unexpected/incomplete
  42.     if ((m_MsgSize <= 2) || ((m_MsgBuf[0] | m_MsgBuf[1] >> 8) != m_MsgSize-2))
  43.     {
  44.         Reset();
  45.         return false;
  46.     }
  47.  
  48.     // ok, ...reading starts after the size
  49.     m_ReadPos = 2;
  50.  
  51.     return true;
  52. }
  53.  
  54. #ifndef __NETWORK_MESSAGE_H__
  55. #define __NETWORK_MESSAGE_H__
  56.  
  57. #define NETWORKMESSAGE_MAXSIZE 16384
  58.  
  59. class NetworkMessage
  60. {
  61. public:
  62.   NetworkMessage();
  63.   virtual ~NetworkMessage();
  64.  
  65.  
  66.   // Resets the internal buffer to an empty message
  67.   void Reset();
  68.  
  69.   // Socket functions
  70.   bool ReadFromSocket(SOCKET socket);
  71.  
  72. protected:
  73.   int m_MsgSize;
  74.   int m_ReadPos;
  75.   unsigned char m_MsgBuf[NETWORKMESSAGE_MAXSIZE];
  76. };
  77.  
  78.  
  79. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement