-
Notifications
You must be signed in to change notification settings - Fork 760
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat/monitor poll #414
base: master
Are you sure you want to change the base?
Feat/monitor poll #414
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2224,6 +2224,53 @@ class monitor_t | |
on_monitor_started(); | ||
} | ||
|
||
#if ZMQ_VERSION_MAJOR >= 4 | ||
bool get_event(zmq_event_t& eventMsg, std::string& address, zmq::recv_flags flags = zmq::recv_flags::none) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I am not sure about the signature of this method. What about
(This requires C++17 this way, but we can also do this with the fallback to This removes the ambiguity of whether the original value of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok, I'm not very familiar with std::optional and will try to implement this way |
||
{ | ||
assert(_monitor_socket); | ||
|
||
eventMsg.event = 0; | ||
eventMsg.value = 0; | ||
address = std::string(); | ||
|
||
{ | ||
message_t msg; | ||
int rc = zmq_msg_recv(msg.handle(), _monitor_socket.handle(), | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can't this use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Of course, but then it is not possible to use the same behaviour as the old check_event. Otherwise I will need to use a try catch statement |
||
static_cast<int>(flags)); | ||
|
||
if (rc == -1) | ||
{ | ||
if (zmq_errno() == ETERM || zmq_errno() == EAGAIN) | ||
return false; | ||
Comment on lines
+2253
to
+2254
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why does this also returns false on There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Check https://github.com/zeromq/cppzmq/blob/master/zmq.hpp#L2274. I just kept same behaviour implemented in check_event(). If this is not mandatory, I can just throw an exception and not use a std::optionnal as described above, but just std::pair<> There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hm, yes, that's right. It's inconsistent one way or the other, but I think the behaviour of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. what we should implement in this case? Maybe we shall throw an exception? |
||
else | ||
throw error_t(); | ||
} | ||
|
||
const char *data = msg.data<char>(); | ||
memcpy(&eventMsg.event, data, sizeof(uint16_t)); | ||
data += sizeof(uint16_t); | ||
memcpy(&eventMsg.value, data, sizeof(int32_t)); | ||
} | ||
|
||
message_t addrMsg; | ||
int rc = zmq_msg_recv(addrMsg.handle(), _monitor_socket.handle(), | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Like above, can't this use There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See prev comment
Could you add this to the contribution guidelines of the project?
I don't like to put effort on something that will be not merged. I was waiting for a green thumb before putting more work on this, as I did not asked anyone about the design of this PR ;) Thanks for reviewing, will try to solve all of those next week. BR |
||
static_cast<int>(flags)); | ||
|
||
if (rc == -1) | ||
{ | ||
if (zmq_errno() == ETERM) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Again, why does this return There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. See my comment above |
||
return false; | ||
else | ||
throw error_t(); | ||
} | ||
|
||
const char *str = addrMsg.data<char>(); | ||
address = std::string(str, str + addrMsg.size()); | ||
|
||
return true; | ||
} | ||
#endif | ||
|
||
bool check_event(int timeout = 0) | ||
{ | ||
assert(_monitor_socket); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What does
lbd
stand for?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"lbd" is short for "lambda". I like to differentiate "callback" methods over classical variable in my code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm. I am not sure if it's necessary to use a prefix at all (if it were a function pointer, would it make a difference?), but if you feel it's good to have, please use
lambda_
.