@@ -73,24 +73,25 @@ void ZmqConnector::message_buffer_deallocate(void *data, void *hint)
73
73
free (data);
74
74
}
75
75
76
- ImageData ZmqConnector::requestImage (size_t cameraId) {
77
- std::string cmdMsg = " REQUEST_IMAGE_" ;
78
- cmdMsg += std::to_string (cameraId);
79
- void * img_message = malloc (cmdMsg.length () * sizeof (char ));
80
- memcpy (img_message, cmdMsg.c_str (), cmdMsg.length ());
81
-
82
- auto imageRequestMessage = zmq::message_t (img_message,
83
- cmdMsg.length (),
84
- ZmqConnector::message_buffer_deallocate,
85
- nullptr );
86
- this ->requesterSocket ->send (imageRequestMessage, zmq::send_flags::none);
76
+ ImageData ZmqConnector::requestImage (size_t cameraId, bool shouldReturnImage) {
77
+ auto cameraIdAsString = std::to_string (cameraId);
78
+ zmq::message_t msgCameraId (cameraIdAsString);
79
+ zmq::message_t msgShouldReturnImage (std::to_string (shouldReturnImage).c_str (), sizeof (char ));
80
+ auto res = this ->requesterSocket ->send (zmq::str_buffer (" REQUEST_IMAGE" ),
81
+ zmq::send_flags::sndmore);
82
+ this ->requesterSocket ->send (msgCameraId, zmq::send_flags::sndmore);
83
+ this ->requesterSocket ->send (msgShouldReturnImage, zmq::send_flags::none);
87
84
88
85
// SAFETY: it's okay to discard these [[nodiscard]] values because
89
86
// 1) the returned optional could only be empty if ZeroMQ fails due to EAGAIN on a non-blocking socket;
90
87
// but our socket is not non-blocking
91
88
// 2) the returned length in the (present) optional is recoverable from the given message's `.size()` method.
92
89
auto imageLengthMessage = zmq::message_t ();
93
90
auto imageMessage = zmq::message_t ();
91
+ auto centerOfBrightnessX = zmq::message_t ();
92
+ auto centerOfBrightnessY = zmq::message_t ();
93
+ auto cobYMsgSize = this ->requesterSocket ->recv (centerOfBrightnessY, zmq::recv_flags::none);
94
+ auto cobXMsgSize = this ->requesterSocket ->recv (centerOfBrightnessX, zmq::recv_flags::none);
94
95
static_cast <void >(this ->requesterSocket ->recv (imageLengthMessage, zmq::recv_flags::none));
95
96
static_cast <void >(this ->requesterSocket ->recv (imageMessage, zmq::recv_flags::none));
96
97
@@ -100,7 +101,17 @@ ImageData ZmqConnector::requestImage(size_t cameraId) {
100
101
void * image = malloc (imageBufferLength*sizeof (char ));
101
102
memcpy (image, imagePoint, imageBufferLength*sizeof (char ));
102
103
103
- return ImageData{imageBufferLength, image};
104
+ auto returnData = ImageData ();
105
+ returnData.imageBuffer = image;
106
+ returnData.imageBufferLength = imageBufferLength;
107
+ returnData.centerOfBrightness = std::nullopt;
108
+
109
+ if (cobXMsgSize.has_value ()) {
110
+ returnData.centerOfBrightness = Eigen::Vector2d (*centerOfBrightnessX.data <double >(),
111
+ *centerOfBrightnessY.data <double >());
112
+ }
113
+
114
+ return returnData;
104
115
}
105
116
106
117
0 commit comments