Registers standard message handlers.
Sets up the message handler registry with known message-handler mappings.
133{
134
135 auto ctx = std::make_shared<irsol::server::handlers::Context>(*this);
136
137
138 registerMessageHandler<protocol::Inquiry, handlers::InquiryFrameRateHandler>("fr", ctx);
139 registerMessageHandler<protocol::Assignment, handlers::AssignmentFrameRateHandler>("fr", ctx);
140 registerMessageHandler<protocol::Assignment, handlers::AssignmentInputSequenceLengthHandler>(
141 "isl", ctx);
142 registerMessageHandler<protocol::Assignment, handlers::AssignmentIntegrationTimeHandler>(
143 "it", ctx);
144 registerMessageHandler<protocol::Inquiry, handlers::InquiryIntegrationTimeHandler>("it", ctx);
145 registerMessageHandler<protocol::Inquiry, handlers::InquiryInputSequenceLengthHandler>(
146 "isl", ctx);
147 registerMessageHandler<protocol::Command, handlers::CommandAbortHandler>("abort", ctx);
148 registerMessageHandler<protocol::Command, handlers::CommandGIHandler>("gi", ctx);
149 registerMessageHandler<protocol::Command, handlers::CommandGISHandler>("gis", ctx);
150 registerMessageHandler<protocol::Inquiry, handlers::InquiryImgLeftHandler>("img_l", ctx);
151 registerMessageHandler<protocol::Inquiry, handlers::InquiryImgTopHandler>("img_t", ctx);
152 registerMessageHandler<protocol::Inquiry, handlers::InquiryImgWidthHandler>("img_w", ctx);
153 registerMessageHandler<protocol::Inquiry, handlers::InquiryImgHeightHandler>("img_h", ctx);
154 registerMessageHandler<protocol::Assignment, handlers::AssignmentImgLeftHandler>("img_l", ctx);
155 registerMessageHandler<protocol::Assignment, handlers::AssignmentImgTopHandler>("img_t", ctx);
156 registerMessageHandler<protocol::Assignment, handlers::AssignmentImgWidthHandler>("img_w", ctx);
157 registerMessageHandler<protocol::Assignment, handlers::AssignmentImgHeightHandler>("img_h", ctx);
158
159 registerLambdaHandler<protocol::Command>(
160 "image_data",
161 ctx,
162 [](
163 std::shared_ptr<handlers::Context> ctx,
164 std::shared_ptr<irsol::server::ClientSession> client,
165 protocol::Command&& cmd) -> std::vector<protocol::OutMessage> {
166 std::vector<protocol::OutMessage>
result;
167 auto& cam = ctx->app.camera();
168 auto img = cam.captureImage(std::chrono::milliseconds(10000));
169
170 if(img.IsEmpty()) {
171 IRSOL_NAMED_LOG_ERROR(client->id(), "Failed to capture image.");
172 result.emplace_back(irsol::protocol::Error::from(cmd, "Failed to capture image"));
173 return result;
174 }
175
176 uint32_t width = static_cast<uint32_t>(img.GetWidth());
177 uint32_t height = static_cast<uint32_t>(img.GetHeight());
178 size_t dataSize = img.GetSize();
179
180 const void* imageBuffer = img.GetImageData();
181 std::vector<irsol::types::byte_t> rawData(dataSize);
182 memcpy(rawData.data(), imageBuffer, dataSize);
183
187 });
188}
Represents a binary data object within the protocol.