Skip to content

Commit 92004ed

Browse files
committed
runtime/main.cpp : fix command name for state_update
Refactor socket routers
1 parent 564a0bc commit 92004ed

File tree

1 file changed

+28
-17
lines changed

1 file changed

+28
-17
lines changed

src/candlewick/runtime/main.cpp

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ using cdw::multibody::Visualizer;
2323
constexpr std::string_view CMD_##name = #name
2424

2525
CANDLEWICK_RUNTIME_DEFINE_COMMAND(send_models);
26-
CANDLEWICK_RUNTIME_DEFINE_COMMAND(send_state);
26+
CANDLEWICK_RUNTIME_DEFINE_COMMAND(state_update);
2727
CANDLEWICK_RUNTIME_DEFINE_COMMAND(send_cam_pose);
2828
CANDLEWICK_RUNTIME_DEFINE_COMMAND(clean);
2929

@@ -32,13 +32,16 @@ using RowMat4d = Eigen::Matrix<pin::context::Scalar, 4, 4, Eigen::RowMajor>;
3232
struct ApplicationContext {
3333
pin::Model model;
3434
pin::GeometryModel visual_model;
35+
pin::GeometryModel collision_model;
3536
zmq::context_t ctx{};
3637
zmq::socket_t sync_sock{ctx, zmq::socket_type::rep};
3738
zmq::socket_t state_sock{ctx, zmq::socket_type::sub};
3839
};
3940

4041
/// Handle first incoming message.
41-
bool handle_first_message(zmq::socket_ref sock, ApplicationContext &app_ctx) {
42+
bool handle_first_message(ApplicationContext &app_ctx) {
43+
zmq::socket_t &sock = app_ctx.sync_sock;
44+
4245
while (true) {
4346
std::array<zmq::message_t, 2> msgs;
4447

@@ -70,17 +73,35 @@ bool handle_first_message(zmq::socket_ref sock, ApplicationContext &app_ctx) {
7073
return false;
7174
}
7275

76+
void pull_socket_router(Visualizer &viz, std::span<zmq::message_t, 2> msgs,
77+
zmq::socket_ref sync_sock) {
78+
auto header = msgs[0].to_string_view();
79+
if (header == CMD_send_cam_pose) {
80+
auto oh = get_handle_from_zmq_msg(std::move(msgs[1]));
81+
msgpack::object obj = oh.get();
82+
ArrayMessage M_msg = obj.as<ArrayMessage>();
83+
auto M = get_eigen_view_from_spec<RowMat4d>(M_msg);
84+
viz.setCameraPose(M);
85+
sync_sock.send(zmq::str_buffer("ok"));
86+
} else if (header == CMD_clean) {
87+
viz.clean();
88+
sync_sock.send(zmq::str_buffer("ok"));
89+
}
90+
}
91+
7392
void run_main_loop(Visualizer &viz, ApplicationContext &app_ctx) {
7493

7594
while (!viz.shouldExit()) {
7695
std::array<zmq::message_t, 2> msgs;
96+
97+
// route subscriber socket
7798
auto rec = zmq::recv_multipart_n(app_ctx.state_sock, msgs.begin(), 2,
7899
zmq::recv_flags::dontwait);
79100

80101
if (rec) {
81102
// route through message headers
82103
auto header = msgs[0].to_string_view();
83-
if (header == CMD_send_state) {
104+
if (header == CMD_state_update) {
84105
auto oh = get_handle_from_zmq_msg(std::move(msgs[1]));
85106
msgpack::object obj = oh.get();
86107
std::tuple<ArrayMessage, std::optional<ArrayMessage>> arrays;
@@ -96,21 +117,11 @@ void run_main_loop(Visualizer &viz, ApplicationContext &app_ctx) {
96117
}
97118
}
98119

120+
// route synchronous socket
99121
rec = zmq::recv_multipart_n(app_ctx.sync_sock, msgs.begin(), 2,
100122
zmq::recv_flags::dontwait);
101123
if (rec) {
102-
auto header = msgs[0].to_string_view();
103-
if (header == CMD_send_cam_pose) {
104-
auto oh = get_handle_from_zmq_msg(std::move(msgs[1]));
105-
msgpack::object obj = oh.get();
106-
ArrayMessage M_msg = obj.as<ArrayMessage>();
107-
auto M = get_eigen_view_from_spec<RowMat4d>(M_msg);
108-
viz.setCameraPose(M);
109-
app_ctx.sync_sock.send(zmq::str_buffer("ok"));
110-
} else if (header == CMD_clean) {
111-
viz.clean();
112-
app_ctx.sync_sock.send(zmq::str_buffer("ok"));
113-
}
124+
pull_socket_router(viz, msgs, app_ctx.sync_sock);
114125
}
115126

116127
viz.display();
@@ -138,7 +149,7 @@ int main(int argc, char **argv) {
138149
zmq::socket_t &state_sock = app_ctx.state_sock;
139150
sync_sock.bind(std::format("tcp://{:s}:{:d}", hostname, port));
140151
state_sock.bind(std::format("tcp://{:s}:{:d}", hostname, port + 2));
141-
state_sock.set(zmq::sockopt::subscribe, CMD_send_state);
152+
state_sock.set(zmq::sockopt::subscribe, CMD_state_update);
142153

143154
std::string endpoint;
144155
endpoint = sync_sock.get(zmq::sockopt::last_endpoint);
@@ -147,7 +158,7 @@ int main(int argc, char **argv) {
147158
SDL_Log("ZMQ endpoint (state): %s", endpoint.c_str());
148159

149160
// Handle first message
150-
bool loaded_models = handle_first_message(sync_sock, app_ctx);
161+
bool loaded_models = handle_first_message(app_ctx);
151162
if (!loaded_models)
152163
return 1;
153164

0 commit comments

Comments
 (0)