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 )
data << "UPDATE " << tblName(cem->type)
<< " SET confirm='" << cem->confirm << "'"
<< " WHERE sensor_id='" << cem->sensor_id << "'"
<< " AND date='" << ui.dateToString(cem->time, "-")<<" '"
<< " AND time='" << ui.timeToString(cem->time, ":") <<" '"
<< " AND date='" << dateToString(cem->time, "-")<<" '"
<< " AND time='" << timeToString(cem->time, ":") <<" '"
<< " AND time_usec='" << cem->time_usec <<" '";
if( ulog.debugging(DBLEVEL) )
......@@ -257,8 +257,8 @@ void DBServer_MySQL::parse( UniSetTypes::SensorMessage *si )
data << "INSERT INTO " << tblName(si->type)
<< "(date, time, time_usec, sensor_id, value, node) VALUES( '"
// Поля таблицы
<< ui.dateToString(si->sm_tv_sec,"-") << "','" // date
<< ui.timeToString(si->sm_tv_sec,":") << "','" // time
<< dateToString(si->sm_tv_sec,"-") << "','" // date
<< timeToString(si->sm_tv_sec,":") << "','" // time
<< si->sm_tv_usec << "'," // time_usec
<< si->id << "," // sensor_id
<< si->value << "," // value
......
......@@ -139,8 +139,8 @@ void DBServer_SQLite::parse( UniSetTypes::ConfirmMessage* cem )
data << "UPDATE " << tblName(cem->type)
<< " SET confirm='" << cem->confirm << "'"
<< " WHERE sensor_id='" << cem->sensor_id << "'"
<< " AND date='" << ui.dateToString(cem->time, "-")<<" '"
<< " AND time='" << ui.timeToString(cem->time, ":") <<" '"
<< " AND date='" << dateToString(cem->time, "-")<<" '"
<< " AND time='" << timeToString(cem->time, ":") <<" '"
<< " AND time_usec='" << cem->time_usec <<" '";
if( ulog.debugging(DBLEVEL) )
......@@ -232,8 +232,8 @@ void DBServer_SQLite::parse( UniSetTypes::SensorMessage *si )
data << "INSERT INTO " << tblName(si->type)
<< "(date, time, time_usec, sensor_id, value, node) VALUES( '"
// Поля таблицы
<< ui.dateToString(si->sm_tv_sec,"-") << "','" // date
<< ui.timeToString(si->sm_tv_sec,":") << "','" // time
<< dateToString(si->sm_tv_sec,"-") << "','" // date
<< timeToString(si->sm_tv_sec,":") << "','" // time
<< si->sm_tv_usec << "'," // time_usec
<< si->id << "," // sensor_id
<< si->value << "," // value
......
......@@ -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 );
// С использованием SensorInfo
void setValue ( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
// fast - это удалённый вызов "без подтверждения", он быстрее, но менее надёжен
// т.к. вызывающий никогда не узнает об ошибке, если она была (датчик такой не найдён и т.п.)
void fastSetValue( IOController_i::SensorInfo& si, long value, UniSetTypes::ObjectId supplier );
// Работа с группой датчиков
//! Получение состояния для списка указанных датчиков
IOController_i::SensorInfoSeq_var getSensorSeq( UniSetTypes::IDList& lst );
......@@ -132,7 +132,6 @@ class UInterface
CORBA::Long lowLimit=0, CORBA::Long hiLimit=0, CORBA::Long sensibility=0,
UniSetTypes::ObjectId backid = UniSetTypes::DefaultObjectId );
// ---------------------------------------------------------------
// Вспомогательные функции
......@@ -237,12 +236,6 @@ class UInterface
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 */
......
......@@ -42,12 +42,32 @@
/*! Задержка в миллисекундах */
inline void msleep( unsigned int m ) { usleep(m*1000); }
/*! Определения базовых типов библиотеки UniSet */
/*! Определения базовых типов библиотеки UniSet (вспомогательные типы данных, константы, полезные функции) */
namespace UniSetTypes
{
class Configuration;
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 ObjectId SysId;
......@@ -60,9 +80,6 @@ namespace UniSetTypes
UniversalIO::IOType getIOType( const std::string s );
std::ostream& operator<<( std::ostream& os, const UniversalIO::IOType t );
std::ostream& operator<<( std::ostream& os, const IOController_i::CalibrateInfo c );
/*! Команды для управления лампочками */
enum LampCommand
{
......@@ -101,10 +118,6 @@ namespace UniSetTypes
std::list<ObjectId> lst;
};
const ObjectId DefaultObjectId = -1; /*!< Идентификатор объекта по умолчанию */
const ThresholdId DefaultThresholdId = -1; /*!< идентификатор порогов по умолчанию */
const ThresholdId DefaultTimerId = -1; /*!< идентификатор таймера по умолчанию */
/*! Информация об имени объекта */
struct ObjectInfo
{
......@@ -128,7 +141,10 @@ namespace UniSetTypes
/*! Запрещенные для использования в именах объектов символы */
const char BadSymbols[]={'.','/'};
/// Преобразование строки в число (воспринимает префикс 0, как 8-ное, префикс 0x, как 16-ное, минус для отриц. чисел)
// ---------------------------------------------------------------
// Различные преобразования
//! Преобразование строки в число (воспринимает префикс 0, как 8-ное, префикс 0x, как 16-ное, минус для отриц. чисел)
inline int uni_atoi( const char* str )
{
int n = 0; // if str is NULL or sscanf failed, we return 0
......@@ -142,19 +158,30 @@ namespace UniSetTypes
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=',' );
/*! генератор уникального положительного ключа
* Уникальность гарантируется только для пары значений
* id и node.
* \warning Уникальность генерируемого ключа еще не проверялась,
но нареканий по использованию тоже не было :)
*/
inline static KeyType key( UniSetTypes::ObjectId id, UniSetTypes::ObjectId node )
struct ParamSInfo
{
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 - название параметра
......@@ -194,22 +221,10 @@ namespace UniSetTypes
return -1;
}
/*! алгоритм копирования элементов последовательности удовлетворяющих условию */
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;
}
// ---------------------------------------------------------------
// Калибровка
std::ostream& operator<<( std::ostream& os, const IOController_i::CalibrateInfo c );
// Функции калибровки значений
// raw - преобразуемое значение
......@@ -226,34 +241,36 @@ namespace UniSetTypes
// установка значения вне диапазона
long setoutregion(long raw, long rawMin, long rawMax);
// ---------------------------------------------------------------
// Всякие helper-ы
bool file_exist( const std::string filename );
IDList explode( const std::string str, char sep=',' );
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">,
// Проверка xml-узла на соответствие <...f_prop="f_val">,
// если не задано f_val, то проверяется, что просто f_prop!=""
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
......@@ -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)
throw(IO_THROW_EXCEPTIONS)
{
......
......@@ -22,6 +22,7 @@
*/
// -----------------------------------------------------------------------------
#include <cmath>
#include <iomanip>
#include <fstream>
#include "UniSetTypes.h"
#include "Configuration.h"
......@@ -352,3 +353,24 @@ using namespace UniSetTypes;
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 @@
#include "SMonitor.h"
#include "Configuration.h"
#include "ORepHelpers.h"
#include "UniSetTypes.h"
// ------------------------------------------------------------------------------------------
using namespace UniversalIO;
using namespace UniSetTypes;
......@@ -127,7 +128,7 @@ void SMonitor::sysCommand( SystemMessage *sm )
// ------------------------------------------------------------------------------------------
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 << "): ";
cout << setw(45) << conf->oind->getMapName(si->id);
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