From 4c830bc9822584e727f7b8e883472c780ab317cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Wed, 18 Jan 2017 12:27:41 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@305 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- CMakeLists.txt | 1 + main.cpp | 37 ++++++++++++++++++++++++++++++++++--- src/io/piethernet.cpp | 3 ++- src/io/pipeer.cpp | 21 +++++++++++++++++---- 4 files changed, 54 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e8f4544f..915e10ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,6 +44,7 @@ set(LIBS) if (DEBUG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") endif () +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3") # Sources set(PIP_FOLDERS "." "core" "containers" "thread" "system" "io" "console" "math" "code" "geo") diff --git a/main.cpp b/main.cpp index 51e6de7d..36c907fd 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,5 @@ #include "pip.h" - +/* struct __S__ { PIString text; int i; @@ -10,6 +10,26 @@ inline PIByteArray & operator >>(PIByteArray & s, __S__ & v) {s >> v.text >> v.i REGISTER_VARIANT(__S__) REGISTER_VARIANT_CAST(__S__, PIString) {return v.text + PIString::fromNumber(v.i);} REGISTER_VARIANT_CAST(__S__, int) {return v.i;} +*/ +const char app_config[] = + "include = cd_ip.conf\n\ + port_rec = 2\n\ + port_send = 1\n\ + [connection]\n\ + device.cd = peer://cd_app:cd_pult #s\n\ + []\n\ + connectionmodel = AAAM2Xja7VXLTttAFD12QpsikKjUSixYlLbKEpIUtVIlVEfqhk2FWuiGRRolUYtoHgrmpYiv6IItf8AveMMH9E/YsG6Ph3sde5hGoQoblLGuPHfunTPjc49nADxDA110+LTYC7FrPCAPeAO+vZu+aX7c/8PGd45WCJC0OGcfT6FDnmfSTPtwhZFt3HjgDs/Qtu5jPbZHtI/x50XfIzMQbdwEolbg9INP4ku++myPaUtCHYRaT2j1ldIh3VP60/Qff8vSfXLu9BP6JX9K/0TVH6jqVe22P1X/fao/oddWu/paDs1vBf9Jv/EZ91clbyHqv7BL6sscDOd4v4WTqs6jzaHGJ8QJerxlpJSpdZ7IWFJvDW7I2JxZqIM62k6A57RZmMQGmlyrxdV+WGBnmR01mXPI267hBKwp4FeBeo9VPtssxyb7rzHg1B7T9nCMU45U8BZlWuVWtIcD/CRGOqtsbW09851tXsHN0UTlLIAdASjSXnLyLn+H7L2+xbGYvC63Ezqg543egkLmn8qnRF6USbM4Qp9godkhzI777Ne5bCIt/5UtGz2o/yGby0nKpjqmbOa1ynkjmyzIrzvIZUeBPjvlUmbh32EFJbGyJZhR8YcvlS+3TpjhqeWSyvUkpbI9plSWtcKLcsK05beOJVEnhaEFfHEH+RwpeMcpn1JKGqWMNOL+G6wZyahlpdVOtufKfbDS+guLke9O\n\ + "; + +const char pult_config[] = + "include = cd_ip.conf\n\ + port_rec = 1\n\ + port_send = 2\n\ + [connection]\n\ + device.cd = peer://cd_pult:cd_app #s\n\ + []\n\ + connectionmodel = AAAM2Xja7VXLTttAFD12QpsikKjUSixYlLbKEpIUtVIlVEfqhk2FWuiGRRolUYtoHgrmpYiv6IItf8AveMMH9E/YsG6Ph3sde5hGoQoblLGuPHfunTPjc49nADxDA110+LTYC7FrPCAPeAO+vZu+aX7c/8PGd45WCJC0OGcfT6FDnmfSTPtwhZFt3HjgDs/Qtu5jPbZHtI/x50XfIzMQbdwEolbg9INP4ku++myPaUtCHYRaT2j1ldIh3VP60/Qff8vSfXLu9BP6JX9K/0TVH6jqVe22P1X/fao/oddWu/paDs1vBf9Jv/EZ91clbyHqv7BL6sscDOd4v4WTqs6jzaHGJ8QJerxlpJSpdZ7IWFJvDW7I2JxZqIM62k6A57RZmMQGmlyrxdV+WGBnmR01mXPI267hBKwp4FeBeo9VPtssxyb7rzHg1B7T9nCMU45U8BZlWuVWtIcD/CRGOqtsbW09851tXsHN0UTlLIAdASjSXnLyLn+H7L2+xbGYvC63Ezqg543egkLmn8qnRF6USbM4Qp9godkhzI777Ne5bCIt/5UtGz2o/yGby0nKpjqmbOa1ynkjmyzIrzvIZUeBPjvlUmbh32EFJbGyJZhR8YcvlS+3TpjhqeWSyvUkpbI9plSWtcKLcsK05beOJVEnhaEFfHEH+RwpeMcpn1JKGqWMNOL+G6wZyahlpdVOtufKfbDS+guLke9O\n\ + "; int main(int argc, char *argv[]) { /*__S__ s, s1; @@ -21,7 +41,7 @@ int main(int argc, char *argv[]) { PIVariant v1; ba >> v1; piCout << v1;*/ - PISet s0; + /*PISet s0; s0 << 1 << 3 << 5; PIVector v; v << -1 << 8 << 0 << 2 << 1 << 6 << 4 << 3; @@ -29,7 +49,18 @@ int main(int argc, char *argv[]) { PISet s1(v); piCout << s1; s1.subtract(s0); - piCout << s1; + piCout << s1;*/ + PIConnection c; + PIString s(app_config); + c.configureFromString(&s); + c.start(); + piMSleep(3000); + s = pult_config; + c.stop(); + c.removeAllDevices(); + c.configureFromString(&s); + c.start(); + piMSleep(3000); return 0; } diff --git a/src/io/piethernet.cpp b/src/io/piethernet.cpp index b8c162ba..b7a0c4ef 100755 --- a/src/io/piethernet.cpp +++ b/src/io/piethernet.cpp @@ -133,7 +133,7 @@ PIEthernet::PIEthernet(int sock_, PIString ip_port): PIIODevice("", ReadWrite) { PIEthernet::~PIEthernet() { - //piCoutObj << "~PIEthernet ..."; + //piCout << "~PIEthernet" << uint(this); stop(); closeDevice(); piMonitor.ethernets--; @@ -142,6 +142,7 @@ PIEthernet::~PIEthernet() { void PIEthernet::construct() { + //piCout << " PIEthernet" << uint(this); piMonitor.ethernets++; connected_ = connecting_ = listen_threaded = server_bounded = false; port_ = port_s = port_r = 0; diff --git a/src/io/pipeer.cpp b/src/io/pipeer.cpp index 03b42cb4..c86f7b8f 100755 --- a/src/io/pipeer.cpp +++ b/src/io/pipeer.cpp @@ -135,6 +135,7 @@ PIString PIPeer::PeerInfo::fastestAddress() const { REGISTER_DEVICE(PIPeer) PIPeer::PIPeer(const PIString & n): PIIODevice(), eth_tcp_srv(PIEthernet::TCP_Server), eth_tcp_cli(PIEthernet::TCP_Client), diag_s(false), diag_d(false) { + //piCout << " PIPeer" << uint(this); destroyed = false; setDebug(false); PIMutexLocker mbl(mc_mutex); @@ -158,6 +159,8 @@ PIPeer::PIPeer(const PIString & n): PIIODevice(), eth_tcp_srv(PIEthernet::TCP_Se PIPeer::~PIPeer() { + //piCout << "~PIPeer" << uint(this); + if (destroyed) return; destroyed = true; PIMutexLocker ml(peers_mutex); piForeach (PeerInfo & p, peers) @@ -170,10 +173,14 @@ PIPeer::~PIPeer() { diag_s.stop(); diag_d.stop(); destroyEths(); - piForeach (PIEthernet * i, eths_mcast) + piForeach (PIEthernet * i, eths_mcast) { + if (!i) continue; i->stopThreadedRead(); - piForeach (PIEthernet * i, eths_bcast) + } + piForeach (PIEthernet * i, eths_bcast) { + if (!i) continue; i->stopThreadedRead(); + } eth_lo.stopThreadedRead(); eth_tcp_srv.stopThreadedRead(); eth_tcp_cli.stopThreadedRead(); @@ -320,11 +327,13 @@ void PIPeer::initMBcasts(PIStringList al) { void PIPeer::destroyEths() { piForeach (PIEthernet * i, eths_traffic) { + if (!i) continue; ((PIThread*)i)->stop(); ((PIThread*)i)->waitForFinish(100); i->stopThreadedRead(); i->close(); delete i; + i = 0; } eths_traffic.clear(); } @@ -332,26 +341,30 @@ void PIPeer::destroyEths() { void PIPeer::destroyMBcasts() { piForeach (PIEthernet * i, eths_mcast) { + if (!i) continue; ((PIThread*)i)->stop(); ((PIThread*)i)->waitForFinish(100); i->stopThreadedRead(); i->leaveMulticastGroup(_PIPEER_MULTICAST_IP); i->close(); delete i; + i = 0; } + eths_mcast.clear(); piForeach (PIEthernet * i, eths_bcast) { + if (!i) continue; ((PIThread*)i)->stop(); ((PIThread*)i)->waitForFinish(100); i->stopThreadedRead(); i->close(); delete i; + i = 0; } + eths_bcast.clear(); ((PIThread*)ð_lo)->stop(); ((PIThread*)ð_lo)->waitForFinish(100); eth_lo.stopThreadedRead(); eth_lo.close(); - eths_mcast.clear(); - eths_bcast.clear(); eth_tcp_srv.stop(); }