Skip to content

Commit a82a116

Browse files
authored
Merge pull request #586 from mtconnect/main_websocket_fixes_3
Main websocket fixes 3
2 parents 4ce2bc2 + ebb6ee2 commit a82a116

File tree

16 files changed

+1450
-291
lines changed

16 files changed

+1450
-291
lines changed

agent_lib/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ set(AGENT_SOURCES
288288
"${SOURCE_DIR}/sink/rest_sink/session_impl.hpp"
289289
"${SOURCE_DIR}/sink/rest_sink/tls_dector.hpp"
290290
"${SOURCE_DIR}/sink/rest_sink/websocket_session.hpp"
291+
"${SOURCE_DIR}/sink/rest_sink/websocket_request_manager.hpp"
291292

292293
# src/sink/rest_sink SOURCE_FILES_ONLY
293294

src/mtconnect/configuration/async_context.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ namespace mtconnect::configuration {
223223
/// @brief io_context::poll
224224
auto poll() { return m_context.poll(); }
225225

226-
/// @brief io_context::poll
226+
/// @brief io_context::get_executor
227227
auto get_executor() BOOST_ASIO_NOEXCEPT { return m_context.get_executor(); }
228228

229229
/// @}

src/mtconnect/entity/xml_parser.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,6 @@ namespace mtconnect::entity {
338338
try
339339
{
340340
xmlInitParser();
341-
xmlXPathInit();
342341
xmlSetGenericErrorFunc(nullptr, entityXMLErrorFunc);
343342

344343
unique_ptr<xmlDoc, function<void(xmlDocPtr)>> doc(

src/mtconnect/parser/xml_parser.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ namespace mtconnect::parser {
114114
try
115115
{
116116
xmlInitParser();
117-
xmlXPathInit();
118117
xmlSetGenericErrorFunc(nullptr, agentXMLErrorFunc);
119118

120119
THROW_IF_XML2_NULL(m_doc = xmlReadFile(filePath.c_str(), nullptr, XML_PARSE_NOBLANKS));
@@ -302,7 +301,6 @@ namespace mtconnect::parser {
302301
try
303302
{
304303
xmlInitParser();
305-
xmlXPathInit();
306304
xmlSetGenericErrorFunc(nullptr, agentXMLErrorFunc);
307305

308306
THROW_IF_XML2_NULL(m_doc = xmlReadMemory(doc.c_str(), int32_t(doc.length()), "Devices.xml",

src/mtconnect/pipeline/response_document.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -497,8 +497,6 @@ namespace mtconnect::pipeline {
497497
const std::optional<std::string> &device,
498498
const std::optional<std::string> &uuid)
499499
{
500-
// xmlInitParser();
501-
// xmlXPathInit();
502500
unique_ptr<xmlDoc, function<void(xmlDocPtr)>> doc(
503501
xmlReadMemory(content.data(), static_cast<int>(content.length()), "incoming.xml", nullptr,
504502
XML_PARSE_NOBLANKS),

src/mtconnect/sink/rest_sink/rest_service.cpp

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -521,23 +521,8 @@ namespace mtconnect {
521521
void RestService::createAssetRoutings()
522522
{
523523
using namespace rest_sink;
524-
auto handler = [&](SessionPtr session, RequestPtr request) -> bool {
525-
auto removed = *request->parameter<bool>("removed");
526-
auto count = *request->parameter<int32_t>("count");
527-
auto pretty = request->parameter<bool>("pretty").value_or(false);
528-
auto format = request->parameter<string>("format");
529-
auto printer = getPrinter(request->m_accepts, format);
530-
531-
request->m_request = "MTConnectAssets";
532524

533-
respond(session,
534-
assetRequest(printer, count, removed, request->parameter<string>("type"),
535-
request->parameter<string>("device"), pretty, request->m_requestId),
536-
request->m_requestId);
537-
return true;
538-
};
539-
540-
auto idHandler = [&](SessionPtr session, RequestPtr request) -> bool {
525+
auto idHandler = [this](SessionPtr session, RequestPtr request) -> bool {
541526
auto asset = request->parameter<string>("assetIds");
542527
request->m_request = "MTConnectAssets";
543528

@@ -564,17 +549,41 @@ namespace mtconnect {
564549
return true;
565550
};
566551

552+
auto handler = [this, idHandler](SessionPtr session, RequestPtr request) -> bool {
553+
auto assets = request->parameter<string>("assetIds");
554+
if (assets)
555+
{
556+
return idHandler(session, request);
557+
}
558+
559+
auto removed = *request->parameter<bool>("removed");
560+
auto count = *request->parameter<int32_t>("count");
561+
auto pretty = request->parameter<bool>("pretty").value_or(false);
562+
auto format = request->parameter<string>("format");
563+
auto printer = getPrinter(request->m_accepts, format);
564+
565+
request->m_request = "MTConnectAssets";
566+
567+
respond(session,
568+
assetRequest(printer, count, removed, request->parameter<string>("type"),
569+
request->parameter<string>("device"), pretty, request->m_requestId),
570+
request->m_requestId);
571+
return true;
572+
};
573+
567574
string qp(
568575
"type={string}&removed={bool:false}&"
569576
"count={integer:100}&device={string}&pretty={bool:false}&format={string}");
570577
m_server->addRouting({boost::beast::http::verb::get, "/assets?" + qp, handler})
571578
.document("MTConnect assets request", "Returns up to `count` assets");
579+
m_server->addRouting({boost::beast::http::verb::get, "/{device}/assets?" + qp, handler})
580+
.document("MTConnect assets request", "Returns up to `count` assets for deivce `device`")
581+
.command("assets");
572582
m_server->addRouting({boost::beast::http::verb::get, "/asset?" + qp, handler})
573583
.document("MTConnect asset request", "Returns up to `count` assets");
574-
m_server->addRouting({boost::beast::http::verb::get, "/{device}/assets?" + qp, handler})
575-
.document("MTConnect assets request", "Returns up to `count` assets for deivce `device`");
576584
m_server->addRouting({boost::beast::http::verb::get, "/{device}/asset?" + qp, handler})
577-
.document("MTConnect asset request", "Returns up to `count` assets for deivce `device`");
585+
.document("MTConnect asset request", "Returns up to `count` assets for deivce `device`")
586+
.command("asset");
578587
m_server->addRouting({boost::beast::http::verb::get, "/assets/{assetIds}", idHandler})
579588
.document(
580589
"MTConnect assets request",
@@ -727,9 +736,13 @@ namespace mtconnect {
727736
void RestService::createSampleRoutings()
728737
{
729738
using namespace rest_sink;
739+
730740
auto handler = [&](SessionPtr session, RequestPtr request) -> bool {
731741
request->m_request = "MTConnectStreams";
732742

743+
if (!request->parameter<int32_t>("count"))
744+
request->m_parameters["count"] = 100;
745+
733746
auto interval = request->parameter<int32_t>("interval");
734747
if (interval)
735748
{
@@ -959,7 +972,7 @@ namespace mtconnect {
959972
}
960973
else
961974
{
962-
LOG(debug) << "Sink close when failing sample respone: " << message;
975+
LOG(debug) << "Sink close when failing sample response: " << message;
963976
}
964977
}
965978

src/mtconnect/sink/rest_sink/routing.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,10 @@ namespace mtconnect::sink::rest_sink {
283283
errors.emplace_back(error);
284284
}
285285
}
286+
else if (!std::holds_alternative<std::monostate>(p.m_default))
287+
{
288+
request->m_parameters.emplace(make_pair(p.m_name, p.m_default));
289+
}
286290
}
287291

288292
if (!errors.empty())

src/mtconnect/sink/rest_sink/server.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ namespace mtconnect::sink::rest_sink {
9090
/// @brief Start the http server
9191
void start();
9292

93+
/// @brief Simulate running the server for testing
94+
void simulateRun() { m_run = true; }
95+
9396
/// @brief Shutdown the http server
9497
void stop()
9598
{

0 commit comments

Comments
 (0)