diff --git a/CHANGELOG.md b/CHANGELOG.md index 72742ab..7f4446c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # История изменений + - Выставление DevState = UNKNOWN, если значение DevState выходит за пределы, например, если не была инициализирована. + ### 1.0.8 (20.07.2021) - В случае ошибки при подписке на события, возвращаются отдельно сообщения об успешных, и отдельно об ошибочных. Для сообщений об ошибках используется структура ErrorInfo diff --git a/server_mode/WebSocketDS.h b/server_mode/WebSocketDS.h index 7369af6..5f26dcc 100644 --- a/server_mode/WebSocketDS.h +++ b/server_mode/WebSocketDS.h @@ -40,13 +40,6 @@ #include -// TODO: DELETE -//#include - -// TODO: WSTangoConn -//#include "common.h" -//#include "WSTangoConn.h" - #include "WSTangoConnSer.h" /*----- PROTECTED REGION END -----*/ // WebSocketDS.h @@ -99,8 +92,6 @@ class WebSocketDS : public TANGO_BASE_CLASS private: WSTangoConnSer* wsTangoConn; - // TODO: DELETE - //std::chrono::seconds timeFromUpdateData; /*----- PROTECTED REGION END -----*/ // WebSocketDS::Data Members // Device property data members diff --git a/src/wstangoproc_cli/EventProcCli.cpp b/src/wstangoproc_cli/EventProcCli.cpp index ca1f230..e4f61c4 100644 --- a/src/wstangoproc_cli/EventProcCli.cpp +++ b/src/wstangoproc_cli/EventProcCli.cpp @@ -386,9 +386,6 @@ namespace WebSocketDS_ns { return true; } - // TODO: Может давать в аргументах по ссылке вместо - // const string & deviceName, const string & attrName, - // const string & precOpt, Tango::EventType eventType ResponseFromEventReq EventProcCli::_addCallback(websocketpp::connection_hdl hdl, const string & deviceName, const string & attrName, const string & precOpt, Tango::EventType eventType) { ResponseFromEventReq resp; diff --git a/src/wstangoproc_common/TangoProcessor.cpp b/src/wstangoproc_common/TangoProcessor.cpp index a8c4695..2f968b5 100644 --- a/src/wstangoproc_common/TangoProcessor.cpp +++ b/src/wstangoproc_common/TangoProcessor.cpp @@ -696,17 +696,6 @@ namespace WebSocketDS_ns json << "{"; auto attBegin = devAttrList->begin(); for (auto att = attBegin; att != devAttrList->end(); ++att) { - // Если задан niter для данного атрибута - // Вывод будет только если iterator кратно nIters - //Tango::DeviceAttribute att = attrList->at(i); - - // TODO: FOR NITER Доделать, или убрать - //if (nIters.find(att.get_name()) != nIters.end()) { - // if (nIters[att.get_name()].first != 0) { - // if ((iterator + (nIters[att.get_name()].first - nIters[att.get_name()].second)) % nIters[att.get_name()].first != 0) - // continue; - // } - //} if (att != attBegin) json << ", "; @@ -929,7 +918,7 @@ namespace WebSocketDS_ns _extractFromPipeTmpl(json, devPipe, precOpt, false); } break; - case Tango::DEVVAR_CHARARRAY: // ??? why not DEVVAR_CHARARRAY + case Tango::DEVVAR_CHARARRAY: // TODO: why not DEVVAR_CHARARRAY { json << NONE; } @@ -983,7 +972,14 @@ namespace WebSocketDS_ns { Tango::DevState state; devPipe >> state; - json << "\"" << Tango::DevStateName[state] << "\""; + string stateStr; + if (state < Tango::DevState::ON || state > Tango::DevState::UNKNOWN) { + stateStr = Tango::DevStateName[Tango::DevState::UNKNOWN]; + } + else { + stateStr = Tango::DevStateName[state]; + } + json << "\"" << stateStr << "\""; } break; case Tango::DEVVAR_BOOLEANARRAY: @@ -994,7 +990,7 @@ namespace WebSocketDS_ns case Tango::DEV_UCHAR: { json << NONE; - // ??? _extractFromPipeTmpl(pipe, json, false); + // TODO: _extractFromPipeTmpl(pipe, json, false); } break; case Tango::DEV_LONG64: @@ -1054,7 +1050,7 @@ namespace WebSocketDS_ns { case Tango::DEV_VOID: break; - case Tango::DEV_BOOLEAN: // ??? not boolean? + case Tango::DEV_BOOLEAN: // TODO: not boolean? { deviceData = _getDeviceDataTmpl(inpStr); } @@ -1094,10 +1090,10 @@ namespace WebSocketDS_ns deviceData = _generateDeviceDataFromArgin(inpStr); } break; - case Tango::DEVVAR_CHARARRAY: // ??? why not DEVVAR_CHARARRAY + case Tango::DEVVAR_CHARARRAY: // TODO: why not DEVVAR_CHARARRAY { - // ??? !!! FOR DEVVAR_CHARARRAY - // ??? WHY unsigned char + // TODO: !!! FOR DEVVAR_CHARARRAY + // TODO: WHY unsigned char deviceData = _getDeviceDataTmpl(inpVecStr); } break; @@ -1518,9 +1514,18 @@ namespace WebSocketDS_ns json << noneComm; break; case Tango::DEV_STATE: + { Tango::DevState stateIn; + string stateStr; deviceData >> stateIn; - json << " \"" << Tango::DevStateName[stateIn] << "\""; + if (stateIn < Tango::DevState::ON || stateIn > Tango::DevState::UNKNOWN) { + stateStr = Tango::DevStateName[Tango::DevState::UNKNOWN]; + } + else { + stateStr = Tango::DevStateName[stateIn]; + } + json << " \"" << stateStr << "\""; + } break; case Tango::DEVVAR_BOOLEANARRAY: // { diff --git a/src/wstangoproc_common/TangoProcessor.h b/src/wstangoproc_common/TangoProcessor.h index e908553..554dfc6 100644 --- a/src/wstangoproc_common/TangoProcessor.h +++ b/src/wstangoproc_common/TangoProcessor.h @@ -83,8 +83,6 @@ namespace WebSocketDS_ns int type = devAttr->get_type(); std::vector dataVector, dataVectorFromSet; T data; - Tango::DevState stateIn; - string stateStr; if (format == Tango::AttrDataFormat::SPECTRUM || format == Tango::AttrDataFormat::IMAGE) json << "\"dimX\": " << devAttr->dim_x << ", "; @@ -94,8 +92,15 @@ namespace WebSocketDS_ns json << "\"data\": "; if (format == Tango::AttrDataFormat::SCALAR) { if (type == Tango::DEV_STATE) { + Tango::DevState stateIn; + string stateStr; (*devAttr) >> stateIn; - stateStr = Tango::DevStateName[stateIn]; + if (stateIn < Tango::DevState::ON || stateIn > Tango::DevState::UNKNOWN) { + stateStr = Tango::DevStateName[Tango::DevState::UNKNOWN]; + } + else { + stateStr = Tango::DevStateName[stateIn]; + } _dataValueToStr(json, stateStr, precOpt); } else { @@ -152,7 +157,7 @@ namespace WebSocketDS_ns // default streamsize. std::streamsize srsz = std::stringstream().precision(); - // - std::setprecision + // Лямбда-функция для получения числа для std::setprecision auto get_srsz = [=](string fromOptStr) { std::streamsize tmpsz = srsz; if (fromOptStr != "") { @@ -258,7 +263,7 @@ namespace WebSocketDS_ns static Tango::DeviceData _getDeviceDataTmpl(const string& inputStr) { T inp; if (std::is_same::value) { - // + // если не то и не другое будет кинуто исключение if (inputStr == "0" || inputStr == "false") inp = false; else if (inputStr == "1" || inputStr == "true") @@ -277,7 +282,7 @@ namespace WebSocketDS_ns inpVec.reserve(inputVecStr.size()); for (auto &val : inputVecStr) { if (std::is_same::value) { - // + // если не то и не другое будет кинуто исключение T inp; if (val == "0" || val == "false") { inp = false; @@ -300,7 +305,7 @@ namespace WebSocketDS_ns static void _getDataForDeviceAttribute(Tango::DeviceAttribute& devAttr, const string& inputStr) { T inp; if (std::is_same::value) { - // + // если не то и не другое будет кинуто исключение if (inputStr == "0" || inputStr == "false") inp = false; else if (inputStr == "1" || inputStr == "true") @@ -319,7 +324,7 @@ namespace WebSocketDS_ns inpVec.reserve(inputVecStr.size()); for (auto &val : inputVecStr) { if (std::is_same::value) { - // + // если не то и не другое будет кинуто исключение T inp; if (val == "0" || val == "false") { inp = false; diff --git a/src/wstangoproc_common/UserControl.h b/src/wstangoproc_common/UserControl.h index 46749ae..8dbe971 100644 --- a/src/wstangoproc_common/UserControl.h +++ b/src/wstangoproc_common/UserControl.h @@ -11,7 +11,6 @@ namespace WebSocketDS_ns class UserControl { public: - // TODO: DELETE UserControl(string authDS, TYPE_OF_IDENT toi, bool isLogActive); UserControl(string authDS); ~UserControl(){}; diff --git a/src/wstangoproc_common/WSTangoConn.cpp b/src/wstangoproc_common/WSTangoConn.cpp index 5e38f47..275a102 100644 --- a/src/wstangoproc_common/WSTangoConn.cpp +++ b/src/wstangoproc_common/WSTangoConn.cpp @@ -61,16 +61,13 @@ namespace WebSocketDS_ns if (opt == "uselog") { uc->setLogActive(); } - // TODO: ADD TO README - // TODO: Доделать и проверить useoldjson + if (opt == "useoldjson") { _isOldVersionOfJson = true; } if (opt.find("tident") != string::npos) { auto gettedIdentOpt = StringProc::parseInputString(opt, "=", true); if (gettedIdentOpt.size() > 1) { - //if (gettedIdentOpt[1] == "rndid") - // typeOfIdent = TYPE_OF_IDENT::RANDIDENT; if (gettedIdentOpt[1] == "smpl") typeOfIdent = TYPE_OF_IDENT::SIMPLE; // Для аутентификации в Егоровом AuthDS в check_permissions_www @@ -83,7 +80,6 @@ namespace WebSocketDS_ns } } - // TODO: ADD TO README if (opt.find("command_name_for_check_user") != string::npos) { auto gettedIdentOpt = StringProc::parseInputString(opt, "=", true); if (gettedIdentOpt.size() > 1) { @@ -91,7 +87,6 @@ namespace WebSocketDS_ns } } - // TODO: ADD TO README if (opt.find("command_name_for_check_permission") != string::npos) { auto gettedIdentOpt = StringProc::parseInputString(opt, "=", true); if (gettedIdentOpt.size() > 1) { @@ -99,7 +94,6 @@ namespace WebSocketDS_ns } } - // TODO: ADD TO README if (opt.find("command_name_for_log") != string::npos) { auto gettedIdentOpt = StringProc::parseInputString(opt, "=", true); if (gettedIdentOpt.size() > 1) { @@ -107,7 +101,6 @@ namespace WebSocketDS_ns } } - // TODO: ADD TO README if (opt.find("maxnconn") != string::npos) { auto gettedIdentOpt = StringProc::parseInputString(opt, "=", true); if (gettedIdentOpt.size() > 1) { @@ -121,7 +114,6 @@ namespace WebSocketDS_ns } } - // TODO: ADD TO README if (opt.find("maxbuffsize") != string::npos) { auto gettedIdentOpt = StringProc::parseInputString(opt, "=", true); if (gettedIdentOpt.size() > 1) { diff --git a/src/wstangoproc_common/WSThread_plain.h b/src/wstangoproc_common/WSThread_plain.h index 12f30fd..6642339 100644 --- a/src/wstangoproc_common/WSThread_plain.h +++ b/src/wstangoproc_common/WSThread_plain.h @@ -15,14 +15,12 @@ namespace WebSocketDS_ns #ifdef CLIENT_MODE WSThread_plain(WSTangoConnCli *tc, int portNumber); #endif - // TODO: DELETE WSThread_plain(WSTangoConn *tc, int portNumber); - ~WSThread_plain(); virtual void *run_undetached(void *) override; virtual void stop() override; virtual void send_all(std::string msg) override; virtual void send(websocketpp::connection_hdl hdl, std::string msg) override; - // . . + // Для бинарных данных. Пока не используется. // TODO: NOT USED virtual void send(websocketpp::connection_hdl hdl, const void *data, size_t len) override; virtual bool on_validate(websocketpp::connection_hdl hdl) override; private: diff --git a/src/wstangoproc_common/WSThread_tls.h b/src/wstangoproc_common/WSThread_tls.h index c14c0c8..8a77b03 100644 --- a/src/wstangoproc_common/WSThread_tls.h +++ b/src/wstangoproc_common/WSThread_tls.h @@ -14,15 +14,13 @@ namespace WebSocketDS_ns #ifdef CLIENT_MODE WSThread_tls(WSTangoConnCli *tc, int portNumber, string cert, string key); #endif - // TODO: DELETE WSThread_tls(WSTangoConn *tc, int portNumber, string cert, string key); - ~WSThread_tls(); virtual void *run_undetached(void *) override; virtual void stop() override; virtual void send_all(std::string msg) override; virtual void send(websocketpp::connection_hdl hdl, std::string msg) override; - // . . + // Для бинарных данных. Пока не используется. // TODO: NOT USED virtual void send(websocketpp::connection_hdl hdl, const void *data, size_t len) override; virtual bool on_validate(websocketpp::connection_hdl hdl) override; private: