...
This commit is contained in:
@@ -45,6 +45,11 @@ if(ADCLIB_BUILD_EXAM)
|
|||||||
target_link_libraries(device_exam PRIVATE ${PROJECT_NAME})
|
target_link_libraries(device_exam PRIVATE ${PROJECT_NAME})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(ADCLIB_BUILD_EXAM)
|
||||||
|
add_executable(netmsg_exam examples/netmsg_exam.cpp)
|
||||||
|
target_link_libraries(netmsg_exam PRIVATE ${PROJECT_NAME})
|
||||||
|
endif()
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
include(GNUInstallDirs)
|
||||||
install(
|
install(
|
||||||
TARGETS ${PROJECT_NAME}
|
TARGETS ${PROJECT_NAME}
|
||||||
|
|||||||
31
examples/netmsg_exam.cpp
Normal file
31
examples/netmsg_exam.cpp
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#include <print>
|
||||||
|
|
||||||
|
#include <adclib/adclib_netmsg.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
adc::AdcNetworkMessage msg;
|
||||||
|
|
||||||
|
std::println("is ACK: {}", msg.isACK());
|
||||||
|
|
||||||
|
msg.createSET("ATTR1", snplib::snplib_serialization_params_t{}, 10, std::vector<char>{'V', 'A', 'L'});
|
||||||
|
|
||||||
|
std::println("KEY: <{}>", msg.key());
|
||||||
|
|
||||||
|
std::println("VALUE: <{}>", msg.value());
|
||||||
|
|
||||||
|
std::println("is SET: {}", msg.isSET());
|
||||||
|
|
||||||
|
std::println("is VALID: {}", msg.isValid());
|
||||||
|
|
||||||
|
|
||||||
|
std::string str{"SET ATTRQ 32.235 dwejh kd2jl"};
|
||||||
|
|
||||||
|
msg.fromCharRange(str);
|
||||||
|
|
||||||
|
std::println("KEY: <{}>", msg.key());
|
||||||
|
|
||||||
|
std::println("VALUE: <{}>", msg.value());
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -42,6 +42,8 @@ public:
|
|||||||
|
|
||||||
using base_t::isValid;
|
using base_t::isValid;
|
||||||
using base_t::key;
|
using base_t::key;
|
||||||
|
using base_t::value;
|
||||||
|
using base_t::valueSeq;
|
||||||
|
|
||||||
AdcNetworkMessage() = default;
|
AdcNetworkMessage() = default;
|
||||||
|
|
||||||
@@ -70,6 +72,35 @@ public:
|
|||||||
return std::ranges::equal(this->_key, ADCLIB_NETMSG_KEYWORD_GET);
|
return std::ranges::equal(this->_key, ADCLIB_NETMSG_KEYWORD_GET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error_t fromCharRange(snplib::snplib_input_char_range_c auto&& bytes)
|
||||||
|
requires(!std::same_as<CharRangeT, std::remove_cvref_t<decltype(bytes)>>)
|
||||||
|
{
|
||||||
|
if constexpr (requires(CharRangeT t) { t.clear(std::declval<size_t>()); }) {
|
||||||
|
this->_ownByteSeq.clear();
|
||||||
|
} else {
|
||||||
|
this->_ownByteSeq = CharRangeT();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ranges::copy(std::forward<decltype(bytes)>(bytes), std::back_inserter(this->_ownByteSeq));
|
||||||
|
|
||||||
|
return fromCharRange(this->_ownByteSeq);
|
||||||
|
}
|
||||||
|
|
||||||
|
error_t fromCharRange(CharRangeT& bytes)
|
||||||
|
{
|
||||||
|
auto err = base_t::fromCharRange(bytes, {.keyval_delim = ADCLIB_NETMSG_KEYWORD_PARAM_DELIM,
|
||||||
|
.valseq_delim = ADCLIB_NETMSG_PARAM_PARAM_DELIM});
|
||||||
|
if (err) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!std::ranges::contains(ADCLIB_NETMSG_VALID_KEYWORDS, key())) {
|
||||||
|
this->_isValid = false;
|
||||||
|
// return an error here!!!
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
error_t createACK()
|
error_t createACK()
|
||||||
{
|
{
|
||||||
@@ -86,33 +117,56 @@ public:
|
|||||||
requires(sizeof...(ArgTs) > 0)
|
requires(sizeof...(ArgTs) > 0)
|
||||||
error_t createSET(ATTR_NAME_T&& attr_name, ArgTs&&... args)
|
error_t createSET(ATTR_NAME_T&& attr_name, ArgTs&&... args)
|
||||||
{
|
{
|
||||||
|
this->_isValid = false;
|
||||||
|
|
||||||
auto err = this->setKeyValue(ADCLIB_NETMSG_KEYWORD_SET, std::forward<ATTR_NAME_T>(attr_name));
|
auto err = this->setKeyValue(ADCLIB_NETMSG_KEYWORD_SET, std::forward<ATTR_NAME_T>(attr_name));
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this->appendValue(std::forward<ArgTs>(args)...);
|
err = this->appendValue(std::forward<ArgTs>(args)...);
|
||||||
|
if (err) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->_isValid = true;
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <snplib::snplib_serializable_c ATTR_NAME_T, typename... ArgTs>
|
template <snplib::snplib_serializable_c ATTR_NAME_T, typename... ArgTs>
|
||||||
error_t createGET(ATTR_NAME_T&& attr_name, ArgTs&&... args)
|
error_t createGET(ATTR_NAME_T&& attr_name, ArgTs&&... args)
|
||||||
{
|
{
|
||||||
|
this->_isValid = false;
|
||||||
|
|
||||||
auto err = this->setKeyValue(ADCLIB_NETMSG_KEYWORD_GET, std::forward<ATTR_NAME_T>(attr_name));
|
auto err = this->setKeyValue(ADCLIB_NETMSG_KEYWORD_GET, std::forward<ATTR_NAME_T>(attr_name));
|
||||||
if (err) {
|
if (err) {
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->_isValid = true;
|
||||||
|
|
||||||
if constexpr (sizeof...(ArgTs)) {
|
if constexpr (sizeof...(ArgTs)) {
|
||||||
return this->appendValue(std::forward<ArgTs>(args)...);
|
err = this->appendValue(std::forward<ArgTs>(args)...);
|
||||||
|
if (err) {
|
||||||
|
this->_isValid = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <snplib::snplib_serializable_c CMD_NAME_T>
|
template <snplib::snplib_serializable_c CMD_NAME_T>
|
||||||
error_t createCMD(CMD_NAME_T&& cmd_name)
|
error_t createCMD(CMD_NAME_T&& cmd_name)
|
||||||
{
|
{
|
||||||
return this->setKeyValue(ADCLIB_NETMSG_KEYWORD_CMD, std::forward<CMD_NAME_T>(cmd_name));
|
this->_isValid = false;
|
||||||
|
|
||||||
|
auto err = this->setKeyValue(ADCLIB_NETMSG_KEYWORD_CMD, std::forward<CMD_NAME_T>(cmd_name));
|
||||||
|
if (!err) {
|
||||||
|
this->_isValid = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user