source: libs/SamgarWRUTed/tags/1.0/QtGui/src/SgConnection.cpp @ 447

Revision 447, 5.1 KB checked in by lmalek, 10 years ago (diff)

tree structure reorganization

Line 
1#include "SgConnection.h"
2#include <yarp/os/all.h>
3
4namespace Sg
5{
6    SgConnection::SgConnection(const SgModule* module1, const SgPort* port1,
7                 const SgModule* module2, const SgPort* port2,
8                 SgProtocolType protocol, SgNetworkType network, const SgObject* parentObject):
9               SgObject(SgConnection::FullConnectionName(module1->getName(), port1->getName(),
10                                                         module2->getName(), port2->getName(),
11                                                         protocol, network),
12                        parentObject),
13               firstModule(module1), firstModulePort(port1), secondModule(module2),
14               secondModulePort(port2), protocol(protocol), network(network), connected(false)
15    {
16        fullName = SgConnection::FullConnectionName(*this);
17        //refreshState();
18    }
19
20    SgConnection::~SgConnection()
21    {
22        yarp::os::Network::disconnect(SgPort::FullPortName(*firstModulePort).c_str(),
23                                      SgPort::FullPortName(*secondModulePort).c_str());
24        yarp::os::Network::disconnect(SgPort::FullPortName(*secondModulePort).c_str(),
25                                      SgPort::FullPortName(*firstModulePort).c_str());
26    }
27
28    const SgModule* SgConnection::getFirstModule() const
29    {
30        return firstModule;
31    }
32
33    const SgPort* SgConnection::getFirstModulePort() const
34    {
35        return firstModulePort;
36    }
37
38    const SgModule* SgConnection::getSecondModule() const
39    {
40        return secondModule;
41    }
42
43    const SgPort* SgConnection::getSecondModulePort() const
44    {
45        return secondModulePort;
46    }
47
48    SgConnection::SgProtocolType SgConnection::getProtocol() const
49    {
50        return protocol;
51    }
52
53     SgConnection::SgNetworkType SgConnection::getNetwork() const
54    {
55        return network;
56    }
57
58    SgNameType SgConnection::getProtocolName() const
59    {
60        return ProtocolName(protocol);
61    }
62
63    SgNameType SgConnection::getNetworkName() const
64    {
65        return NetworkName(network);
66    }
67
68    bool SgConnection::getConnected() const
69    {
70        return connected;
71    }
72
73    void SgConnection::setFirstModule(const SgModule* newModule)
74    {
75        firstModule = newModule;
76        modified();
77    }
78
79    void SgConnection::setFirstModulePort(const SgPort* newPort)
80    {
81        firstModulePort = newPort;
82        modified();
83    }
84
85    void SgConnection::setSecondModule(const SgModule* newModule)
86    {
87        secondModule = newModule;
88        modified();
89    }
90
91    void SgConnection::setSecondModulePort(const SgPort* newPort)
92    {
93        secondModulePort = newPort;
94        modified();
95    }
96
97    void SgConnection::setProtocol(SgProtocolType newProtocol)
98    {
99        protocol = newProtocol;
100        modified();
101    }
102
103    void SgConnection::setNetwork( SgConnection::SgNetworkType newNetwork)
104    {
105        network = newNetwork;
106        modified();
107    }
108
109    void SgConnection::setConnected(const bool newConnected)
110    {
111        connected = newConnected;
112        modified();
113    }
114
115    bool SgConnection::refreshState()
116    {
117        bool firstModuleActive = false;
118        bool secondModuleActive = false;
119        // check if both modules are active
120        if ( this->firstModule == NULL || this->secondModule == NULL) // module exists
121        {
122            this->setConnected(false);
123            return false;
124        }
125        else
126        {
127            firstModuleActive = this->firstModule->getActive();
128            secondModuleActive = this->secondModule->getActive();
129        }
130
131        // get ports full name
132        std::string firstStr = this->firstModulePort->getFullName();
133        std::string secondStr = this->secondModulePort->getFullName();
134
135        if(firstModuleActive && secondModuleActive) // modules are active so they should be connected
136        {
137            bool connForwardFlag, connReturnFlag;
138            connForwardFlag = yarp::os::Network::isConnected(firstStr.c_str(),secondStr.c_str(),true);
139            connReturnFlag = yarp::os::Network::isConnected(secondStr.c_str(),firstStr.c_str(),true);
140            std::string conProto = SgConnection::ProtocolName(this->protocol);
141            if (!connForwardFlag || !connReturnFlag)
142            {
143                yarp::os::Network::disconnect(firstStr.c_str(), secondStr.c_str());
144                yarp::os::Network::disconnect(secondStr.c_str(), firstStr.c_str());
145                connForwardFlag = yarp::os::Network::connect(firstStr.c_str(), secondStr.c_str(), conProto.c_str(), true);
146                connReturnFlag = yarp::os::Network::connect(secondStr.c_str(), firstStr.c_str(), conProto.c_str(), true);
147            }
148            if(connForwardFlag && connReturnFlag)
149            {
150                if (!this->connected)
151                    this->setConnected(true);
152            }
153            else
154            {
155                if (this->connected)
156                    this->setConnected(false);
157            }
158        }
159        else
160            if (this->connected)
161                this->setConnected(false);
162        return this->connected;
163    }
164
165} // namespace Sg (END)
Note: See TracBrowser for help on using the repository browser.