Commit 3db7758a authored by Pavel Vainerman's avatar Pavel Vainerman

Немного подправил функции с передачей shared_ptr

(ModbusMaster): частично перевёл на использование shared_ptr
parent d023710b
...@@ -188,6 +188,7 @@ MBExchange::~MBExchange() ...@@ -188,6 +188,7 @@ MBExchange::~MBExchange()
delete it1->second; delete it1->second;
} }
mb.reset();
delete shm; delete shm;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
......
...@@ -85,7 +85,7 @@ MBTCPMaster::~MBTCPMaster() ...@@ -85,7 +85,7 @@ MBTCPMaster::~MBTCPMaster()
pollThread->join(); pollThread->join();
} }
delete pollThread; delete pollThread;
//delete mbtcp; mbtcp.reset();
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen ) std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
...@@ -95,8 +95,8 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen ) ...@@ -95,8 +95,8 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
if( !reopen ) if( !reopen )
return mbtcp; return mbtcp;
mbtcp = nullptr; mbtcp.reset();
mb = nullptr; mb.reset();
} }
try try
...@@ -115,7 +115,7 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen ) ...@@ -115,7 +115,7 @@ std::shared_ptr<ModbusClient> MBTCPMaster::initMB( bool reopen )
mbtcp->setAfterSendPause(aftersend_pause); mbtcp->setAfterSendPause(aftersend_pause);
dinfo << myname << "(init): ipaddr=" << iaddr << " port=" << port << endl; dinfo << myname << "(init): ipaddr=" << iaddr << " port=" << port << endl;
if( dlog.is_level9() ) if( dlog.is_level9() )
mbtcp->setLog(dlog); mbtcp->setLog(dlog);
......
...@@ -62,13 +62,7 @@ int main(int argc, char* argv[] ) ...@@ -62,13 +62,7 @@ int main(int argc, char* argv[] )
try try
{ {
auto conf = uniset_init(argc,argv); auto conf = uniset_init(argc,argv);
/*
conf->initDebug(dlog,"dlog");
string logfilename = conf->getArgParam("--logfile", "smemory.log");
string logname( conf->getLogDir() + logfilename );
ulog.logFile( logname );
dlog.logFile( logname );
*/
shm = SharedMemory::init_smemory(argc, argv); shm = SharedMemory::init_smemory(argc, argv);
if( !shm ) if( !shm )
return 1; return 1;
......
...@@ -269,7 +269,7 @@ class UInterface ...@@ -269,7 +269,7 @@ class UInterface
struct Info struct Info
{ {
Info( UniSetTypes::ObjectVar ptr ):ptr(ptr),ncall(0){} Info( const UniSetTypes::ObjectVar& ptr ):ptr(ptr),ncall(0){}
Info():ptr(NULL),ncall(0){} Info():ptr(NULL),ncall(0){}
UniSetTypes::ObjectVar ptr; UniSetTypes::ObjectVar ptr;
......
...@@ -74,11 +74,11 @@ class UniSetManager: ...@@ -74,11 +74,11 @@ class UniSetManager:
// -------------------------- // --------------------------
void initPOA(UniSetManager* rmngr); void initPOA(UniSetManager* rmngr);
virtual bool addObject( std::shared_ptr<UniSetObject> obj ); virtual bool addObject( const std::shared_ptr<UniSetObject>& obj );
virtual bool removeObject( std::shared_ptr<UniSetObject> obj ); virtual bool removeObject( const std::shared_ptr<UniSetObject>& obj );
virtual bool addManager( std::shared_ptr<UniSetManager> mngr ); virtual bool addManager( const std::shared_ptr<UniSetManager>& mngr );
virtual bool removeManager( std::shared_ptr<UniSetManager> mngr ); virtual bool removeManager( const std::shared_ptr<UniSetManager>& mngr );
/*! Получение доступа к подчиненному менеджеру по идентификатору /*! Получение доступа к подчиненному менеджеру по идентификатору
* \return объект ненайден будет возвращен 0. * \return объект ненайден будет возвращен 0.
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
namespace ModbusTCPCore namespace ModbusTCPCore
{ {
int readNextData( ost::TCPStream* tcp, std::queue<unsigned char>& qrecv, int max=100 ); int readNextData( ost::TCPStream* tcp, std::queue<unsigned char>& qrecv, int max=100 );
int getNextData( unsigned char* buf, int len, std::queue<unsigned char>& qrecv, ost::TCPStream* tcp ); int getNextData( ost::TCPStream* tcp, std::queue<unsigned char>& qrecv, unsigned char* buf, int len );
ModbusRTU::mbErrCode sendData( unsigned char* buf, int len, ost::TCPStream* tcp ); ModbusRTU::mbErrCode sendData( ost::TCPStream* tcp, unsigned char* buf, int len );
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
#endif // ModbusTCPCore_H_ #endif // ModbusTCPCore_H_
......
#ifndef ModbusTCPMaster_H_ #ifndef ModbusTCPMaster_H_
#define ModbusTCPMaster_H_ #define ModbusTCPMaster_H_
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
#include <memory>
#include <string> #include <string>
#include <queue> #include <queue>
#include <cc++/socket.h> #include <cc++/socket.h>
...@@ -44,7 +45,7 @@ class ModbusTCPMaster: ...@@ -44,7 +45,7 @@ class ModbusTCPMaster:
private: private:
//ost::TCPStream* tcp; //ost::TCPStream* tcp;
UTCPStream* tcp; std::shared_ptr<UTCPStream> tcp;
ModbusRTU::ModbusData nTransaction; ModbusRTU::ModbusData nTransaction;
std::queue<unsigned char> qrecv; std::queue<unsigned char> qrecv;
PassiveTimer ptTimeout; PassiveTimer ptTimeout;
......
...@@ -22,10 +22,10 @@ int ModbusTCPCore::readNextData( ost::TCPStream* tcp, ...@@ -22,10 +22,10 @@ int ModbusTCPCore::readNextData( ost::TCPStream* tcp,
return i; return i;
} }
// ------------------------------------------------------------------------- // ------------------------------------------------------------------------
int ModbusTCPCore::getNextData( unsigned char* buf, int len, int ModbusTCPCore::getNextData( ost::TCPStream* tcp,
std::queue<unsigned char>& qrecv, std::queue<unsigned char>& qrecv,
ost::TCPStream* tcp ) unsigned char* buf, int len )
{ {
if( !tcp || !tcp->isConnected() ) if( !tcp || !tcp->isConnected() )
return 0; return 0;
...@@ -51,7 +51,7 @@ int ModbusTCPCore::getNextData( unsigned char* buf, int len, ...@@ -51,7 +51,7 @@ int ModbusTCPCore::getNextData( unsigned char* buf, int len,
return i; return i;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPCore::sendData( unsigned char* buf, int len, ost::TCPStream* tcp ) mbErrCode ModbusTCPCore::sendData( ost::TCPStream* tcp, unsigned char* buf, int len )
{ {
if( !tcp || !tcp->isConnected() ) if( !tcp || !tcp->isConnected() )
return erTimeOut; return erTimeOut;
......
...@@ -11,7 +11,7 @@ using namespace ModbusRTU; ...@@ -11,7 +11,7 @@ using namespace ModbusRTU;
using namespace UniSetTypes; using namespace UniSetTypes;
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
ModbusTCPMaster::ModbusTCPMaster(): ModbusTCPMaster::ModbusTCPMaster():
tcp(0), tcp(nullptr),
nTransaction(0), nTransaction(0),
iaddr(""), iaddr(""),
force_disconnect(true) force_disconnect(true)
...@@ -29,11 +29,13 @@ ModbusTCPMaster::~ModbusTCPMaster() ...@@ -29,11 +29,13 @@ ModbusTCPMaster::~ModbusTCPMaster()
{ {
if( isConnection() ) if( isConnection() )
disconnect(); disconnect();
tcp.reset();
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ModbusTCPMaster::getNextData( unsigned char* buf, int len ) int ModbusTCPMaster::getNextData( unsigned char* buf, int len )
{ {
return ModbusTCPCore::getNextData(buf,len,qrecv,tcp); return ModbusTCPCore::getNextData(tcp.get(),qrecv,buf,len);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
void ModbusTCPMaster::setChannelTimeout( timeout_t msec ) void ModbusTCPMaster::setChannelTimeout( timeout_t msec )
...@@ -44,7 +46,7 @@ void ModbusTCPMaster::setChannelTimeout( timeout_t msec ) ...@@ -44,7 +46,7 @@ void ModbusTCPMaster::setChannelTimeout( timeout_t msec )
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPMaster::sendData( unsigned char* buf, int len ) mbErrCode ModbusTCPMaster::sendData( unsigned char* buf, int len )
{ {
return ModbusTCPCore::sendData(buf,len,tcp); return ModbusTCPCore::sendData(tcp.get(),buf,len);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg, mbErrCode ModbusTCPMaster::query( ModbusAddr addr, ModbusMessage& msg,
...@@ -300,15 +302,13 @@ void ModbusTCPMaster::reconnect() ...@@ -300,15 +302,13 @@ void ModbusTCPMaster::reconnect()
if( tcp ) if( tcp )
{ {
tcp->disconnect(); tcp->disconnect();
delete tcp; tcp.reset();
tcp = 0;
} }
try try
{ {
tcp = new UTCPStream(); tcp = make_shared<UTCPStream>();
tcp->create(iaddr,port,true,500); tcp->create(iaddr,port,true,500);
tcp->setTimeout(replyTimeOut_ms); tcp->setTimeout(replyTimeOut_ms);
} }
catch( std::exception& e ) catch( std::exception& e )
...@@ -342,8 +342,7 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int _port ) ...@@ -342,8 +342,7 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int _port )
if( tcp ) if( tcp )
{ {
disconnect(); disconnect();
delete tcp; tcp.reset();
tcp = 0;
} }
// if( !tcp ) // if( !tcp )
...@@ -360,7 +359,7 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int _port ) ...@@ -360,7 +359,7 @@ void ModbusTCPMaster::connect( ost::InetAddress addr, int _port )
ost::Thread::setException(ost::Thread::throwException); ost::Thread::setException(ost::Thread::throwException);
try try
{ {
tcp = new UTCPStream(); tcp = make_shared<UTCPStream>();
tcp->create(iaddr,port,true,500); tcp->create(iaddr,port,true,500);
tcp->setTimeout(replyTimeOut_ms); tcp->setTimeout(replyTimeOut_ms);
} }
...@@ -394,8 +393,7 @@ void ModbusTCPMaster::disconnect() ...@@ -394,8 +393,7 @@ void ModbusTCPMaster::disconnect()
return; return;
tcp->disconnect(); tcp->disconnect();
delete tcp; tcp.reset();
tcp = 0;
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
bool ModbusTCPMaster::isConnection() bool ModbusTCPMaster::isConnection()
......
...@@ -265,12 +265,12 @@ void ModbusTCPServer::setChannelTimeout( timeout_t msec ) ...@@ -265,12 +265,12 @@ void ModbusTCPServer::setChannelTimeout( timeout_t msec )
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
mbErrCode ModbusTCPServer::sendData( unsigned char* buf, int len ) mbErrCode ModbusTCPServer::sendData( unsigned char* buf, int len )
{ {
return ModbusTCPCore::sendData(buf,len,&tcp); return ModbusTCPCore::sendData(&tcp,buf,len);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ModbusTCPServer::getNextData( unsigned char* buf, int len ) int ModbusTCPServer::getNextData( unsigned char* buf, int len )
{ {
return ModbusTCPCore::getNextData(buf,len,qrecv,&tcp); return ModbusTCPCore::getNextData(&tcp,qrecv,buf,len);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
......
...@@ -174,12 +174,12 @@ void ModbusTCPSession::final() ...@@ -174,12 +174,12 @@ void ModbusTCPSession::final()
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
mbErrCode ModbusTCPSession::sendData( unsigned char* buf, int len ) mbErrCode ModbusTCPSession::sendData( unsigned char* buf, int len )
{ {
return ModbusTCPCore::sendData(buf,len,this); return ModbusTCPCore::sendData(this,buf,len);
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
int ModbusTCPSession::getNextData( unsigned char* buf, int len ) int ModbusTCPSession::getNextData( unsigned char* buf, int len )
{ {
return ModbusTCPCore::getNextData(buf,len,qrecv,this); return ModbusTCPCore::getNextData(this,qrecv,buf,len);
} }
// -------------------------------------------------------------------------------- // --------------------------------------------------------------------------------
......
...@@ -175,7 +175,7 @@ void UniSetManager::initPOA( UniSetManager* rmngr ) ...@@ -175,7 +175,7 @@ void UniSetManager::initPOA( UniSetManager* rmngr )
managers(initial); managers(initial);
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetManager::addObject( std::shared_ptr<UniSetObject> obj ) bool UniSetManager::addObject( const std::shared_ptr<UniSetObject>& obj )
{ {
{ //lock { //lock
uniset_rwmutex_wrlock lock(olistMutex); uniset_rwmutex_wrlock lock(olistMutex);
...@@ -190,7 +190,7 @@ bool UniSetManager::addObject( std::shared_ptr<UniSetObject> obj ) ...@@ -190,7 +190,7 @@ bool UniSetManager::addObject( std::shared_ptr<UniSetObject> obj )
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetManager::removeObject( std::shared_ptr<UniSetObject> obj ) bool UniSetManager::removeObject( const std::shared_ptr<UniSetObject>& obj )
{ {
{ //lock { //lock
uniset_rwmutex_wrlock lock(olistMutex); uniset_rwmutex_wrlock lock(olistMutex);
...@@ -420,7 +420,7 @@ void UniSetManager::broadcast(const TransportMessage& msg) ...@@ -420,7 +420,7 @@ void UniSetManager::broadcast(const TransportMessage& msg)
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetManager::addManager( std::shared_ptr<UniSetManager> child ) bool UniSetManager::addManager( const std::shared_ptr<UniSetManager>& child )
{ {
{ //lock { //lock
uniset_rwmutex_wrlock lock(mlistMutex); uniset_rwmutex_wrlock lock(mlistMutex);
...@@ -440,7 +440,7 @@ bool UniSetManager::addManager( std::shared_ptr<UniSetManager> child ) ...@@ -440,7 +440,7 @@ bool UniSetManager::addManager( std::shared_ptr<UniSetManager> child )
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
bool UniSetManager::removeManager( std::shared_ptr<UniSetManager> child ) bool UniSetManager::removeManager( const std::shared_ptr<UniSetManager>& child )
{ {
{ //lock { //lock
uniset_rwmutex_wrlock lock(mlistMutex); uniset_rwmutex_wrlock lock(mlistMutex);
...@@ -464,7 +464,7 @@ const std::shared_ptr<UniSetManager> UniSetManager::itemM( const ObjectId id ) ...@@ -464,7 +464,7 @@ const std::shared_ptr<UniSetManager> UniSetManager::itemM( const ObjectId id )
} }
} // unlock } // unlock
return 0; return nullptr; // std::shared_ptr<UniSetManager>();
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
...@@ -480,7 +480,7 @@ const std::shared_ptr<UniSetObject> UniSetManager::itemO( const ObjectId id ) ...@@ -480,7 +480,7 @@ const std::shared_ptr<UniSetObject> UniSetManager::itemO( const ObjectId id )
} }
} // unlock } // unlock
return std::shared_ptr<UniSetObject>(); return nullptr; // std::shared_ptr<UniSetObject>();
} }
// ------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------
......
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