ZMQClient.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "ZMQClient.hh"
  2. #include <iostream>
  3. ZMQClient::ZMQClient() :
  4. cancel( 0 ),
  5. socket(context, ZMQ_REQ)
  6. {
  7. addr = "";
  8. }
  9. ZMQClient::~ZMQClient()
  10. {
  11. socket.disconnect(addr);
  12. socket.close();
  13. }
  14. void ZMQClient::connect(std::string address){
  15. addr = address;
  16. if(address != ""){
  17. socket.connect(address.c_str());
  18. int timeout = 0;
  19. socket.setsockopt( ZMQ_LINGER, timeout );
  20. }
  21. }
  22. std::string ZMQClient::sendMessageToServer(const void *messageData, int messageLength, bool sendMore){
  23. zmq::message_t message(messageLength);
  24. memcpy((void *)message.data(), messageData, messageLength);
  25. if( !socket.send(message, sendMore ? ZMQ_SNDMORE : 0) )
  26. return "";
  27. return sendMore ? "" : receiveMessage();
  28. }
  29. std::string ZMQClient::receiveMessage(){
  30. // Wait for reply
  31. zmq::message_t reply;
  32. int ok;
  33. do {
  34. ok = socket.recv(&reply, ZMQ_DONTWAIT);
  35. } while( ok == 0 && !cancel );
  36. if( ok < 1 || cancel )
  37. return "";
  38. std::string replyMessage = std::string(static_cast<char *>(reply.data()), reply.size());
  39. return replyMessage;
  40. /*zmq::message_t reply;
  41. socket.recv(&reply);
  42. std::string replyMessage = std::string(static_cast<char *>(reply.data()), reply.size());
  43. return replyMessage;*/
  44. }
  45. std::string ZMQClient::sendStringToServer(std::string messageStr, bool sendMore){
  46. return sendMessageToServer(messageStr.c_str(), messageStr.size(), sendMore);
  47. }
  48. std::string ZMQClient::sendStringsToServer(std::vector<std::string> messages, bool sendMore){
  49. for(int unsigned i = 0; i < messages.size() - 1; i++){
  50. sendStringToServer(messages[i], true);
  51. }
  52. return sendStringToServer(messages.back(), sendMore);
  53. }
  54. /* Veraltet und bringt Server zum absturtz
  55. std::string ZMQClient::sendImageToServer(cv::Mat image, bool sendMore){
  56. if(!image.isContinuous())
  57. {
  58. image = image.clone();
  59. }
  60. sendStringsToServer({std::to_string(image.cols), std::to_string(image.rows), "3"}, true);
  61. return sendMessageToServer(image.data, image.cols * image.rows * 3, sendMore);
  62. }*/
  63. std::string ZMQClient::sendImageToServer(cv::Mat image, bool sendMore){
  64. if(!image.isContinuous())
  65. {
  66. image = image.clone();
  67. }
  68. sendStringsToServer({std::to_string(image.cols), std::to_string(image.rows), "3"}, true);
  69. std::vector<uchar> buff;//buffer for coding
  70. std::vector<int> param(2);
  71. param[0] = cv::IMWRITE_JPEG_QUALITY;
  72. param[1] = 60;//default(95) 0-100
  73. cv::imencode(".jpg", image, buff, param);
  74. return sendMessageToServer(buff.data(), buff.size(), sendMore);
  75. //return sendMessageToServer(image.data, image.cols * image.rows * 3, sendMore);
  76. }