...
This commit is contained in:
73
asibfm700_netserver.cpp
Normal file
73
asibfm700_netserver.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
#include "asibfm700_netserver.h"
|
||||
|
||||
|
||||
namespace asibfm700
|
||||
{
|
||||
|
||||
Asibfm700MountNetServer::Asibfm700MountNetServer(asio::io_context& ctx,
|
||||
Asibfm700Mount& mount,
|
||||
std::shared_ptr<spdlog::logger> logger)
|
||||
: base_t(ctx, mount, std::move(logger), Asibfm700Logger::LOGGER_DEFAULT_FORMAT)
|
||||
{
|
||||
addMarkToPatternIdx("[ASIB-NETSERVER]");
|
||||
|
||||
// to avoid possible compiler optimization (one needs to catch 'mount' strictly by reference)
|
||||
auto* mount_ptr = &mount;
|
||||
|
||||
base_t::_handleMessageFunc = [mount_ptr, this](std::string_view command) {
|
||||
// using mount_error_t = typename Asibfm700Mount::error_t;
|
||||
std::error_code err{};
|
||||
|
||||
Asibfm700NetMessage input_msg;
|
||||
using output_msg_t = Asibfm700NetMessage<handle_message_func_result_t>;
|
||||
output_msg_t output_msg;
|
||||
|
||||
auto nn = std::this_thread::get_id();
|
||||
|
||||
auto ec = parseMessage(command, input_msg);
|
||||
|
||||
if (ec) {
|
||||
output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ERROR_STR, ec);
|
||||
} else {
|
||||
if (input_msg.withKey(ASIBFM700_COMMPROTO_KEYWORD_METEO_STR)) {
|
||||
// what is operation type (set or get)?
|
||||
if (input_msg.paramSize()) { // set operation
|
||||
auto vp = input_msg.paramValue<Asibfm700CCTE::meteo_t>(0);
|
||||
if (vp) {
|
||||
// mount_ptr->updateMeteoERFA(vp.value());
|
||||
mcc::impl::MccSkyPoint::cctEngine.updateMeteoERFA(vp.value());
|
||||
|
||||
output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ACK_STR, input_msg.byteRepr());
|
||||
} else {
|
||||
output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ERROR_STR, vp.error());
|
||||
}
|
||||
} else { // get operation
|
||||
// output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ACK_STR,
|
||||
// ASIBFM700_COMMPROTO_KEYWORD_METEO_STR, mount_ptr->getStateERFA().meteo);
|
||||
output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ACK_STR,
|
||||
ASIBFM700_COMMPROTO_KEYWORD_METEO_STR,
|
||||
mcc::impl::MccSkyPoint::cctEngine.getStateERFA().meteo);
|
||||
}
|
||||
} else if (input_msg.withKey(ASIBFM700_COMMPROTO_KEYWORD_SITEGEO_STR)) {
|
||||
mcc::impl::MccAngleLON lon{mcc::impl::MccSkyPoint::cctEngine.getStateERFA().lon};
|
||||
mcc::impl::MccAngleLAT lat{mcc::impl::MccSkyPoint::cctEngine.getStateERFA().lat};
|
||||
|
||||
// std::tuple lonlat{lon, lat};
|
||||
|
||||
output_msg.construct(mcc::network::MCC_COMMPROTO_KEYWORD_SERVER_ACK_STR,
|
||||
ASIBFM700_COMMPROTO_KEYWORD_SITEGEO_STR, lon, lat);
|
||||
}
|
||||
|
||||
else {
|
||||
// basic network message processing
|
||||
output_msg = base_t::handleMessage<output_msg_t>(input_msg, mount_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
return output_msg.template byteRepr<typename base_t::handle_message_func_result_t>();
|
||||
};
|
||||
}
|
||||
|
||||
Asibfm700MountNetServer::~Asibfm700MountNetServer() {}
|
||||
|
||||
} // namespace asibfm700
|
||||
Reference in New Issue
Block a user