Commit 5ffda9a7 authored by Pavel Vainerman's avatar Pavel Vainerman

(2.0): перенёс функции timeToString,dateToString из UInterface в UniSetTypes…

(2.0): перенёс функции timeToString,dateToString из UInterface в UniSetTypes (где сосредоточены многие вспомогательные функции).
parent 4dbc96d0
...@@ -143,8 +143,8 @@ void DBServer_MySQL::parse( UniSetTypes::ConfirmMessage* cem ) ...@@ -143,8 +143,8 @@ void DBServer_MySQL::parse( UniSetTypes::ConfirmMessage* cem )
data << "UPDATE " << tblName(cem->type) data << "UPDATE " << tblName(cem->type)
<< " SET confirm='" << cem->confirm << "'" << " SET confirm='" << cem->confirm << "'"
<< " WHERE sensor_id='" << cem->sensor_id << "'" << " WHERE sensor_id='" << cem->sensor_id << "'"
<< " AND date='" << ui.dateToString(cem->time, "-")<<" '" << " AND date='" << dateToString(cem->time, "-")<<" '"
<< " AND time='" << ui.timeToString(cem->time, ":") <<" '" << " AND time='" << timeToString(cem->time, ":") <<" '"
<< " AND time_usec='" << cem->time_usec <<" '"; << " AND time_usec='" << cem->time_usec <<" '";
if( ulog.debugging(DBLEVEL) ) if( ulog.debugging(DBLEVEL) )
...@@ -257,8 +257,8 @@ void DBServer_MySQL::parse( UniSetTypes::SensorMessage *si ) ...@@ -257,8 +257,8 @@ void DBServer_MySQL::parse( UniSetTypes::SensorMessage *si )
data << "INSERT INTO " << tblName(si->type) data << "INSERT INTO " << tblName(si->type)
<< "(date, time, time_usec, sensor_id, value, node) VALUES( '" << "(date, time, time_usec, sensor_id, value, node) VALUES( '"
// Поля таблицы // Поля таблицы
<< ui.dateToString(si->sm_tv_sec,"-") << "','" // date << dateToString(si->sm_tv_sec,"-") << "','" // date
<< ui.timeToString(si->sm_tv_sec,":") << "','" // time << timeToString(si->sm_tv_sec,":") << "','" // time
<< si->sm_tv_usec << "'," // time_usec << si->sm_tv_usec << "'," // time_usec
<< si->id << "," // sensor_id << si->id << "," // sensor_id
<< si->value << "," // value << si->value << "," // value
......
...@@ -139,8 +139,8 @@ void DBServer_SQLite::parse( UniSetTypes::ConfirmMessage* cem ) ...@@ -139,8 +139,8 @@ void DBServer_SQLite::parse( UniSetTypes::ConfirmMessage* cem )
data << "UPDATE " << tblName(cem->type) data << "UPDATE " << tblName(cem->type)
<< " SET confirm='" << cem->confirm << "'" << " SET confirm='" << cem->confirm << "'"
<< " WHERE sensor_id='" << cem->sensor_id << "'" << " WHERE sensor_id='" << cem->sensor_id << "'"
<< " AND date='" << ui.dateToString(cem->time, "-")<<" '" << " AND date='" << dateToString(cem->time, "-")<<" '"
<< " AND time='" << ui.timeToString(cem->time, ":") <<" '" << " AND time='" << timeToString(cem->time, ":") <<" '"
<< " AND time_usec='" << cem->time_usec <<" '"; << " AND time_usec='" << cem->time_usec <<" '";
if( ulog.debugging(DBLEVEL) ) if( ulog.debugging(DBLEVEL) )
...@@ -232,8 +232,8 @@ void DBServer_SQLite::parse( UniSetTypes::SensorMessage *si ) ...@@ -232,8 +232,8 @@ void DBServer_SQLite::parse( UniSetTypes::SensorMessage *si )
data << "INSERT INTO " << tblName(si->type) data << "INSERT INTO " << tblName(si->type)
<< "(date, time, time_usec, sensor_id, value, node) VALUES( '" << "(date, time, time_usec, sensor_id, value, node) VALUES( '"
// Поля таблицы // Поля таблицы
<< ui.dateToString(si->sm_tv_sec,"-") << "','" // date << dateToString(si->sm_tv_sec,"-") << "','" // date
<< ui.timeToString(si->sm_tv_sec,":") << "','" // time << timeToString(si->sm_tv_sec,":") << "','" // time
<< si->sm_tv_usec << "'," // time_usec << si->sm_tv_usec << "'," // time_usec
<< si->id << "," // sensor_id << si->id << "," // sensor_id
<< si->value << "," // value << si->value << "," // value
......
...@@ -79,12 +79,12 @@ class UInterface ...@@ -79,12 +79,12 @@ class UInterface
//! Выставление состояния датчика //! Выставление состояния датчика
void setValue ( UniSetTypes::ObjectId id, long value, UniSetTypes::ObjectId node ) throw(IO_THROW_EXCEPTIONS); void setValue ( UniSetTypes::ObjectId id, long value, UniSetTypes::ObjectId node ) throw(IO_THROW_EXCEPTIONS);
void setValue ( UniSetTypes::ObjectId id, long value ); void setValue ( UniSetTypes::ObjectId id, long value );
// С использованием SensorInfo
void setValue ( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier ); void setValue ( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
// fast - это удалённый вызов "без подтверждения", он быстрее, но менее надёжен
// т.к. вызывающий никогда не узнает об ошибке, если она была (датчик такой не найдён и т.п.)
void fastSetValue( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier ); void fastSetValue( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
// Работа с группой датчиков
//! Получение состояния для списка указанных датчиков //! Получение состояния для списка указанных датчиков
IOController_i::SensorInfoSeq_var getSensorSeq( UniSetTypes::IDList& lst ); IOController_i::SensorInfoSeq_var getSensorSeq( UniSetTypes::IDList& lst );
...@@ -132,7 +132,6 @@ class UInterface ...@@ -132,7 +132,6 @@ class UInterface
CORBA::Long lowLimit=0, CORBA::Long hiLimit=0, CORBA::Long sensibility=0, CORBA::Long lowLimit=0, CORBA::Long hiLimit=0, CORBA::Long sensibility=0,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId ); UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId );
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Вспомогательные функции // Вспомогательные функции
...@@ -237,12 +236,6 @@ class UInterface ...@@ -237,12 +236,6 @@ class UInterface
inline UniSetTypes::Configuration* getConf() { return uconf; } inline UniSetTypes::Configuration* getConf() { return uconf; }
// --------------------------------------------------------------- // ---------------------------------------------------------------
// Работа со временем
static std::string timeToString(time_t tm=time(0), const std::string brk=":"); /*!< Преобразование времени в строку HH:MM:SS */
static std::string dateToString(time_t tm=time(0), const std::string brk="/"); /*!< Преобразование даты в строку DD/MM/YYYY */
// ---------------------------------------------------------------
// Посылка сообщений // Посылка сообщений
/*! посылка сообщения msg объекту name на узел node */ /*! посылка сообщения msg объекту name на узел node */
......
...@@ -42,12 +42,32 @@ ...@@ -42,12 +42,32 @@
/*! Задержка в миллисекундах */ /*! Задержка в миллисекундах */
inline void msleep( unsigned int m ) { usleep(m*1000); } inline void msleep( unsigned int m ) { usleep(m*1000); }
/*! Определения базовых типов библиотеки UniSet */ /*! Определения базовых типов библиотеки UniSet (вспомогательные типы данных, константы, полезные функции) */
namespace UniSetTypes namespace UniSetTypes
{ {
class Configuration; class Configuration;
extern Configuration* conf; extern Configuration* conf;
// ---------------------------------------------------------------
// Вспомогательные типы данных и константы
const ObjectId DefaultObjectId = -1; /*!< Идентификатор объекта по умолчанию */
const ThresholdId DefaultThresholdId = -1; /*!< идентификатор порогов по умолчанию */
const ThresholdId DefaultTimerId = -1; /*!< идентификатор таймера по умолчанию */
typedef long KeyType; /*!< уникальный ключ объекта */
/*! генератор уникального положительного ключа
* Уникальность гарантируется только для пары значений
* id и node.
* \warning Уникальность генерируемого ключа еще не проверялась,
но нареканий по использованию тоже не было :)
*/
inline static KeyType key( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node )
{
return KeyType((id*node)+(id+2*node));
}
typedef std::list<std::string> ListObjectName; /*!< Список объектов типа ObjectName */ typedef std::list<std::string> ListObjectName; /*!< Список объектов типа ObjectName */
typedef ObjectId SysId; typedef ObjectId SysId;
...@@ -60,9 +80,6 @@ namespace UniSetTypes ...@@ -60,9 +80,6 @@ namespace UniSetTypes
UniversalIO::IOType getIOType( const std::string s ); UniversalIO::IOType getIOType( const std::string s );
std::ostream& operator<<( std::ostream& os, const UniversalIO::IOType t ); std::ostream& operator<<( std::ostream& os, const UniversalIO::IOType t );
std::ostream& operator<<( std::ostream& os, const IOController_i::CalibrateInfo c );
/*! Команды для управления лампочками */ /*! Команды для управления лампочками */
enum LampCommand enum LampCommand
{ {
...@@ -101,10 +118,6 @@ namespace UniSetTypes ...@@ -101,10 +118,6 @@ namespace UniSetTypes
std::list<ObjectId> lst; std::list<ObjectId> lst;
}; };
const ObjectId DefaultObjectId = -1; /*!< Идентификатор объекта по умолчанию */
const ThresholdId DefaultThresholdId = -1; /*!< идентификатор порогов по умолчанию */
const ThresholdId DefaultTimerId = -1; /*!< идентификатор таймера по умолчанию */
/*! Информация об имени объекта */ /*! Информация об имени объекта */
struct ObjectInfo struct ObjectInfo
{ {
...@@ -128,7 +141,10 @@ namespace UniSetTypes ...@@ -128,7 +141,10 @@ namespace UniSetTypes
/*! Запрещенные для использования в именах объектов символы */ /*! Запрещенные для использования в именах объектов символы */
const char BadSymbols[]={'.','/'}; const char BadSymbols[]={'.','/'};
/// Преобразование строки в число (воспринимает префикс 0, как 8-ное, префикс 0x, как 16-ное, минус для отриц. чисел) // ---------------------------------------------------------------
// Различные преобразования
//! Преобразование строки в число (воспринимает префикс 0, как 8-ное, префикс 0x, как 16-ное, минус для отриц. чисел)
inline int uni_atoi( const char* str ) inline int uni_atoi( const char* str )
{ {
int n = 0; // if str is NULL or sscanf failed, we return 0 int n = 0; // if str is NULL or sscanf failed, we return 0
...@@ -142,19 +158,30 @@ namespace UniSetTypes ...@@ -142,19 +158,30 @@ namespace UniSetTypes
return uni_atoi(str.c_str()); return uni_atoi(str.c_str());
} }
std::string timeToString(time_t tm=time(0), const std::string brk=":"); /*!< Преобразование времени в строку HH:MM:SS */
std::string dateToString(time_t tm=time(0), const std::string brk="/"); /*!< Преобразование даты в строку DD/MM/YYYY */
typedef long KeyType; /*!< уникальный ключ объекта */ /*! Разбивка строки по указанному символу */
IDList explode( const std::string str, char sep=',' );
std::list<std::string> explode_str( const std::string str, char sep=',' );
/*! генератор уникального положительного ключа struct ParamSInfo
* Уникальность гарантируется только для пары значений
* id и node.
* \warning Уникальность генерируемого ключа еще не проверялась,
но нареканий по использованию тоже не было :)
*/
inline static KeyType key( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node )
{ {
return KeyType((id*node)+(id+2*node)); IOController_i::SensorInfo si;
} long val;
std::string fname; // fullname id@node or id
};
/*! Функция разбора строки вида: id1@node1=val1,id2@node2=val2,...
Если '=' не указано, возвращается val=0
Если @node не указано, возвращается node=DefaultObjectId */
std::list<ParamSInfo> getSInfoList( std::string s, Configuration* conf=UniSetTypes::conf);
/*! проверка является текст в строке - числом..*/
bool is_digit( const std::string s );
// ---------------------------------------------------------------
// Работа с командной строкой
/*! Получение параметра командной строки /*! Получение параметра командной строки
\param name - название параметра \param name - название параметра
...@@ -194,22 +221,10 @@ namespace UniSetTypes ...@@ -194,22 +221,10 @@ namespace UniSetTypes
return -1; return -1;
} }
/*! алгоритм копирования элементов последовательности удовлетворяющих условию */ // ---------------------------------------------------------------
template<typename InputIterator, // Калибровка
typename OutputIterator,
typename Predicate> std::ostream& operator<<( std::ostream& os, const IOController_i::CalibrateInfo c );
OutputIterator copy_if(InputIterator begin,
InputIterator end,
OutputIterator destBegin,
Predicate p)
{
while( begin!=end)
{
if( p(*begin) ) &destBegin++=*begin;
++begin;
}
return destBegin;
}
// Функции калибровки значений // Функции калибровки значений
// raw - преобразуемое значение // raw - преобразуемое значение
...@@ -226,34 +241,36 @@ namespace UniSetTypes ...@@ -226,34 +241,36 @@ namespace UniSetTypes
// установка значения вне диапазона // установка значения вне диапазона
long setoutregion(long raw, long rawMin, long rawMax); long setoutregion(long raw, long rawMin, long rawMax);
// ---------------------------------------------------------------
// Всякие helper-ы
bool file_exist( const std::string filename ); bool file_exist( const std::string filename );
IDList explode( const std::string str, char sep=',' ); // Проверка xml-узла на соответствие <...f_prop="f_val">,
std::list<std::string> explode_str( const std::string str, char sep=',' );
struct ParamSInfo
{
IOController_i::SensorInfo si;
long val;
std::string fname; // fullname id@node or id
};
// Функция разбора строки вида: id1@node1=val1,id2@node2=val2,...
// Если '=' не указано, возвращается val=0
// Если @node не указано, возвращается node=DefaultObjectId
std::list<ParamSInfo> getSInfoList( std::string s, Configuration* conf=UniSetTypes::conf);
bool is_digit( const std::string s );
// Проверка xml-узла на соответсвие <...f_prop="f_val">,
// если не задано f_val, то проверяется, что просто f_prop!="" // если не задано f_val, то проверяется, что просто f_prop!=""
bool check_filter( UniXML_iterator& it, const std::string f_prop, const std::string f_val="" ); bool check_filter( UniXML_iterator& it, const std::string f_prop, const std::string f_val="" );
/*! алгоритм копирования элементов последовательности удовлетворяющих условию */
template<typename InputIterator,
typename OutputIterator,
typename Predicate>
OutputIterator copy_if(InputIterator begin,
InputIterator end,
OutputIterator destBegin,
Predicate p)
{
while( begin!=end)
{
if( p(*begin) ) &destBegin++=*begin;
++begin;
}
return destBegin;
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
} }
#define atoi atoi##_Do_not_use_atoi_function_directly_Use_getIntProp90,_getArgInt_or_uni_atoi // Варварский запрет на использование atoi вместо uni_atoi..
// #define atoi atoi##_Do_not_use_atoi_function_directly_Use_getIntProp90,_getArgInt_or_uni_atoi
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
#endif #endif
...@@ -926,29 +926,6 @@ ObjectPtr UInterface::resolve( ObjectId rid , ObjectId node, int timeoutSec ) ...@@ -926,29 +926,6 @@ ObjectPtr UInterface::resolve( ObjectId rid , ObjectId node, int timeoutSec )
} }
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
string UInterface::timeToString(time_t tm, const std::string brk )
{
struct tm *tms = localtime(&tm);
ostringstream time;
time << std::setw(2) << std::setfill('0') << tms->tm_hour << brk;
time << std::setw(2) << std::setfill('0') << tms->tm_min << brk;
time << std::setw(2) << std::setfill('0') << tms->tm_sec;
return time.str();
}
string UInterface::dateToString(time_t tm, const std::string brk )
{
struct tm *tms = localtime(&tm);
ostringstream date;
date << std::setw(4) << std::setfill('0') << tms->tm_year+1900 << brk;
date << std::setw(2) << std::setfill('0') << tms->tm_mon+1 << brk;
date << std::setw(2) << std::setfill('0') << tms->tm_mday;
return date.str();
}
//--------------------------------------------------------------------------------------------
void UInterface::send( ObjectId name, TransportMessage& msg, ObjectId node) void UInterface::send( ObjectId name, TransportMessage& msg, ObjectId node)
throw(IO_THROW_EXCEPTIONS) throw(IO_THROW_EXCEPTIONS)
{ {
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
*/ */
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include <cmath> #include <cmath>
#include <iomanip>
#include <fstream> #include <fstream>
#include "UniSetTypes.h" #include "UniSetTypes.h"
#include "Configuration.h" #include "Configuration.h"
...@@ -352,3 +353,24 @@ using namespace UniSetTypes; ...@@ -352,3 +353,24 @@ using namespace UniSetTypes;
return true; return true;
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
string UniSetTypes::timeToString(time_t tm, const std::string brk )
{
struct tm *tms = localtime(&tm);
ostringstream time;
time << std::setw(2) << std::setfill('0') << tms->tm_hour << brk;
time << std::setw(2) << std::setfill('0') << tms->tm_min << brk;
time << std::setw(2) << std::setfill('0') << tms->tm_sec;
return time.str();
}
string UniSetTypes::dateToString(time_t tm, const std::string brk )
{
struct tm *tms = localtime(&tm);
ostringstream date;
date << std::setw(4) << std::setfill('0') << tms->tm_year+1900 << brk;
date << std::setw(2) << std::setfill('0') << tms->tm_mon+1 << brk;
date << std::setw(2) << std::setfill('0') << tms->tm_mday;
return date.str();
}
//--------------------------------------------------------------------------------------------
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "SMonitor.h" #include "SMonitor.h"
#include "Configuration.h" #include "Configuration.h"
#include "ORepHelpers.h" #include "ORepHelpers.h"
#include "UniSetTypes.h"
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
using namespace UniversalIO; using namespace UniversalIO;
using namespace UniSetTypes; using namespace UniSetTypes;
...@@ -127,7 +128,7 @@ void SMonitor::sysCommand( SystemMessage *sm ) ...@@ -127,7 +128,7 @@ void SMonitor::sysCommand( SystemMessage *sm )
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
void SMonitor::sensorInfo( SensorMessage *si ) void SMonitor::sensorInfo( SensorMessage *si )
{ {
cout << "(" << setw(6) << si->id << "): " << setw(8) << UInterface::timeToString(si->sm_tv_sec,":") cout << "(" << setw(6) << si->id << "): " << setw(8) << timeToString(si->sm_tv_sec,":")
<< "(" << setw(6) << si->sm_tv_usec << "): "; << "(" << setw(6) << si->sm_tv_usec << "): ";
cout << setw(45) << conf->oind->getMapName(si->id); cout << setw(45) << conf->oind->getMapName(si->id);
cout << "\tvalue=" << si->value << "\tfvalue=" << ( (float)si->value / pow(10.0,si->ci.precision) ) << endl; cout << "\tvalue=" << si->value << "\tfvalue=" << ( (float)si->value / pow(10.0,si->ci.precision) ) << endl;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment