Commit fbe21930 authored by Pavel Vainerman's avatar Pavel Vainerman

(Refactoring): подправил инициализацию vector-ов, подправил типы.

parent 2d26f84d
...@@ -110,7 +110,7 @@ class DBServer_PostgreSQL: ...@@ -110,7 +110,7 @@ class DBServer_PostgreSQL:
typedef std::queue<std::string> QueryBuffer; typedef std::queue<std::string> QueryBuffer;
QueryBuffer qbuf; QueryBuffer qbuf;
unsigned int qbufSize; // размер буфера сообщений. size_t qbufSize; // размер буфера сообщений.
bool lastRemove = { false }; bool lastRemove = { false };
void flushBuffer(); void flushBuffer();
......
...@@ -39,12 +39,12 @@ UNetSender::UNetSender(const std::string& _host, const int _port, const std::sha ...@@ -39,12 +39,12 @@ UNetSender::UNetSender(const std::string& _host, const int _port, const std::sha
sendpause(150), sendpause(150),
packsendpause(5), packsendpause(5),
activated(false), activated(false),
items(100),
packetnum(1), packetnum(1),
lastcrc(0), lastcrc(0),
maxAData(maxACount), maxAData(maxACount),
maxDData(maxDCount) maxDData(maxDCount)
{ {
items.reserve(100);
{ {
ostringstream s; ostringstream s;
......
...@@ -33,7 +33,6 @@ DigitalFilter::DigitalFilter( unsigned int bufsize, double T, double lsq, ...@@ -33,7 +33,6 @@ DigitalFilter::DigitalFilter( unsigned int bufsize, double T, double lsq,
S(0), S(0),
tmr(UniSetTimer::WaitUpTime), tmr(UniSetTimer::WaitUpTime),
maxsize(bufsize), maxsize(bufsize),
mvec(bufsize),
mvec_sorted(false), mvec_sorted(false),
w(bufsize), w(bufsize),
lsparam(lsq), lsparam(lsq),
......
...@@ -93,7 +93,7 @@ class ThreadCreator: ...@@ -93,7 +93,7 @@ class ThreadCreator:
typedef void(ThreadMaster::* Action)(void); typedef void(ThreadMaster::* Action)(void);
ThreadCreator( ThreadMaster* m, Action a ); ThreadCreator( ThreadMaster* m, Action a );
~ThreadCreator(); virtual ~ThreadCreator();
inline Poco::Thread::TID getTID() const inline Poco::Thread::TID getTID() const
{ {
......
...@@ -14,10 +14,12 @@ ...@@ -14,10 +14,12 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
#include <functional>
#include <sstream> #include <sstream>
#include <cstdlib> #include <cstdlib>
#include "UniSetTypes.h" #include "UniSetTypes.h"
#include "PassiveTimer.h" #include "PassiveTimer.h"
#include "ThreadCreator.h"
#include "TCPCheck.h" #include "TCPCheck.h"
#include "UTCPStream.h" #include "UTCPStream.h"
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
...@@ -81,6 +83,33 @@ void TCPCheck::check_thread() ...@@ -81,6 +83,33 @@ void TCPCheck::check_thread()
catch( ... ) {} catch( ... ) {}
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
template<typename T>
class TGuard
{
public:
TGuard( T* m, typename ThreadCreator<T>::Action a ):
t(m,a)
{
t.start();
}
~TGuard()
{
if( t.isRunning() )
t.stop();
}
inline bool isRunning()
{
return t.isRunning();
}
protected:
ThreadCreator<T> t;
};
// -----------------------------------------------------------------------------
bool TCPCheck::ping( const std::string& _ip, timeout_t tout, timeout_t sleep_msec, const std::string& _ping_args ) bool TCPCheck::ping( const std::string& _ip, timeout_t tout, timeout_t sleep_msec, const std::string& _ping_args )
{ {
ip = _ip; ip = _ip;
...@@ -89,17 +118,13 @@ bool TCPCheck::ping( const std::string& _ip, timeout_t tout, timeout_t sleep_mse ...@@ -89,17 +118,13 @@ bool TCPCheck::ping( const std::string& _ip, timeout_t tout, timeout_t sleep_mse
setResult(false); setResult(false);
ThreadCreator<TCPCheck> t(this, &TCPCheck::ping_thread); TGuard<TCPCheck> t(this, &TCPCheck::ping_thread);
t.start();
PassiveTimer pt(tout); PassiveTimer pt(tout);
while( !pt.checkTime() && t.isRunning() ) while( !pt.checkTime() && t.isRunning() )
msleep(sleep_msec); msleep(sleep_msec);
if( t.isRunning() ) // !getResult() )
t.stop();
return result; return result;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -42,28 +42,38 @@ LogServer::~LogServer() noexcept ...@@ -42,28 +42,38 @@ LogServer::~LogServer() noexcept
LogServer::LogServer( std::shared_ptr<LogAgregator> log ): LogServer::LogServer( std::shared_ptr<LogAgregator> log ):
LogServer() LogServer()
{ {
elog = static_pointer_cast<DebugStream>(log); elog = dynamic_pointer_cast<DebugStream>(log);
if( !elog )
{
ostringstream err;
err << myname << "(LogServer): dynamic_pointer_cast FAILED! ";
if( mylog.is_info() )
mylog.info() << myname << "(evfinish): terminate..." << endl;
if( mylog.is_crit() )
mylog.crit() << err.str() << endl;
cerr << err.str() << endl;
throw SystemError(err.str());
}
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
LogServer::LogServer( std::shared_ptr<DebugStream> log ): LogServer::LogServer( std::shared_ptr<DebugStream> log ):
timeout(UniSetTimer::WaitUpTime), LogServer()
cmdTimeout(2000),
sessLogLevel(Debug::NONE),
slist(sessMaxCount),
sock(0),
elog(log)
{ {
elog = log;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
LogServer::LogServer(): LogServer::LogServer():
timeout(UniSetTimer::WaitUpTime), timeout(UniSetTimer::WaitUpTime),
cmdTimeout(2000), cmdTimeout(2000),
sessLogLevel(Debug::NONE), sessLogLevel(Debug::NONE),
slist(sessMaxCount),
sock(0), sock(0),
elog(nullptr) elog(nullptr)
{ {
slist.reserve(sessMaxCount);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void LogServer::evfinish( const ev::loop_ref& loop ) void LogServer::evfinish( const ev::loop_ref& loop )
......
...@@ -24,9 +24,10 @@ ...@@ -24,9 +24,10 @@
using namespace UniSetTypes; using namespace UniSetTypes;
using namespace std; using namespace std;
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
ObjectIndex_XML::ObjectIndex_XML(const string& xmlfile, size_t minSize ): ObjectIndex_XML::ObjectIndex_XML(const string& xmlfile, size_t minSize )
omap(minSize)
{ {
omap.reserve(minSize);
shared_ptr<UniXML> xml = make_shared<UniXML>(); shared_ptr<UniXML> xml = make_shared<UniXML>();
// try // try
// { // {
...@@ -36,9 +37,9 @@ ObjectIndex_XML::ObjectIndex_XML(const string& xmlfile, size_t minSize ): ...@@ -36,9 +37,9 @@ ObjectIndex_XML::ObjectIndex_XML(const string& xmlfile, size_t minSize ):
// catch(...){} // catch(...){}
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
ObjectIndex_XML::ObjectIndex_XML(const std::shared_ptr<UniXML>& xml, size_t minSize ): ObjectIndex_XML::ObjectIndex_XML(const std::shared_ptr<UniXML>& xml, size_t minSize )
omap(minSize)
{ {
omap.reserve(minSize);
build(xml); build(xml);
} }
// ----------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------
...@@ -111,6 +112,7 @@ void ObjectIndex_XML::build( const std::shared_ptr<UniXML>& xml ) ...@@ -111,6 +112,7 @@ void ObjectIndex_XML::build( const std::shared_ptr<UniXML>& xml )
// //
omap.resize(ind); omap.resize(ind);
omap.shrink_to_fit();
// omap[ind].repName=NULL; // omap[ind].repName=NULL;
// omap[ind].textName=NULL; // omap[ind].textName=NULL;
// omap[ind].id = ind; // omap[ind].id = ind;
...@@ -199,7 +201,7 @@ size_t ObjectIndex_XML::read_section( const std::shared_ptr<UniXML>& xml, const ...@@ -199,7 +201,7 @@ size_t ObjectIndex_XML::read_section( const std::shared_ptr<UniXML>& xml, const
// cout << "read: " << "(" << ind << ") " << omap[ind].repName << "\t" << omap[ind].textName << endl; // cout << "read: " << "(" << ind << ") " << omap[ind].repName << "\t" << omap[ind].textName << endl;
ind++; ind++;
if( (unsigned)ind >= omap.size() ) if( ind >= omap.size() )
{ {
uinfo << "(ObjectIndex_XML::build): не хватило размера массива maxSize=" << omap.size() uinfo << "(ObjectIndex_XML::build): не хватило размера массива maxSize=" << omap.size()
<< "... Делаем resize + 100" << endl; << "... Делаем resize + 100" << endl;
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include <memory> #include <memory>
#include <sstream> #include <sstream>
#include <thread> #include <thread>
#include <future>
#include "Mutex.h" #include "Mutex.h"
#include "UniSetTypes.h" #include "UniSetTypes.h"
...@@ -47,8 +48,10 @@ void la_logOnEvent( const std::string& s ) ...@@ -47,8 +48,10 @@ void la_logOnEvent( const std::string& s )
la_msg << s; la_msg << s;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void readlog_thread1() bool readlog_thread1()
{ {
try
{
LogReader lr; LogReader lr;
lr.setinTimeout(readTimeout); lr.setinTimeout(readTimeout);
lr.signal_stream_event().connect( sigc::ptr_fun(rlog1OnEvent) ); lr.signal_stream_event().connect( sigc::ptr_fun(rlog1OnEvent) );
...@@ -57,10 +60,20 @@ void readlog_thread1() ...@@ -57,10 +60,20 @@ void readlog_thread1()
while( !g_read_cancel ) while( !g_read_cancel )
lr.readlogs(ip, port); // ,LogServerTypes::cmdNOP,0,"",true); lr.readlogs(ip, port); // ,LogServerTypes::cmdNOP,0,"",true);
return true;
}
catch( std::exception& ex )
{
}
return false;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
void readlog_thread2() bool readlog_thread2()
{ {
try
{
LogReader lr; LogReader lr;
lr.setinTimeout(readTimeout); lr.setinTimeout(readTimeout);
lr.signal_stream_event().connect( sigc::ptr_fun(rlog2OnEvent) ); lr.signal_stream_event().connect( sigc::ptr_fun(rlog2OnEvent) );
...@@ -69,6 +82,13 @@ void readlog_thread2() ...@@ -69,6 +82,13 @@ void readlog_thread2()
while( !g_read_cancel ) while( !g_read_cancel )
lr.readlogs(ip, port); // ,LogServerTypes::cmdNOP,0,"",true); lr.readlogs(ip, port); // ,LogServerTypes::cmdNOP,0,"",true);
return true;
}
catch( std::exception& ex )
{
}
return false;
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
TEST_CASE("LogAgregator", "[LogServer][LogAgregator]" ) TEST_CASE("LogAgregator", "[LogServer][LogAgregator]" )
...@@ -133,7 +153,7 @@ TEST_CASE("LogServer", "[LogServer]" ) ...@@ -133,7 +153,7 @@ TEST_CASE("LogServer", "[LogServer]" )
REQUIRE( ls.isRunning() ); REQUIRE( ls.isRunning() );
msg.str(""); msg.str("");
auto r_thr = make_shared<std::thread>(readlog_thread1); auto ret = std::async(std::launch::async, readlog_thread1); // make_shared<std::thread>(readlog_thread1);
msleep(100); // небольшая пауза на создание потока и т.п. msleep(100); // небольшая пауза на создание потока и т.п.
...@@ -168,10 +188,7 @@ TEST_CASE("LogServer", "[LogServer]" ) ...@@ -168,10 +188,7 @@ TEST_CASE("LogServer", "[LogServer]" )
} }
g_read_cancel = true; g_read_cancel = true;
msleep(readTimeout); ret.get();
if( r_thr->joinable() )
r_thr->join();
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
TEST_CASE("MaxSessions", "[LogServer]" ) TEST_CASE("MaxSessions", "[LogServer]" )
...@@ -205,11 +222,11 @@ TEST_CASE("MaxSessions", "[LogServer]" ) ...@@ -205,11 +222,11 @@ TEST_CASE("MaxSessions", "[LogServer]" )
msg.str(""); msg.str("");
msg2.str(""); msg2.str("");
auto r1_thr = make_shared<std::thread>(readlog_thread1); auto ret1 = std::async(std::launch::async, readlog_thread1); // make_shared<std::thread>(readlog_thread1);
msleep(500); // пауза чтобы первый заведомо успел подключиться раньше второго.. msleep(500); // пауза чтобы первый заведомо успел подключиться раньше второго..
auto r2_thr = make_shared<std::thread>(readlog_thread2); auto ret2 = std::async(std::launch::async, readlog_thread1); // make_shared<std::thread>(readlog_thread2);
msleep(100); // небольшая пауза на создание потока и т.п. msleep(100); // небольшая пауза на создание потока и т.п.
...@@ -240,13 +257,8 @@ TEST_CASE("MaxSessions", "[LogServer]" ) ...@@ -240,13 +257,8 @@ TEST_CASE("MaxSessions", "[LogServer]" )
} }
g_read_cancel = true; g_read_cancel = true;
msleep(readTimeout); ret1.get();
ret2.get();
if( r1_thr->joinable() )
r1_thr->join();
if( r2_thr->joinable() )
r2_thr->join();
} }
// -------------------------------------------------------------------------- // --------------------------------------------------------------------------
TEST_CASE("LogAgregator regexp", "[LogAgregator]" ) TEST_CASE("LogAgregator regexp", "[LogAgregator]" )
......
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