summaryrefslogtreecommitdiff
path: root/src/3rd_party-static/MessageBroker/src/client/mb_tcpclient.cpp
blob: 02db417c2620ea2633e425d9eeea9a9ca7af1cba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**
 * \file mb_tcpclient.cpp
 * \brief MessageBroker TCP client.
 * \author AKara
 */

#include "mb_tcpclient.hpp"
#include "MBDebugHelper.h" 

namespace NsMessageBroker
{

   TcpClient::TcpClient(const std::string& address, uint16_t port) : Client(address, port)
   {
      m_protocol = networking::TCP;
   }

   TcpClient::~TcpClient()
   {
   }

   ssize_t TcpClient::Send(const std::string& data)
   {
      std::string rep = data;
      int bytesToSend = rep.length();
      const char* ptrBuffer = rep.c_str();
      do
      {
         int retVal = send(m_sock, ptrBuffer, bytesToSend, 0);
         if(retVal == -1)
         {
            return -1;
         }
         bytesToSend -= retVal;
         ptrBuffer += retVal;
      }while(bytesToSend > 0); 
      return rep.length();
   }

   ssize_t TcpClient::Recv(std::string& data)
   {
      char buf[1500];
      ssize_t nb = -1;

      if((nb = ::recv(m_sock, buf, sizeof(buf), 0)) == -1)
      {
         std::cerr << "Error while receiving" << std::endl;
         return -1;
      }

      data = std::string(buf, nb);
      DBG_MSG(("Received from server: %s\n", data.c_str()));

      return nb;
   }

} /* namespace NsMessageBroker */