Showing
23 changed files
with
1823 additions
and
0 deletions
applications/network/client1.xml
0 → 100644
1 | +<application mode="event"> | ||
2 | + <context> | ||
3 | + <libraries> | ||
4 | + <library path="../../libs/sample"/> | ||
5 | + <library path="../../libs/network"/> | ||
6 | + </libraries> | ||
7 | + <components> | ||
8 | + <component id="b" type="Loop"></component> | ||
9 | + <component id="n" type="Network">arcs://localhost:2031</component> | ||
10 | + <component id="s" type="StateMachine"> | ||
11 | + <statemachine> | ||
12 | + <first name="start"/> | ||
13 | + <last name="end"/> | ||
14 | + <transitions> | ||
15 | + <transition source="start" token="end" destination="end"/> | ||
16 | + </transitions> | ||
17 | + </statemachine> | ||
18 | + </component> | ||
19 | + </components> | ||
20 | + <constants> | ||
21 | + <constant id="iterations" type="int">5</constant> | ||
22 | + </constants> | ||
23 | + </context> | ||
24 | + | ||
25 | + <processes> | ||
26 | + <process controller="s"> | ||
27 | + <sheet id="start"> | ||
28 | + <connections> | ||
29 | + <link source="b" signal="newIteration(int)" destination="n" slot="display(int)"/> | ||
30 | + <link source="b" signal="sendToken(QString)" destination="s" slot="setToken(QString)" /> | ||
31 | + </connections> | ||
32 | + <postconnections> | ||
33 | + <invoke destination="b" slot="setIterations(int)" type="constant">iterations</invoke> | ||
34 | + </postconnections> | ||
35 | + </sheet> | ||
36 | + <sheet id="end"/> | ||
37 | + </process> | ||
38 | +</processes> | ||
39 | + | ||
40 | +</application> |
applications/network/client2.xml
0 → 100644
1 | +<application mode="event"> | ||
2 | + <context> | ||
3 | + <libraries> | ||
4 | + <library path="../../libs/sample"/> | ||
5 | + <library path="../../libs/network"/> | ||
6 | + </libraries> | ||
7 | + <components> | ||
8 | + <component id="n" type="Network">arcs://localhost:2030</component> | ||
9 | + <component id="d" type="DisplayInt"></component> | ||
10 | + <component id="s" type="StateMachine"> | ||
11 | + <statemachine> | ||
12 | + <first name="start"/> | ||
13 | + <last name="end"/> | ||
14 | + <transitions> | ||
15 | + <transition source="start" token="end" destination="end"/> | ||
16 | + </transitions> | ||
17 | + </statemachine> | ||
18 | + </component> | ||
19 | + </components> | ||
20 | + <constants> | ||
21 | + <constant id="iterations" type="int">5</constant> | ||
22 | + </constants> | ||
23 | + </context> | ||
24 | + | ||
25 | + <processes> | ||
26 | + <process controller="s"> | ||
27 | + <sheet id="start"> | ||
28 | + <connections> | ||
29 | + <link source="n" signal="newIteration(int)" destination="d" slot="display(int)"/> | ||
30 | + </connections> | ||
31 | + <postconnections> | ||
32 | + <invoke destination="n" slot="setIterations(int)" type="constant">iterations</invoke> | ||
33 | + <invoke destination="s" slot="setToken(QString)" type="string">end</invoke> | ||
34 | + </postconnections> | ||
35 | + </sheet> | ||
36 | + <sheet id="end"/> | ||
37 | + </process> | ||
38 | +</processes> | ||
39 | + | ||
40 | +</application> |
applications/network/client3.xml
0 → 100644
1 | +<application mode="event"> | ||
2 | + <context> | ||
3 | + <libraries> | ||
4 | + <library path="../../libs/sample"/> | ||
5 | + <library path="../../libs/network"/> | ||
6 | + </libraries> | ||
7 | + <components> | ||
8 | + <component id="n_l" type="Network">arcs://localhost:2030</component> | ||
9 | + <component id="n_di" type="Network">arcs://localhost:2031</component> | ||
10 | + <component id="s" type="StateMachine"> | ||
11 | + <statemachine> | ||
12 | + <first name="start"/> | ||
13 | + <last name="end"/> | ||
14 | + <transitions> | ||
15 | + <transition source="start" token="end" destination="end"/> | ||
16 | + </transitions> | ||
17 | + </statemachine> | ||
18 | + </component> | ||
19 | + </components> | ||
20 | + <constants> | ||
21 | + <constant id="iterations" type="int">5</constant> | ||
22 | + </constants> | ||
23 | + </context> | ||
24 | + | ||
25 | + <processes> | ||
26 | + <process controller="s"> | ||
27 | + <sheet id="start"> | ||
28 | + <connections> | ||
29 | + <link source="n_l" signal="newIteration(int)" destination="n_di" slot="display(int)"/> | ||
30 | + </connections> | ||
31 | + <postconnections> | ||
32 | + <invoke destination="n_l" slot="setIterations(int)" type="constant">iterations</invoke> | ||
33 | + <invoke destination="s" slot="setToken(QString)" type="string">end</invoke> | ||
34 | + </postconnections> | ||
35 | + </sheet> | ||
36 | + <sheet id="end"/> | ||
37 | + </process> | ||
38 | +</processes> | ||
39 | + | ||
40 | +</application> |
applications/network/service_displayint.xml
0 → 100644
1 | +<application mode="event"> | ||
2 | + <context> | ||
3 | + <libraries> | ||
4 | + <library path="../../libs/sample"/> | ||
5 | + <library path="../../libs/network"/> | ||
6 | + </libraries> | ||
7 | + <components> | ||
8 | + <component id="d" type="DisplayInt"></component> | ||
9 | + <component id="n" type="ARCSNetworkConfigurator"></component> | ||
10 | + <component id="s" type="StateMachine"> | ||
11 | + <statemachine> | ||
12 | + <first name="start"/> | ||
13 | + <last name="end"/> | ||
14 | + <transitions> | ||
15 | + <transition source="start" token="end" destination="end"/> | ||
16 | + </transitions> | ||
17 | + </statemachine> | ||
18 | + </component> | ||
19 | + </components> | ||
20 | + </context> | ||
21 | + | ||
22 | + <processes> | ||
23 | + <process controller="s"> | ||
24 | + <sheet id="start"> | ||
25 | + <preconnections> | ||
26 | + <invoke destination="n" slot="setPort(int)" type="int">2031</invoke> | ||
27 | + <invoke destination="n" slot="setInterface(QString)" type="string">d</invoke> | ||
28 | + </preconnections> | ||
29 | + </sheet> | ||
30 | + <sheet id="end"/> | ||
31 | + </process> | ||
32 | +</processes> | ||
33 | + | ||
34 | +</application> |
applications/network/service_loop.xml
0 → 100644
1 | +<application mode="event"> | ||
2 | + <context> | ||
3 | + <libraries> | ||
4 | + <library path="../../libs/sample"/> | ||
5 | + <library path="../../libs/network"/> | ||
6 | + </libraries> | ||
7 | + <components> | ||
8 | + <component id="l" type="Loop"></component> | ||
9 | + <component id="n" type="ARCSNetworkConfigurator"></component> | ||
10 | + <component id="s" type="StateMachine"> | ||
11 | + <statemachine> | ||
12 | + <first name="start"/> | ||
13 | + <last name="end"/> | ||
14 | + <transitions> | ||
15 | + <transition source="start" token="end" destination="end"/> | ||
16 | + </transitions> | ||
17 | + </statemachine> | ||
18 | + </component> | ||
19 | + </components> | ||
20 | + </context> | ||
21 | + | ||
22 | + <processes> | ||
23 | + <process controller="s"> | ||
24 | + <sheet id="start"> | ||
25 | + <preconnections> | ||
26 | + <invoke destination="n" slot="setPort(int)" type="int">2030</invoke> | ||
27 | + <invoke destination="n" slot="setInterface(QString)" type="string">l</invoke> | ||
28 | + </preconnections> | ||
29 | + </sheet> | ||
30 | + <sheet id="end"/> | ||
31 | + </process> | ||
32 | +</processes> | ||
33 | + | ||
34 | +</application> |
network/Makefile
0 → 100644
This diff is collapsed. Click to expand it.
network/alm_libnetwork.cpp
0 → 100644
1 | +#include<arcs/arcslibtoolkit.h> | ||
2 | +#include<QMetaType> | ||
3 | +#include<arcsnetworkfamily.h> | ||
4 | +#include<arcsnetworkcomponent.h> | ||
5 | +#include<arcsnetworkconfigurator.h> | ||
6 | + | ||
7 | +extern "C" DLL_EXPORT void arcsLibraryRegister(ARCSComponentMap* cmap, ARCSFamilyMap* fmap, ARCSTypeMap* ) | ||
8 | +{ | ||
9 | + cmap->insert("ARCSNetworkConfigurator",new ARCSNativeComponentTemplate<ARCSNetworkConfigurator>()); | ||
10 | + | ||
11 | + fmap->insert("ARCSNetworkFamily",new ARCSNetworkFamily()); | ||
12 | + | ||
13 | +} | ||
14 | + | ||
15 | +extern "C" DLL_EXPORT void arcsLibraryUnregister(ARCSComponentMap* cmap, ARCSFamilyMap* fmap, ARCSTypeMap* ) | ||
16 | +{ | ||
17 | + delete cmap->take("ARCSNetworkConfigurator"); | ||
18 | + | ||
19 | + delete fmap->take("ARCSNetworkFamily"); | ||
20 | + | ||
21 | +} | ||
22 | + |
network/arcsnetworkcomponent.cpp
0 → 100644
1 | +#include "arcsnetworkcomponent.h" | ||
2 | +#include <arcs/arcsfactory.h> | ||
3 | +#include "arcsnetworkproxyslot.h" | ||
4 | +#include "arcsnetworkproxysignal.h" | ||
5 | +#include "arcsnetworkframes.h" | ||
6 | + | ||
7 | +#include <QTcpSocket> | ||
8 | + | ||
9 | +/******************************************************** | ||
10 | + * ARCSRemote Component | ||
11 | + ************************************************************/ | ||
12 | + | ||
13 | +ARCSNetworkComponent::ARCSNetworkComponent() | ||
14 | +{ | ||
15 | + setType("Network"); | ||
16 | + setFamily("Network"); | ||
17 | + | ||
18 | + hostName = "localhost"; | ||
19 | + port = 2020; | ||
20 | + connectStatus = false; | ||
21 | +} | ||
22 | + | ||
23 | + | ||
24 | +ARCSNetworkComponent::~ARCSNetworkComponent() | ||
25 | +{ | ||
26 | + | ||
27 | + | ||
28 | +} | ||
29 | + | ||
30 | +QString ARCSNetworkComponent::toString() | ||
31 | +{ | ||
32 | + return "arcs://" + hostName +":" + QString::number(port) + "/" ; //+ interface; | ||
33 | +} | ||
34 | + | ||
35 | +bool ARCSNetworkComponent::parseString(QString s) | ||
36 | +{ | ||
37 | + // arcs://host:port/interface | ||
38 | + | ||
39 | + QString inter = s.section("/", 2,2); | ||
40 | + hostName = inter.section(":",0,0); | ||
41 | + QString portString = inter.section(":",1,1); | ||
42 | + interface = inter.section("/",3); | ||
43 | + | ||
44 | + if (!portString.isEmpty()) | ||
45 | + { | ||
46 | + int tmp = portString.toInt(); | ||
47 | + if (tmp > 0 && tmp < 65536) | ||
48 | + port = tmp; | ||
49 | + } | ||
50 | + | ||
51 | + if ( hostName.isEmpty() ) | ||
52 | + return false; | ||
53 | + | ||
54 | + | ||
55 | + return true; | ||
56 | +} | ||
57 | + | ||
58 | +QStringList ARCSNetworkComponent::getSignals() | ||
59 | +{ | ||
60 | + QStringList res; | ||
61 | + QTcpSocket* socket = new QTcpSocket(); | ||
62 | + socket->connectToHost(hostName, port); | ||
63 | + if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut)) | ||
64 | + { | ||
65 | + std::cerr << "[Network] interface request error " << qPrintable(socket->errorString()) << std::endl; | ||
66 | + return res; | ||
67 | + } | ||
68 | + | ||
69 | + ARCSNetworkFrame request(ARCSNetworkFrame::IFACE_REQUEST); | ||
70 | + request.writeFrame(socket); | ||
71 | + | ||
72 | + ARCSNetworkFrame* response = ARCSNetworkFrame::readFrame(socket); | ||
73 | + if (response ) | ||
74 | + { | ||
75 | + if (response->getType() != ARCSNetworkFrame::IFACE_RESPONSE) | ||
76 | + std::cerr << "[Network] invalid response recieved to interface request." << std::endl; | ||
77 | + else | ||
78 | + res = ((ARCSNetworkInterfaceResponse*)response->getData())->getSignals(); | ||
79 | + } | ||
80 | + else | ||
81 | + std::cerr << "[Network] Null interface response recieved ! " << std::endl; | ||
82 | + | ||
83 | + socket->disconnectFromHost(); | ||
84 | + if (response) | ||
85 | + delete response; | ||
86 | + | ||
87 | + return res; | ||
88 | +} | ||
89 | + | ||
90 | + | ||
91 | +QStringList ARCSNetworkComponent::getSlots() | ||
92 | +{ | ||
93 | + QStringList res; | ||
94 | + QTcpSocket* socket = new QTcpSocket(); | ||
95 | + socket->connectToHost(hostName, port); | ||
96 | + if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut)) | ||
97 | + { | ||
98 | + std::cerr << "[Network] interface request error " << qPrintable(socket->errorString()) << std::endl; | ||
99 | + return res; | ||
100 | + } | ||
101 | + | ||
102 | + ARCSNetworkFrame request(ARCSNetworkFrame::IFACE_REQUEST); | ||
103 | + request.writeFrame(socket); | ||
104 | + | ||
105 | + ARCSNetworkFrame* response = ARCSNetworkFrame::readFrame(socket); | ||
106 | + if (response ) | ||
107 | + { | ||
108 | + if (response->getType() != ARCSNetworkFrame::IFACE_RESPONSE) | ||
109 | + std::cerr << "[Network] invalid response recieved to interface request." << std::endl; | ||
110 | + else | ||
111 | + res = ((ARCSNetworkInterfaceResponse*)response->getData())->getSlots(); | ||
112 | + } | ||
113 | + else | ||
114 | + std::cerr << "[Network] Null interface response recieved ! " << std::endl; | ||
115 | + | ||
116 | + socket->disconnectFromHost(); | ||
117 | + if (response) | ||
118 | + delete response; | ||
119 | + | ||
120 | + return res; | ||
121 | +} | ||
122 | + | ||
123 | + | ||
124 | +void ARCSNetworkComponent::getProxySlot (QString slot, ObjectList &obj, QStringList &proxySlot) | ||
125 | +{ | ||
126 | + ARCSNetworkProxySlot* proxy; | ||
127 | + if (proxySlots.contains(slot)) | ||
128 | + proxy = proxySlots[slot]; | ||
129 | + else | ||
130 | + { | ||
131 | + proxy = new ARCSNetworkProxySlot(this); | ||
132 | + proxy->setHostname(hostName); | ||
133 | + proxy->setPort(port); | ||
134 | + proxySlots.insert(slot, proxy); | ||
135 | + } | ||
136 | + | ||
137 | + obj << proxy; | ||
138 | + proxy->setSlot(slot); | ||
139 | + proxySlot << slot ; | ||
140 | +} | ||
141 | + | ||
142 | + | ||
143 | +void ARCSNetworkComponent::requestSlotConnect(ARCSNetworkProxySlot* anps) | ||
144 | +{ | ||
145 | + QTcpSocket* socket = new QTcpSocket(anps); | ||
146 | + socket->connectToHost(hostName, port); | ||
147 | + if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut)) | ||
148 | + { | ||
149 | + std::cerr << "[Network] slot request error " << qPrintable(socket->errorString()) << std::endl; | ||
150 | + return ; | ||
151 | + } | ||
152 | + | ||
153 | + ARCSNetworkFrame request(ARCSNetworkFrame::SLOT_REQUEST); | ||
154 | + ((ARCSNetworkSlotRequest*)request.getData())->setSlot(anps->getSlot()); | ||
155 | + request.writeFrame(socket); | ||
156 | + | ||
157 | + ARCSNetworkFrame* response = ARCSNetworkFrame::readFrame(socket); | ||
158 | + if (response ) | ||
159 | + { | ||
160 | + if (response->getType() != ARCSNetworkFrame::CONNECT_RESPONSE) | ||
161 | + std::cerr << "[Network] invalid response recieved to connect request." << std::endl; | ||
162 | + else | ||
163 | + anps->setSlotId(((ARCSNetworkConnectResponse*)response->getData())->getId()); | ||
164 | + } | ||
165 | + else | ||
166 | + std::cerr << "[Network] Null connect response recieved ! " << std::endl; | ||
167 | + | ||
168 | + socket->disconnectFromHost(); | ||
169 | + if (response) | ||
170 | + delete response; | ||
171 | +} | ||
172 | + | ||
173 | + | ||
174 | +void ARCSNetworkComponent::requestSignalConnect(ARCSNetworkProxySignal* anps) | ||
175 | +{ | ||
176 | + QTcpSocket* socket = new QTcpSocket(); | ||
177 | + socket->connectToHost(hostName, port); | ||
178 | + if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut)) | ||
179 | + { | ||
180 | + std::cerr << "[Network] signal request error " << qPrintable(socket->errorString()) << std::endl; | ||
181 | + return ; | ||
182 | + } | ||
183 | + | ||
184 | + ARCSNetworkFrame request(ARCSNetworkFrame::SIGNAL_REQUEST); | ||
185 | + ((ARCSNetworkSignalRequest*)request.getData())->setParams( | ||
186 | + anps->getId(), | ||
187 | + ARCSNetworkServer::getInstance()->getPort(), | ||
188 | + anps->getSignal() | ||
189 | + ); | ||
190 | + | ||
191 | + request.writeFrame(socket); | ||
192 | + | ||
193 | + ARCSNetworkFrame* response = ARCSNetworkFrame::readFrame(socket); | ||
194 | + if (response) | ||
195 | + delete response; | ||
196 | + | ||
197 | + socket->disconnectFromHost(); | ||
198 | + delete socket; | ||
199 | +} | ||
200 | + | ||
201 | +void ARCSNetworkComponent::requestSignalDisconnect(ARCSNetworkProxySignal* anps) | ||
202 | +{ | ||
203 | + QTcpSocket* socket = new QTcpSocket(); | ||
204 | + socket->connectToHost(hostName, port); | ||
205 | + if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut)) | ||
206 | + { | ||
207 | + std::cerr << "[Network] signal request error " << qPrintable(socket->errorString()) << std::endl; | ||
208 | + return ; | ||
209 | + } | ||
210 | + | ||
211 | + ARCSNetworkFrame request(ARCSNetworkFrame::DISCONNECT_REQUEST); | ||
212 | + ((ARCSNetworkDisconnectRequest*)request.getData())->setSignal(anps->getSignal()); | ||
213 | + | ||
214 | + request.writeFrame(socket); | ||
215 | + | ||
216 | + ARCSNetworkFrame* response = ARCSNetworkFrame::readFrame(socket); | ||
217 | + if (response) | ||
218 | + delete response; | ||
219 | + | ||
220 | + socket->disconnectFromHost(); | ||
221 | + delete socket; | ||
222 | +} | ||
223 | + | ||
224 | + | ||
225 | + | ||
226 | +void ARCSNetworkComponent::getProxySignal (QString signal, ObjectList &obj, QStringList &proxySignal) | ||
227 | +{ | ||
228 | + QString id = getProperty("id").toString(); | ||
229 | + ARCSNetworkProxySignal* proxy = ARCSNetworkServer::getInstance()->getProxySignal(signal); | ||
230 | + proxy->setHome(this); | ||
231 | + obj << proxy; | ||
232 | + proxySignal << signal; | ||
233 | +} | ||
234 | + | ||
235 | + | ||
236 | +bool ARCSNetworkComponent::genuineConnect (QString sig, ARCSAbstractComponent *dst, QString slt, bool ) | ||
237 | +{ | ||
238 | + QTcpSocket* socket = new QTcpSocket(); | ||
239 | + socket->connectToHost(hostName, port); | ||
240 | + if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut)) | ||
241 | + { | ||
242 | + std::cerr << "[Network] call error " << qPrintable(socket->errorString()) << std::endl; | ||
243 | + return false; | ||
244 | + } | ||
245 | + | ||
246 | + | ||
247 | + ARCSNetworkFrame request(ARCSNetworkFrame::CONNECT_REQUEST); | ||
248 | + ((ARCSNetworkConnectRequest*)request.getData())->setParams(sig, dst->toString(), slt); | ||
249 | + | ||
250 | + request.writeFrame(socket); | ||
251 | + ARCSNetworkFrame* response = ARCSNetworkFrame::readFrame(socket); | ||
252 | + if (response) | ||
253 | + delete response; | ||
254 | + | ||
255 | + socket->disconnectFromHost(); | ||
256 | + delete socket; | ||
257 | + | ||
258 | + return true; | ||
259 | +} | ||
260 | + | ||
261 | + | ||
262 | +bool ARCSNetworkComponent::genuineDisconnect(QString sig, ARCSAbstractComponent* , QString ) | ||
263 | +{ | ||
264 | + QTcpSocket* socket = new QTcpSocket(); | ||
265 | + socket->connectToHost(hostName, port); | ||
266 | + if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut)) | ||
267 | + { | ||
268 | + std::cerr << "[Network] call error " << qPrintable(socket->errorString()) << std::endl; | ||
269 | + return false; | ||
270 | + } | ||
271 | + | ||
272 | + | ||
273 | + ARCSNetworkFrame request(ARCSNetworkFrame::DISCONNECT_REQUEST); | ||
274 | + ((ARCSNetworkDisconnectRequest*)request.getData())->setSignal(sig); | ||
275 | + | ||
276 | + request.writeFrame(socket); | ||
277 | + ARCSNetworkFrame* response = ARCSNetworkFrame::readFrame(socket); | ||
278 | + if (response) | ||
279 | + delete response; | ||
280 | + | ||
281 | + socket->disconnectFromHost(); | ||
282 | + delete socket; | ||
283 | + | ||
284 | + return true; | ||
285 | +} | ||
286 | + | ||
287 | + | ||
288 | + |
network/arcsnetworkcomponent.h
0 → 100644
1 | +#ifndef __ARCSREMOTECOMPONENT_H__ | ||
2 | +#define __ARCSREMOTECOMPONENT_H__ | ||
3 | + | ||
4 | +#include <arcs/arcsabstractcomponent.h> | ||
5 | +#include <arcs/arcsnativecomponent.h> | ||
6 | +#include <QHash> | ||
7 | +#include <QObject> | ||
8 | +#include "arcsnetworkserver.h" | ||
9 | +#include <iostream> | ||
10 | + | ||
11 | + | ||
12 | +class ARCSNetworkProxySlot; | ||
13 | + | ||
14 | +//! Class describing a remote component | ||
15 | +/*! This description is only intended to used at the master side of the application. | ||
16 | + *\author Jean-Yves Didier and Mehdi Chouiten | ||
17 | + * \ingroup network | ||
18 | + * \date July, the 9th, 2009 | ||
19 | + */ | ||
20 | + class ARCSNetworkComponent : public ARCSAbstractComponent | ||
21 | + { | ||
22 | + public: | ||
23 | + ARCSNetworkComponent(); | ||
24 | + ~ARCSNetworkComponent(); | ||
25 | + | ||
26 | + virtual QString toString(); | ||
27 | + virtual bool parseString(QString s); | ||
28 | + virtual QStringList getSignals(); | ||
29 | + virtual QStringList getSlots(); | ||
30 | + | ||
31 | + void requestSlotConnect(ARCSNetworkProxySlot* anps); | ||
32 | + void requestSignalConnect(ARCSNetworkProxySignal* anps); | ||
33 | + void requestSignalDisconnect(ARCSNetworkProxySignal* anps); | ||
34 | + | ||
35 | + | ||
36 | + void clearProxySlots(); | ||
37 | + | ||
38 | + | ||
39 | + protected: | ||
40 | + virtual void getProxySlot (QString slot, ObjectList &obj, QStringList &proxySlot); | ||
41 | + | ||
42 | + virtual void getProxySignal (QString signal, ObjectList &obj, QStringList &proxySignal); | ||
43 | + | ||
44 | + virtual bool genuineConnect (QString sig, ARCSAbstractComponent *dst, QString slt, bool queued=false); | ||
45 | + | ||
46 | + virtual bool genuineDisconnect (QString sig, ARCSAbstractComponent *dst, QString slt); | ||
47 | + | ||
48 | + virtual bool genuineInstanciate () | ||
49 | + { | ||
50 | + if (!ARCSNetworkServer::getInstance()->isListening()) | ||
51 | + ARCSNetworkServer::getInstance()->start(); | ||
52 | + return true; | ||
53 | + } | ||
54 | + | ||
55 | + virtual void genuineDestroy () | ||
56 | + { | ||
57 | + } | ||
58 | + | ||
59 | + virtual ARCSAbstractComponent * genuineClone () | ||
60 | + { | ||
61 | + return 0; | ||
62 | + } | ||
63 | + | ||
64 | +private: | ||
65 | + QString hostName; | ||
66 | + QString interface; | ||
67 | + int port; | ||
68 | + bool connectStatus; | ||
69 | + QHash<QString, ARCSNetworkProxySlot*> proxySlots; | ||
70 | +}; | ||
71 | + | ||
72 | +#endif // __ARCSREMOTECOMPONENT_H__ |
network/arcsnetworkconfigurator.h
0 → 100644
1 | +#ifndef __ARCSNETWORKCONFIGURATOR_H__ | ||
2 | +#define __ARCSNETWORKCONFIGURATOR_H__ | ||
3 | + | ||
4 | +#include <QObject> | ||
5 | +#include "arcsnetworkserver.h" | ||
6 | + | ||
7 | + | ||
8 | +//! Simple component intended to configure a network server. | ||
9 | +/*! This should mainly be used in the slave side. | ||
10 | + * \author Jean-Yves Didier | ||
11 | + * \ingroup network | ||
12 | + * \date November, the 5th, 2009 | ||
13 | + */ | ||
14 | +class ARCSNetworkConfigurator : public QObject | ||
15 | +{ | ||
16 | + Q_OBJECT | ||
17 | + | ||
18 | + public: | ||
19 | + ARCSNetworkConfigurator(QObject* parent=0) : QObject(parent) {} //!< ARCS Constructor | ||
20 | + | ||
21 | + public slots: | ||
22 | + /*! \brief Sets the interface to use and that will be seen from afar. | ||
23 | + * \param s The component name implementing the interface. | ||
24 | + */ | ||
25 | + void setInterface(QString s) { ARCSNetworkServer::getInstance()->setInterface(s); } | ||
26 | + /*! \brief Sets the port to which the server is listening to. | ||
27 | + * \param i a port number ( 0 < i < 65536) | ||
28 | + */ | ||
29 | + void setPort(int i) { ARCSNetworkServer::getInstance()->setPort(i); } | ||
30 | +}; | ||
31 | + | ||
32 | + | ||
33 | +#endif // __ARCSNETWORKCONFIGURATOR_H__ |
network/arcsnetworkfamily.h
0 → 100644
1 | +#ifndef __ARCSNETWORKFAMILY_H__ | ||
2 | +#define __ARCSNETWORKFAMILY_H__ | ||
3 | + | ||
4 | +#include <arcs/arcsabstractfamily.h> | ||
5 | +#include "arcsnetworkcomponent.h" | ||
6 | + | ||
7 | + | ||
8 | +/*! | ||
9 | + * \defgroup network Network distribution in ARCS | ||
10 | + * | ||
11 | + * This library is defining a very basic distributed protocol for ARCS applications. | ||
12 | + */ | ||
13 | + | ||
14 | +//! Network component family | ||
15 | +/*! | ||
16 | + * \author Jean-Yves Didier | ||
17 | + * \date November, the 5th, 2009 | ||
18 | + * \ingroup network | ||
19 | + */ | ||
20 | +class ARCSNetworkFamily : public ARCSAbstractFamily | ||
21 | +{ | ||
22 | + public: | ||
23 | + ARCSNetworkFamily() { } | ||
24 | + ~ARCSNetworkFamily() { } | ||
25 | + | ||
26 | + virtual QStringList factoryList() { return QStringList("Network"); } | ||
27 | + virtual bool addFactory(QString, ARCSAbstractComponent*) { return false; } | ||
28 | + virtual void removeFactory(QString) { } | ||
29 | + virtual ARCSAbstractComponent* instanciate(QString type) | ||
30 | + { | ||
31 | + if (type == "Network") | ||
32 | + return new ARCSNetworkComponent(); | ||
33 | + return 0; | ||
34 | + } | ||
35 | + | ||
36 | + virtual void destroy(ARCSAbstractComponent* component) | ||
37 | + { | ||
38 | + delete component; | ||
39 | + } | ||
40 | + | ||
41 | + virtual QString name() const { return "ARCSNetworkFamily"; } | ||
42 | + | ||
43 | +}; | ||
44 | + | ||
45 | +#endif // __ARCSNETWORKFAMILY_H__ |
network/arcsnetworkframes.cpp
0 → 100644
1 | +#include "arcsnetworkframes.h" | ||
2 | +#include <QDataStream> | ||
3 | +#include <QByteArray> | ||
4 | +#include <iostream> | ||
5 | + | ||
6 | + | ||
7 | +int ARCSNetworkFrame::TimeOut = -1; // 5000; | ||
8 | + | ||
9 | + | ||
10 | +void ARCSNetworkFrame::setType(ARCSNetworkFrames t) | ||
11 | +{ | ||
12 | + if (data) | ||
13 | + delete data; | ||
14 | + | ||
15 | + type = t; | ||
16 | + switch(type) | ||
17 | + { | ||
18 | + case IFACE_REQUEST: | ||
19 | + data = new ARCSNetworkInterfaceRequest(); | ||
20 | + break; | ||
21 | + case IFACE_RESPONSE: | ||
22 | + data = new ARCSNetworkInterfaceResponse(); | ||
23 | + break; | ||
24 | + case CONNECT_REQUEST: | ||
25 | + data = new ARCSNetworkConnectRequest(); | ||
26 | + break; | ||
27 | + case DISCONNECT_REQUEST: | ||
28 | + data = new ARCSNetworkDisconnectRequest(); | ||
29 | + break; | ||
30 | + case CONNECT_RESPONSE: | ||
31 | + data = new ARCSNetworkConnectResponse(); | ||
32 | + break; | ||
33 | + case CALL_REQUEST: | ||
34 | + data = new ARCSNetworkCallRequest(); | ||
35 | + break; | ||
36 | + case CALL_RESPONSE: | ||
37 | + data = new ARCSNetworkCallResponse(); | ||
38 | + break; | ||
39 | + | ||
40 | + case SLOT_REQUEST: | ||
41 | + data = new ARCSNetworkSlotRequest(); | ||
42 | + break; | ||
43 | + case SIGNAL_REQUEST: | ||
44 | + data = new ARCSNetworkSignalRequest(); | ||
45 | + break; | ||
46 | + | ||
47 | + default: | ||
48 | + type = INVALID; | ||
49 | + data = 0 ; | ||
50 | + } | ||
51 | + | ||
52 | +} | ||
53 | + | ||
54 | + | ||
55 | + | ||
56 | + | ||
57 | +ARCSNetworkFrame* ARCSNetworkFrame::readFrame(QIODevice* device) | ||
58 | +{ | ||
59 | + // lecture de la taille | ||
60 | + while (device->bytesAvailable() < (int)sizeof(quint32)) | ||
61 | + { | ||
62 | + if (!device->waitForReadyRead(TimeOut)) | ||
63 | + { | ||
64 | + std::cerr << "[Network] Read type - " << qPrintable(device->errorString()) << std::endl; | ||
65 | + return 0; | ||
66 | + } | ||
67 | + } | ||
68 | + | ||
69 | + quint32 blockSize; | ||
70 | + QDataStream in(device); | ||
71 | + in.setVersion(QDataStream::Qt_4_5); | ||
72 | + in >> blockSize; | ||
73 | + | ||
74 | + | ||
75 | + while (device->bytesAvailable() < blockSize) | ||
76 | + { | ||
77 | + if (!device->waitForReadyRead(TimeOut)) | ||
78 | + { | ||
79 | + std::cerr << "[Network] Read data - " << qPrintable(device->errorString()) << std::endl; | ||
80 | + return 0; | ||
81 | + } | ||
82 | + } | ||
83 | + | ||
84 | + ARCSNetworkFrame* frame = new ARCSNetworkFrame(); | ||
85 | + in >> *frame; | ||
86 | + return frame; | ||
87 | +} | ||
88 | + | ||
89 | + | ||
90 | +void ARCSNetworkFrame::writeFrame(QIODevice* device) | ||
91 | +{ | ||
92 | + QByteArray block; | ||
93 | + | ||
94 | + QDataStream out(&block, QIODevice::WriteOnly); | ||
95 | + out.setVersion(QDataStream::Qt_4_5); | ||
96 | + out << (quint32)0 ; | ||
97 | + out << *this ; | ||
98 | + out.device()->seek(0); | ||
99 | + out << (quint32)(block.size() - sizeof(quint32)) ; | ||
100 | + | ||
101 | + device->write(block); | ||
102 | + | ||
103 | + if (!device->waitForBytesWritten(TimeOut)) | ||
104 | + { | ||
105 | + std::cerr << "[Network] Didn't wait enough to write all bytes" << std::endl; | ||
106 | + } | ||
107 | +} | ||
108 | + | ||
109 | + | ||
110 | + | ||
111 | +QDataStream &operator>>(QDataStream & stream, ARCSNetworkFrame& frame) | ||
112 | +{ | ||
113 | + int type ; | ||
114 | + stream >> type ; | ||
115 | + frame.setType((ARCSNetworkFrame::ARCSNetworkFrames)type); | ||
116 | + frame.getData()->deserialize(stream); | ||
117 | + return stream; | ||
118 | +} | ||
119 | + | ||
120 | + | ||
121 | +QDataStream &operator<<(QDataStream & stream, const ARCSNetworkFrame& frame) | ||
122 | +{ | ||
123 | + stream << (int)frame.getType(); | ||
124 | + frame.getData()->serialize(stream); | ||
125 | + return stream; | ||
126 | +} |
network/arcsnetworkframes.h
0 → 100644
1 | +#ifndef __ARCSNETWORKFRAMES_H__ | ||
2 | +#define __ARCSNETWORKFRAMES_H__ | ||
3 | + | ||
4 | +#include <QByteArray> | ||
5 | +#include <QStringList> | ||
6 | +#include <QDataStream> | ||
7 | + | ||
8 | +//! Base class for data in network frames. | ||
9 | +/*! It describes serialization/deserialization methods for data frames. | ||
10 | + * \author Jean-Yves Didier | ||
11 | + * \date November, the 5th, 2009 | ||
12 | + * \ingroup network | ||
13 | + */ | ||
14 | +class ARCSNetworkData | ||
15 | +{ | ||
16 | +public: | ||
17 | + virtual ~ARCSNetworkData() {} | ||
18 | + virtual void serialize(QDataStream& stream) = 0; | ||
19 | + virtual void deserialize(QDataStream& stream) = 0; | ||
20 | +}; | ||
21 | + | ||
22 | +//! Class implementing ARCS network frames | ||
23 | +/*! A frame is characterized by a type id and data depending on the type. | ||
24 | + * \author Jean-Yves Didier | ||
25 | + * \date November, the 5th, 2009 | ||
26 | + * \ingroup network | ||
27 | + */ | ||
28 | +class ARCSNetworkFrame | ||
29 | +{ | ||
30 | +public: | ||
31 | + enum ARCSNetworkFrames { | ||
32 | + INVALID, | ||
33 | + CALL_REQUEST, | ||
34 | + SLOT_REQUEST, | ||
35 | + SIGNAL_REQUEST, | ||
36 | + CONNECT_REQUEST, | ||
37 | + DISCONNECT_REQUEST, | ||
38 | + IFACE_REQUEST, | ||
39 | + | ||
40 | + SLOT_RESPONSE, | ||
41 | + CONNECT_RESPONSE, /* A revoir, peut-tre un SLOT response */ | ||
42 | + CALL_RESPONSE, /* A revoir, peut-tre un ACK response */ | ||
43 | + ACK_RESPONSE, | ||
44 | + IFACE_RESPONSE | ||
45 | + }; | ||
46 | + | ||
47 | + ARCSNetworkFrame() { type = INVALID; data = 0;} | ||
48 | + ARCSNetworkFrame(ARCSNetworkFrames t) { data = 0; setType(t); } | ||
49 | + ~ARCSNetworkFrame() { if (data != 0) delete data; } | ||
50 | + void setType(ARCSNetworkFrames t); | ||
51 | + | ||
52 | + bool isValid() { return type != INVALID; } | ||
53 | + | ||
54 | + ARCSNetworkFrames getType() const { return type; } | ||
55 | + ARCSNetworkData* getData() const { return data; } | ||
56 | + | ||
57 | + static ARCSNetworkFrame* readFrame(QIODevice* device); | ||
58 | + void writeFrame(QIODevice* device); | ||
59 | + static int TimeOut ; | ||
60 | + | ||
61 | +private: | ||
62 | + ARCSNetworkFrames type; | ||
63 | + ARCSNetworkData* data; | ||
64 | +}; | ||
65 | + | ||
66 | +QDataStream &operator>>(QDataStream & stream, ARCSNetworkFrame& frame); | ||
67 | +QDataStream &operator<<(QDataStream & stream, const ARCSNetworkFrame& frame); | ||
68 | + | ||
69 | + | ||
70 | +class ARCSNetworkInterfaceRequest : public ARCSNetworkData | ||
71 | +{ | ||
72 | +public: | ||
73 | + ARCSNetworkInterfaceRequest() {} | ||
74 | + virtual void serialize(QDataStream& ) {} | ||
75 | + void deserialize(QDataStream& ) {} | ||
76 | +}; | ||
77 | + | ||
78 | +class ARCSNetworkInterfaceResponse : public ARCSNetworkData | ||
79 | +{ | ||
80 | + public: | ||
81 | + ARCSNetworkInterfaceResponse() {} | ||
82 | + QStringList getSignals() { return signalList; } | ||
83 | + QStringList getSlots() { return slotList; } | ||
84 | + void setSignals(QStringList sl) { signalList = sl; } | ||
85 | + void setSlots(QStringList sl) { slotList = sl; } | ||
86 | + | ||
87 | + virtual void serialize(QDataStream& stream) { stream << slotList << signalList; } | ||
88 | + virtual void deserialize(QDataStream& stream) { stream >> slotList >> signalList; } | ||
89 | + | ||
90 | + private: | ||
91 | + QStringList signalList; | ||
92 | + QStringList slotList; | ||
93 | +}; | ||
94 | + | ||
95 | +class ARCSNetworkConnectRequest : public ARCSNetworkData | ||
96 | +{ | ||
97 | + public: | ||
98 | + ARCSNetworkConnectRequest() {} | ||
99 | + //QString getSource() { return source; } | ||
100 | + QString getDestination() { return destination; } | ||
101 | + QString getSignal() { return signalName; } | ||
102 | + QString getSlot() { return slotName; } | ||
103 | + | ||
104 | + void setParams(/*QString host,*/ QString sig, QString dst, QString slt) | ||
105 | + { | ||
106 | + //source = src; | ||
107 | + destination = dst; | ||
108 | + signalName = sig; | ||
109 | + slotName = slt; | ||
110 | + } | ||
111 | + | ||
112 | + virtual void serialize(QDataStream& stream) { stream /*<< source*/ << signalName << destination << slotName; } | ||
113 | + virtual void deserialize(QDataStream& stream) { stream /*>> source*/ >> signalName >> destination >> slotName; } | ||
114 | + | ||
115 | +private: | ||
116 | + //QString source; | ||
117 | + QString destination; | ||
118 | + QString slotName; | ||
119 | + QString signalName; | ||
120 | +}; | ||
121 | + | ||
122 | +class ARCSNetworkConnectResponse : public ARCSNetworkData | ||
123 | +{ | ||
124 | + public: | ||
125 | + ARCSNetworkConnectResponse() {} | ||
126 | + | ||
127 | + int getId() { return id; } | ||
128 | + void setId(int i) { id = i ;} | ||
129 | + virtual void serialize(QDataStream& stream) { stream << id ; } | ||
130 | + virtual void deserialize(QDataStream& stream) { stream >> id; } | ||
131 | + | ||
132 | + private: | ||
133 | + int id; | ||
134 | +}; | ||
135 | + | ||
136 | + | ||
137 | +class ARCSNetworkSignalRequest : public ARCSNetworkData | ||
138 | +{ | ||
139 | + public: | ||
140 | + ARCSNetworkSignalRequest() {} | ||
141 | + | ||
142 | + virtual void serialize(QDataStream& stream) { stream << id << port << signalName; } | ||
143 | + virtual void deserialize(QDataStream& stream) { stream >> id >> port >> signalName; } | ||
144 | + | ||
145 | + quint16 getPort() { return port;} | ||
146 | + void setPort(quint16 p) { port = p ;} | ||
147 | + int getId() { return id; } | ||
148 | + void setId(int i) { id = i ; } | ||
149 | + QString getSignal() { return signalName; } | ||
150 | + void setSignal(QString s) { signalName = s; } | ||
151 | + void setParams(int i, quint16 p, QString s) { id = i; port = p; signalName = s; } | ||
152 | + | ||
153 | + private: | ||
154 | + int id ; | ||
155 | + quint16 port; | ||
156 | + QString signalName; | ||
157 | + | ||
158 | + | ||
159 | +}; | ||
160 | + | ||
161 | + | ||
162 | +//! Frame encapsulating a slot request. | ||
163 | +/*! Such frame is emitted when a master needs specific slot from a remote component. | ||
164 | + * | ||
165 | + * \author Jean-Yves Didier | ||
166 | + * \date November, the 12th, 2009 | ||
167 | + * \ingroup network | ||
168 | + */ | ||
169 | +class ARCSNetworkSlotRequest : public ARCSNetworkData | ||
170 | +{ | ||
171 | + public: | ||
172 | + ARCSNetworkSlotRequest() {} | ||
173 | + | ||
174 | + QString getSlot() { return slotName; } | ||
175 | + void setSlot(QString s) { slotName = s ; } | ||
176 | + virtual void serialize(QDataStream& stream) { stream << slotName ; } | ||
177 | + virtual void deserialize(QDataStream& stream) { stream >> slotName; } | ||
178 | + | ||
179 | + private: | ||
180 | + QString slotName; | ||
181 | +}; | ||
182 | + | ||
183 | + | ||
184 | +class ARCSNetworkDisconnectRequest : public ARCSNetworkData | ||
185 | +{ | ||
186 | + public: | ||
187 | + ARCSNetworkDisconnectRequest() {} | ||
188 | + | ||
189 | + QString getSignal() { return signalName; } | ||
190 | + void setSignal(QString s) { signalName = s ; } | ||
191 | + virtual void serialize(QDataStream& stream) { stream << signalName ; } | ||
192 | + virtual void deserialize(QDataStream& stream) { stream >> signalName; } | ||
193 | + | ||
194 | + private: | ||
195 | + QString signalName; | ||
196 | +}; | ||
197 | + | ||
198 | + | ||
199 | + | ||
200 | + | ||
201 | +class ARCSNetworkCallRequest : public ARCSNetworkData | ||
202 | +{ | ||
203 | + public: | ||
204 | + ARCSNetworkCallRequest() {} | ||
205 | + | ||
206 | + int getId() { return id; } | ||
207 | + void setId(int i) { id = i ;} | ||
208 | + QStringList getParams() { return params; } | ||
209 | + void setParams(QStringList sl) { params = sl; } | ||
210 | + void setParams(int i, QStringList sl) { id = i; params = sl; } | ||
211 | + | ||
212 | + virtual void serialize(QDataStream& stream) { stream << id << params; } | ||
213 | + virtual void deserialize(QDataStream& stream) { stream >> id >> params; } | ||
214 | + | ||
215 | + private: | ||
216 | + int id; | ||
217 | + QStringList params; | ||
218 | +}; | ||
219 | + | ||
220 | + | ||
221 | +class ARCSNetworkCallResponse : public ARCSNetworkData | ||
222 | +{ | ||
223 | + public: | ||
224 | + ARCSNetworkCallResponse() {} | ||
225 | + | ||
226 | + virtual void serialize(QDataStream& ) { } | ||
227 | + virtual void deserialize(QDataStream& ) { } | ||
228 | +}; | ||
229 | + | ||
230 | + | ||
231 | + | ||
232 | +#endif // ARCSNETWORKFRAMES_H |
network/arcsnetworkproxysignal.cpp
0 → 100644
1 | +#include "arcsnetworkproxysignal.h" | ||
2 | +#include <arcs/arcsfactory.h> | ||
3 | +#include "arcsnetworkserver.h" | ||
4 | +#include "arcsnetworkframes.h" | ||
5 | +#include "arcsnetworkcomponent.h" | ||
6 | +#include <arcs/arcsabstractcomponent.h> | ||
7 | +#include <QTcpSocket> | ||
8 | + | ||
9 | + | ||
10 | +int ARCSNetworkProxySignal::qt_metacall(QMetaObject::Call call, int id, void ** arguments) | ||
11 | +{ | ||
12 | + id = QObject::qt_metacall(call,id, arguments); | ||
13 | + | ||
14 | + if (id == -1 || call != QMetaObject::InvokeMetaMethod) | ||
15 | + return -1; | ||
16 | + | ||
17 | + if (id < 0) | ||
18 | + return -1; | ||
19 | + | ||
20 | + QMetaObject::activate(this, metaObject(), id + metaObject()->methodCount(), arguments); | ||
21 | + | ||
22 | + return -1; | ||
23 | +} | ||
24 | + | ||
25 | + | ||
26 | + | ||
27 | +void ARCSNetworkProxySignal::setSignal(QString s) | ||
28 | +{ | ||
29 | + paramTypes = s.section("(",1,1).section(")", 0,0).split(","); | ||
30 | + typeIds.clear(); | ||
31 | + | ||
32 | + for (int i=0; i < paramTypes.count(); i++) | ||
33 | + typeIds.append(QMetaType::type(qPrintable(paramTypes.at(i)))); | ||
34 | + | ||
35 | + signalName = s; | ||
36 | +} | ||
37 | + | ||
38 | + | ||
39 | + | ||
40 | +int ARCSNetworkProxySignal::prepareSignalConnect(QString, QString, QString, QString, bool) | ||
41 | +{ | ||
42 | + ARCSNetworkComponent* anc = dynamic_cast<ARCSNetworkComponent*>(home); | ||
43 | + if (anc) | ||
44 | + anc->requestSignalConnect(this); | ||
45 | + | ||
46 | + | ||
47 | + return metaObject()->methodCount(); | ||
48 | +} | ||
49 | + | ||
50 | + | ||
51 | +int ARCSNetworkProxySignal::cleanSignalConnect(QString, QString, QString, QString) | ||
52 | +{ | ||
53 | + ARCSNetworkComponent* anc = dynamic_cast<ARCSNetworkComponent*>(home); | ||
54 | + if (anc) | ||
55 | + anc->requestSignalDisconnect(this); | ||
56 | + | ||
57 | + return metaObject()->methodCount(); | ||
58 | +} | ||
59 | + | ||
60 | + | ||
61 | +void ARCSNetworkProxySignal::call(QStringList sl) | ||
62 | +{ | ||
63 | + //1 prparer les donnes | ||
64 | + int nbargs = sl.count(); | ||
65 | + void * args[nbargs+1]; | ||
66 | + args[0] = 0 ; | ||
67 | + | ||
68 | + // dump des paramtres passs | ||
69 | + /*std::cout << "[Network] Obtained parameters: " ; | ||
70 | + for (int k = 0; k < sl.count(); k++) | ||
71 | + { | ||
72 | + std::cout << qPrintable(sl[k]) << " "; | ||
73 | + } | ||
74 | + std::cout << std::endl;*/ | ||
75 | + | ||
76 | + | ||
77 | + if (nbargs > typeIds.count()) | ||
78 | + { | ||
79 | + std::cerr << "[Network] Argument and type count mismatch (" << nbargs << ", "<< typeIds.count() << ")" << std::endl; | ||
80 | + return ; | ||
81 | + } | ||
82 | + | ||
83 | + for (int i = 0; i < nbargs; i++) | ||
84 | + { | ||
85 | + QVariant var = ARCSFactory::getInstance()->dataDeserialize(paramTypes[i],sl[i]); //ctx->argument(i).toVariant(); | ||
86 | + var.convert((QVariant::Type)typeIds[i]); | ||
87 | + args[i+1] = var.data() ; | ||
88 | + } | ||
89 | + | ||
90 | + //2 lancer l'appel l'aide de qt_metacall() ou qt_activate() | ||
91 | + qt_metacall( QMetaObject::InvokeMetaMethod ,metaObject()->methodCount(),args); | ||
92 | +} |
network/arcsnetworkproxysignal.h
0 → 100644
1 | +#ifndef __ARCSNETWORKPROXYSIGNAL_H__ | ||
2 | +#define __ARCSNETWORKPROXYSIGNAL_H__ | ||
3 | + | ||
4 | +#include <arcs/arcsqdynamicobject.h> | ||
5 | +#include <QObject> | ||
6 | + | ||
7 | +class ARCSAbstractComponent; | ||
8 | + | ||
9 | +//! Class implementing a proxy for network signals | ||
10 | +/*! | ||
11 | + * \author Jean-Yves Didier | ||
12 | + * \date November, the 5th, 2009 | ||
13 | + * \ingroup network | ||
14 | + */ | ||
15 | +class ARCSNetworkProxySignal : public QObject, public ARCSQDynamicObject | ||
16 | +{ | ||
17 | +public: | ||
18 | + ARCSNetworkProxySignal(ARCSAbstractComponent* aac, QObject* parent=0) : QObject(parent) { home = aac;} | ||
19 | + | ||
20 | + virtual int qt_metacall(QMetaObject::Call call, int id, void ** arguments); | ||
21 | + virtual QStringList getSignalList() { return QStringList(signalName); } | ||
22 | + virtual QStringList getSlotList() { return QStringList(); } | ||
23 | + virtual int prepareSlotConnect(QString, QString, QString, QString, bool) { return -1;} | ||
24 | + virtual int prepareSignalConnect(QString sigName, QString sltName, QString objectName, QString actualSlot, bool simulate = false);// { return 0;} | ||
25 | + virtual int cleanSlotConnect(QString, QString, QString, QString) { return 0;} | ||
26 | + virtual int cleanSignalConnect(QString, QString, QString, QString); | ||
27 | + | ||
28 | + void setSignal(QString s); | ||
29 | + void call(QStringList sl); | ||
30 | + QString getSignal() { return signalName; } | ||
31 | + void setId(int i) { id = i; } | ||
32 | + int getId() { return id; } | ||
33 | + void setHome(ARCSAbstractComponent* cmp) { home = cmp; } | ||
34 | + | ||
35 | + | ||
36 | +private: | ||
37 | + QList<int> typeIds; | ||
38 | + QStringList paramTypes; | ||
39 | + QString signalName; | ||
40 | + int id; | ||
41 | + ARCSAbstractComponent* home; | ||
42 | +}; | ||
43 | + | ||
44 | + | ||
45 | +#endif // __ARCSNETWORKPROXYSIGNAL_H__ |
network/arcsnetworkproxyslot.cpp
0 → 100644
1 | +#include "arcsnetworkproxyslot.h" | ||
2 | +#include "arcsnetworkframes.h" | ||
3 | +#include "arcsnetworkserver.h" | ||
4 | +#include "arcsnetworkcomponent.h" | ||
5 | +#include <arcs/arcsfactory.h> | ||
6 | +#include <QTcpSocket> | ||
7 | +#include <iostream> | ||
8 | + | ||
9 | +ARCSNetworkProxySlot::ARCSNetworkProxySlot(ARCSAbstractComponent* cmp, QObject* parent) : QObject(parent) | ||
10 | +{ | ||
11 | + slotId = -1; | ||
12 | + home = cmp; | ||
13 | +} | ||
14 | + | ||
15 | + | ||
16 | + | ||
17 | +int ARCSNetworkProxySlot::qt_metacall(QMetaObject::Call call,int id, void** arguments) | ||
18 | +{ | ||
19 | + // should implement a call here ! | ||
20 | + id = QObject::qt_metacall(call,id, arguments); | ||
21 | + if (id < 0 || call != QMetaObject::InvokeMetaMethod) | ||
22 | + return id; | ||
23 | + | ||
24 | + if (id != 0) | ||
25 | + return -1; | ||
26 | + | ||
27 | + if (slotId == -1) | ||
28 | + return -1; | ||
29 | + | ||
30 | + QStringList request; | ||
31 | + for (int i =0; i < typeIds.count(); i++) | ||
32 | + { | ||
33 | + int it = typeIds[i]; | ||
34 | + | ||
35 | + if (it != QMetaType::Void) | ||
36 | + { | ||
37 | + QVariant v(it, arguments[i+1]); | ||
38 | + request << ARCSFactory::getInstance()->dataSerialize(v); | ||
39 | + } | ||
40 | + } | ||
41 | + | ||
42 | + // call here slot with all its params. | ||
43 | + QTcpSocket* socket = new QTcpSocket(this); | ||
44 | + socket->connectToHost(hostName, port); | ||
45 | + if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut)) | ||
46 | + { | ||
47 | + std::cerr << "[Network] call error " << qPrintable(socket->errorString()) << std::endl; | ||
48 | + std::cerr << "[Network] params are " << qPrintable(hostName) << ": " << port | ||
49 | + << " (" << this << ")" << std::endl; | ||
50 | + return -1; | ||
51 | + } | ||
52 | + // cration de la frame | ||
53 | + ARCSNetworkFrame frameRequest(ARCSNetworkFrame::CALL_REQUEST); | ||
54 | + ((ARCSNetworkCallRequest*)frameRequest.getData())->setParams(slotId, request); | ||
55 | + frameRequest.writeFrame(socket); | ||
56 | + | ||
57 | + ARCSNetworkFrame* response = ARCSNetworkFrame::readFrame(socket); | ||
58 | + | ||
59 | + // traitement de response -> Non c'est juste pour attendre de manire bloquante ! | ||
60 | + socket->disconnectFromHost(); | ||
61 | + if (response) | ||
62 | + delete response; | ||
63 | + delete socket; | ||
64 | + return -1; | ||
65 | +} | ||
66 | + | ||
67 | + | ||
68 | +void ARCSNetworkProxySlot::setSlot(QString s) | ||
69 | +{ | ||
70 | + QStringList paramTypes = s.section("(",1,1).section(")", 0,0).split(","); | ||
71 | + typeIds.clear(); | ||
72 | + | ||
73 | + for (int i=0; i < paramTypes.count(); i++) | ||
74 | + typeIds.append(QMetaType::type(qPrintable(paramTypes.at(i)))); | ||
75 | + | ||
76 | + slotName = s; | ||
77 | +} | ||
78 | + | ||
79 | + | ||
80 | + | ||
81 | + | ||
82 | +int ARCSNetworkProxySlot::prepareSlotConnect(QString , QString sltName, QString , QString , bool simulate) | ||
83 | +{ | ||
84 | + if (simulate) | ||
85 | + return 0; | ||
86 | + | ||
87 | + ARCSNetworkComponent* anc = dynamic_cast<ARCSNetworkComponent*>(home); | ||
88 | + if (anc) | ||
89 | + anc->requestSlotConnect(this); | ||
90 | + | ||
91 | + | ||
92 | + | ||
93 | + if (metaObject()->indexOfSlot(qPrintable(sltName)) != -1) | ||
94 | + { | ||
95 | + return metaObject()->indexOfSlot(qPrintable(sltName)); | ||
96 | + } | ||
97 | + | ||
98 | + return metaObject()->methodCount(); | ||
99 | +} | ||
100 | + | ||
101 | + | ||
102 | + | ||
103 | + |
network/arcsnetworkproxyslot.h
0 → 100644
1 | +#ifndef __ARCSNETWORKPROXYSLOT_H__ | ||
2 | +#define __ARCSNETWORKPROXYSLOT_H__ | ||
3 | + | ||
4 | +#include <arcs/arcsqdynamicobject.h> | ||
5 | +#include <QObject> | ||
6 | + | ||
7 | +class ARCSAbstractComponent; | ||
8 | + | ||
9 | +//! Class implementing a proxy for slots | ||
10 | +/*! \author Jean-Yves Didier | ||
11 | + * \date November, the 16th, 2009 | ||
12 | + * \ingroup network | ||
13 | + */ | ||
14 | +class ARCSNetworkProxySlot : public QObject, public ARCSQDynamicObject | ||
15 | +{ | ||
16 | +public: | ||
17 | + ARCSNetworkProxySlot(ARCSAbstractComponent* aac, QObject* parent=0); | ||
18 | + | ||
19 | + virtual int qt_metacall(QMetaObject::Call call, int id, void ** arguments); | ||
20 | + | ||
21 | + virtual QStringList getSignalList() { return QStringList(); } | ||
22 | + | ||
23 | + virtual QStringList getSlotList() { return QStringList(slotName);} | ||
24 | + | ||
25 | + virtual int prepareSlotConnect(QString sigName, QString sltName, QString objectName = QString::null, QString actualSignal = QString::null, bool simulate = false) ; | ||
26 | + | ||
27 | + virtual int prepareSignalConnect(QString, QString, QString, QString, bool) | ||
28 | + { return -1;} | ||
29 | + | ||
30 | + virtual int cleanSlotConnect(QString, QString, QString, QString) | ||
31 | + { return metaObject()->methodCount(); } | ||
32 | + | ||
33 | + virtual int cleanSignalConnect(QString, QString, QString, QString) | ||
34 | + { return -1; } | ||
35 | + | ||
36 | + void setSlot(QString s ); // { slotName = s ;} | ||
37 | + void setHostname(QString s) { hostName = s; } | ||
38 | + void setPort(int i) { port = i; } | ||
39 | + void setSlotId(int i) { slotId = i;} | ||
40 | + QString getSlot() { return slotName; } | ||
41 | + | ||
42 | +private: | ||
43 | + QList<int> typeIds; | ||
44 | + QString slotName; | ||
45 | + QString hostName; | ||
46 | + int port; | ||
47 | + int slotId; | ||
48 | + ARCSAbstractComponent* home; | ||
49 | +}; | ||
50 | + | ||
51 | +#endif // __ARCSNETWORKPROXYSLOT_H__ |
network/arcsnetworkserver.cpp
0 → 100644
This diff is collapsed. Click to expand it.
network/arcsnetworkserver.h
0 → 100644
1 | +#ifndef __ARCSNETWORKSERVER_H__ | ||
2 | +#define __ARCSNETWORKSERVER_H__ | ||
3 | + | ||
4 | +#include <QTcpServer> | ||
5 | +#include <QObject> | ||
6 | +#include <arcs/arcsabstractcomponent.h> | ||
7 | +#include <QThread> | ||
8 | +#include <iostream> | ||
9 | + | ||
10 | + | ||
11 | +class ARCSNetworkConnectRequest; | ||
12 | +class ARCSNetworkDisconnectRequest; | ||
13 | +class ARCSNetworkCallRequest; | ||
14 | +class ARCSNetworkSignalRequest; | ||
15 | +class ARCSNetworkSlotRequest; | ||
16 | +class ARCSNetworkProxySignal; | ||
17 | +class ARCSNetworkProxySlot; | ||
18 | + | ||
19 | +//! A thread processing requests performed on the server | ||
20 | +/*! \author Jean-Yves Didier | ||
21 | + * \date November, the 13th, 2009 | ||
22 | + * \ingroup network | ||
23 | + */ | ||
24 | +class ARCSNetworkServerThread : public QThread | ||
25 | +{ | ||
26 | + Q_OBJECT | ||
27 | + | ||
28 | + public: | ||
29 | + /*! Constructor | ||
30 | + * \param sd a socket descriptor to which the thread will listen. | ||
31 | + * \param parent a QObject which is parent to the thread. | ||
32 | + */ | ||
33 | + ARCSNetworkServerThread(int sd, QObject* parent) : QThread(parent), socketDescriptor(sd) {} | ||
34 | + | ||
35 | + protected: | ||
36 | + virtual void run();//!< Thread main loop | ||
37 | + | ||
38 | + private: | ||
39 | + void handleRequest(QTcpSocket* socket); | ||
40 | + void handleConnectRequest(ARCSNetworkConnectRequest* ancr, QTcpSocket* socket); | ||
41 | + void handleCallRequest(ARCSNetworkCallRequest* ancr, QTcpSocket* socket); | ||
42 | + void handleSlotRequest(ARCSNetworkSlotRequest* ansr, QTcpSocket* socket); | ||
43 | + void handleSignalRequest(ARCSNetworkSignalRequest* ansr, QTcpSocket* socket); | ||
44 | + void handleDisconnectRequest(ARCSNetworkDisconnectRequest* andr, QTcpSocket* socket); | ||
45 | + void handleInterfaceRequest(QTcpSocket* socket); | ||
46 | + | ||
47 | + | ||
48 | + int socketDescriptor; | ||
49 | +}; | ||
50 | + | ||
51 | +//! Actual implementation of the server | ||
52 | +/*! This class is a trick in order to have a server generated in the right thread. | ||
53 | + * \author Jean-Yves Didier | ||
54 | + * \date November, the 13th, 2009 | ||
55 | + * \ingroup network | ||
56 | + */ | ||
57 | +class ARCSNetworkThreadedServer : public QTcpServer | ||
58 | +{ | ||
59 | + Q_OBJECT | ||
60 | + | ||
61 | + public: | ||
62 | + ARCSNetworkThreadedServer(QObject* parent = 0) : QTcpServer(parent) {} //!< Default constructor | ||
63 | + | ||
64 | + protected: | ||
65 | + /*! | ||
66 | + */ | ||
67 | + void incomingConnection(int socketDescriptor) | ||
68 | + { | ||
69 | + ARCSNetworkServerThread* thread = new ARCSNetworkServerThread(socketDescriptor, this); | ||
70 | + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); | ||
71 | + thread->start(); | ||
72 | + } | ||
73 | +}; | ||
74 | + | ||
75 | + | ||
76 | + | ||
77 | +//! Class implementing a server for each network component, as well as applications needing network support. | ||
78 | +/*! This class is implemented as a singleton since we only need one instance of a server running for an application. | ||
79 | + * The server is, at the same time a thread and an abstract component which is not directly exposed. | ||
80 | + * \author Jean-Yves Didier | ||
81 | + * \date November, the 13th, 2009 | ||
82 | + * \ingroup network | ||
83 | + */ | ||
84 | +class ARCSNetworkServer : public QThread, public ARCSAbstractComponent | ||
85 | +{ | ||
86 | +Q_OBJECT | ||
87 | + | ||
88 | +public: | ||
89 | + static ARCSNetworkServer* getInstance(); //!< Singleton design pattern: mainly for lazy instanciation | ||
90 | + int getPort() { return port; } //!< Returns the port which is listened by the server | ||
91 | + void setInterface(QString name);//!< Sets the interface, i.e. the name of the component to which we want to apply distributed properties. | ||
92 | + void setPort(int i) { port= (quint16)i; start(); } //!< Sets the port, the server will listen to. | ||
93 | + bool isListening() { return server?server->isListening():false; } //!< Tells wether the server is active or not. | ||
94 | + | ||
95 | + /*! Construct and return a proxy for a given signal | ||
96 | + * \param s the name of the signal for which we will generate a proxy | ||
97 | + * \return a proxy signal | ||
98 | + */ | ||
99 | + ARCSNetworkProxySignal* getProxySignal(QString s); | ||
100 | + | ||
101 | + QString getHostName() ; //!< Returns the host name of the current machine. | ||
102 | + QString getURL(); //!< Returns the url of the current server | ||
103 | + | ||
104 | + /*! \brief Triggers and calls a list of params to perform a call on a given slot. | ||
105 | + * \param id id of the slot to call | ||
106 | + * \param params serialized parameters of the slot | ||
107 | + */ | ||
108 | + void call(int id, QStringList params); | ||
109 | + | ||
110 | + /*! \brief Creates a signal stub to connect to a slot of the interface | ||
111 | + * \param s the name of the slot of the interface | ||
112 | + * \return an id | ||
113 | + */ | ||
114 | + int createSignalStub(QString s); | ||
115 | + | ||
116 | + /*! \brief Creates a slot stub to connect from a signal of the interface | ||
117 | + * Such a stub has to connect to another server | ||
118 | + * \param signal name of the signal to connect from | ||
119 | + * \param id id of the signal generated | ||
120 | + * \param port port number of the remote server | ||
121 | + * \param peer hostname of the remote server | ||
122 | + */ | ||
123 | + int createSlotStub(QString signal, int id, quint16 port, QString peer); | ||
124 | + | ||
125 | + | ||
126 | + void destroySlotStub(QString s); | ||
127 | + | ||
128 | + void getInterface(QStringList& slotList, QStringList& signalList); | ||
129 | + | ||
130 | + | ||
131 | + // importé de ARCSNetworkStub | ||
132 | + virtual QString toString() { return QString(); } | ||
133 | + virtual bool parseString(QString) { return false; } | ||
134 | + virtual QStringList getSignals() { return QStringList(); } | ||
135 | + virtual QStringList getSlots() {return QStringList(); } | ||
136 | + | ||
137 | + | ||
138 | +protected: | ||
139 | + virtual void run();//< server thread. | ||
140 | + | ||
141 | + // importé de ARCSNetworkStub | ||
142 | + virtual void getProxySlot (QString slot, ObjectList &obj, QStringList &proxySlot); | ||
143 | + virtual void getProxySignal (QString signal, ObjectList &obj, QStringList &proxySignal); | ||
144 | + virtual bool genuineConnect (QString, ARCSAbstractComponent *, QString, bool) { return false; } | ||
145 | + virtual bool genuineDisconnect (QString, ARCSAbstractComponent *, QString) { return false; } | ||
146 | + virtual bool genuineInstanciate () { return true; } | ||
147 | + virtual void genuineDestroy () { } | ||
148 | + virtual ARCSAbstractComponent* genuineClone () { return 0; } | ||
149 | + virtual QVariant getGenuineComponentInstance() { return QVariant(); } | ||
150 | + | ||
151 | + | ||
152 | + | ||
153 | +private: | ||
154 | + ARCSNetworkServer(); | ||
155 | + static ARCSNetworkServer* instance; | ||
156 | + bool inEventMode; | ||
157 | + | ||
158 | + ARCSNetworkThreadedServer* server; | ||
159 | + | ||
160 | + | ||
161 | + quint16 port; | ||
162 | + ARCSAbstractComponent* interface; | ||
163 | + | ||
164 | + // a server will have to maintain a list of proxy objects. | ||
165 | + QList<ARCSNetworkProxySignal*> proxySignals ; | ||
166 | + QHash<QString, int> proxySignalsMap; | ||
167 | + | ||
168 | + QHash<QString, ARCSNetworkProxySlot*> proxySlots; | ||
169 | + | ||
170 | + | ||
171 | +}; | ||
172 | + | ||
173 | + | ||
174 | +#endif // __ARCSNETWORKSERVER_H__ |
network/libnetwork.alx
0 → 100644
1 | +<library> | ||
2 | + <headers> | ||
3 | + <header name="arcsnetworkfamily.h"/> | ||
4 | + <header name="arcsnetworkcomponent.h"/> | ||
5 | + <header name="arcsnetworkconfigurator.h"/> | ||
6 | + | ||
7 | + </headers> | ||
8 | + <components> | ||
9 | + <component name="ARCSNetworkConfigurator"/> | ||
10 | + </components> | ||
11 | + <families> | ||
12 | + <family name="ARCSNetworkFamily"/> | ||
13 | + </families> | ||
14 | +</library> |
network/moc_arcsnetworkconfigurator.cpp
0 → 100644
1 | +/**************************************************************************** | ||
2 | +** Meta object code from reading C++ file 'arcsnetworkconfigurator.h' | ||
3 | +** | ||
4 | +** Created: Thu Jul 25 19:38:39 2013 | ||
5 | +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4) | ||
6 | +** | ||
7 | +** WARNING! All changes made in this file will be lost! | ||
8 | +*****************************************************************************/ | ||
9 | + | ||
10 | +#include "arcsnetworkconfigurator.h" | ||
11 | +#if !defined(Q_MOC_OUTPUT_REVISION) | ||
12 | +#error "The header file 'arcsnetworkconfigurator.h' doesn't include <QObject>." | ||
13 | +#elif Q_MOC_OUTPUT_REVISION != 63 | ||
14 | +#error "This file was generated using the moc from 4.8.4. It" | ||
15 | +#error "cannot be used with the include files from this version of Qt." | ||
16 | +#error "(The moc has changed too much.)" | ||
17 | +#endif | ||
18 | + | ||
19 | +QT_BEGIN_MOC_NAMESPACE | ||
20 | +static const uint qt_meta_data_ARCSNetworkConfigurator[] = { | ||
21 | + | ||
22 | + // content: | ||
23 | + 6, // revision | ||
24 | + 0, // classname | ||
25 | + 0, 0, // classinfo | ||
26 | + 2, 14, // methods | ||
27 | + 0, 0, // properties | ||
28 | + 0, 0, // enums/sets | ||
29 | + 0, 0, // constructors | ||
30 | + 0, // flags | ||
31 | + 0, // signalCount | ||
32 | + | ||
33 | + // slots: signature, parameters, type, tag, flags | ||
34 | + 27, 25, 24, 24, 0x0a, | ||
35 | + 51, 49, 24, 24, 0x0a, | ||
36 | + | ||
37 | + 0 // eod | ||
38 | +}; | ||
39 | + | ||
40 | +static const char qt_meta_stringdata_ARCSNetworkConfigurator[] = { | ||
41 | + "ARCSNetworkConfigurator\0\0s\0" | ||
42 | + "setInterface(QString)\0i\0setPort(int)\0" | ||
43 | +}; | ||
44 | + | ||
45 | +void ARCSNetworkConfigurator::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) | ||
46 | +{ | ||
47 | + if (_c == QMetaObject::InvokeMetaMethod) { | ||
48 | + Q_ASSERT(staticMetaObject.cast(_o)); | ||
49 | + ARCSNetworkConfigurator *_t = static_cast<ARCSNetworkConfigurator *>(_o); | ||
50 | + switch (_id) { | ||
51 | + case 0: _t->setInterface((*reinterpret_cast< QString(*)>(_a[1]))); break; | ||
52 | + case 1: _t->setPort((*reinterpret_cast< int(*)>(_a[1]))); break; | ||
53 | + default: ; | ||
54 | + } | ||
55 | + } | ||
56 | +} | ||
57 | + | ||
58 | +const QMetaObjectExtraData ARCSNetworkConfigurator::staticMetaObjectExtraData = { | ||
59 | + 0, qt_static_metacall | ||
60 | +}; | ||
61 | + | ||
62 | +const QMetaObject ARCSNetworkConfigurator::staticMetaObject = { | ||
63 | + { &QObject::staticMetaObject, qt_meta_stringdata_ARCSNetworkConfigurator, | ||
64 | + qt_meta_data_ARCSNetworkConfigurator, &staticMetaObjectExtraData } | ||
65 | +}; | ||
66 | + | ||
67 | +#ifdef Q_NO_DATA_RELOCATION | ||
68 | +const QMetaObject &ARCSNetworkConfigurator::getStaticMetaObject() { return staticMetaObject; } | ||
69 | +#endif //Q_NO_DATA_RELOCATION | ||
70 | + | ||
71 | +const QMetaObject *ARCSNetworkConfigurator::metaObject() const | ||
72 | +{ | ||
73 | + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; | ||
74 | +} | ||
75 | + | ||
76 | +void *ARCSNetworkConfigurator::qt_metacast(const char *_clname) | ||
77 | +{ | ||
78 | + if (!_clname) return 0; | ||
79 | + if (!strcmp(_clname, qt_meta_stringdata_ARCSNetworkConfigurator)) | ||
80 | + return static_cast<void*>(const_cast< ARCSNetworkConfigurator*>(this)); | ||
81 | + return QObject::qt_metacast(_clname); | ||
82 | +} | ||
83 | + | ||
84 | +int ARCSNetworkConfigurator::qt_metacall(QMetaObject::Call _c, int _id, void **_a) | ||
85 | +{ | ||
86 | + _id = QObject::qt_metacall(_c, _id, _a); | ||
87 | + if (_id < 0) | ||
88 | + return _id; | ||
89 | + if (_c == QMetaObject::InvokeMetaMethod) { | ||
90 | + if (_id < 2) | ||
91 | + qt_static_metacall(this, _c, _id, _a); | ||
92 | + _id -= 2; | ||
93 | + } | ||
94 | + return _id; | ||
95 | +} | ||
96 | +QT_END_MOC_NAMESPACE |
network/moc_arcsnetworkserver.cpp
0 → 100644
1 | +/**************************************************************************** | ||
2 | +** Meta object code from reading C++ file 'arcsnetworkserver.h' | ||
3 | +** | ||
4 | +** Created: Thu Jul 25 19:38:39 2013 | ||
5 | +** by: The Qt Meta Object Compiler version 63 (Qt 4.8.4) | ||
6 | +** | ||
7 | +** WARNING! All changes made in this file will be lost! | ||
8 | +*****************************************************************************/ | ||
9 | + | ||
10 | +#include "arcsnetworkserver.h" | ||
11 | +#if !defined(Q_MOC_OUTPUT_REVISION) | ||
12 | +#error "The header file 'arcsnetworkserver.h' doesn't include <QObject>." | ||
13 | +#elif Q_MOC_OUTPUT_REVISION != 63 | ||
14 | +#error "This file was generated using the moc from 4.8.4. It" | ||
15 | +#error "cannot be used with the include files from this version of Qt." | ||
16 | +#error "(The moc has changed too much.)" | ||
17 | +#endif | ||
18 | + | ||
19 | +QT_BEGIN_MOC_NAMESPACE | ||
20 | +static const uint qt_meta_data_ARCSNetworkServerThread[] = { | ||
21 | + | ||
22 | + // content: | ||
23 | + 6, // revision | ||
24 | + 0, // classname | ||
25 | + 0, 0, // classinfo | ||
26 | + 0, 0, // methods | ||
27 | + 0, 0, // properties | ||
28 | + 0, 0, // enums/sets | ||
29 | + 0, 0, // constructors | ||
30 | + 0, // flags | ||
31 | + 0, // signalCount | ||
32 | + | ||
33 | + 0 // eod | ||
34 | +}; | ||
35 | + | ||
36 | +static const char qt_meta_stringdata_ARCSNetworkServerThread[] = { | ||
37 | + "ARCSNetworkServerThread\0" | ||
38 | +}; | ||
39 | + | ||
40 | +void ARCSNetworkServerThread::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) | ||
41 | +{ | ||
42 | + Q_UNUSED(_o); | ||
43 | + Q_UNUSED(_id); | ||
44 | + Q_UNUSED(_c); | ||
45 | + Q_UNUSED(_a); | ||
46 | +} | ||
47 | + | ||
48 | +const QMetaObjectExtraData ARCSNetworkServerThread::staticMetaObjectExtraData = { | ||
49 | + 0, qt_static_metacall | ||
50 | +}; | ||
51 | + | ||
52 | +const QMetaObject ARCSNetworkServerThread::staticMetaObject = { | ||
53 | + { &QThread::staticMetaObject, qt_meta_stringdata_ARCSNetworkServerThread, | ||
54 | + qt_meta_data_ARCSNetworkServerThread, &staticMetaObjectExtraData } | ||
55 | +}; | ||
56 | + | ||
57 | +#ifdef Q_NO_DATA_RELOCATION | ||
58 | +const QMetaObject &ARCSNetworkServerThread::getStaticMetaObject() { return staticMetaObject; } | ||
59 | +#endif //Q_NO_DATA_RELOCATION | ||
60 | + | ||
61 | +const QMetaObject *ARCSNetworkServerThread::metaObject() const | ||
62 | +{ | ||
63 | + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; | ||
64 | +} | ||
65 | + | ||
66 | +void *ARCSNetworkServerThread::qt_metacast(const char *_clname) | ||
67 | +{ | ||
68 | + if (!_clname) return 0; | ||
69 | + if (!strcmp(_clname, qt_meta_stringdata_ARCSNetworkServerThread)) | ||
70 | + return static_cast<void*>(const_cast< ARCSNetworkServerThread*>(this)); | ||
71 | + return QThread::qt_metacast(_clname); | ||
72 | +} | ||
73 | + | ||
74 | +int ARCSNetworkServerThread::qt_metacall(QMetaObject::Call _c, int _id, void **_a) | ||
75 | +{ | ||
76 | + _id = QThread::qt_metacall(_c, _id, _a); | ||
77 | + if (_id < 0) | ||
78 | + return _id; | ||
79 | + return _id; | ||
80 | +} | ||
81 | +static const uint qt_meta_data_ARCSNetworkThreadedServer[] = { | ||
82 | + | ||
83 | + // content: | ||
84 | + 6, // revision | ||
85 | + 0, // classname | ||
86 | + 0, 0, // classinfo | ||
87 | + 0, 0, // methods | ||
88 | + 0, 0, // properties | ||
89 | + 0, 0, // enums/sets | ||
90 | + 0, 0, // constructors | ||
91 | + 0, // flags | ||
92 | + 0, // signalCount | ||
93 | + | ||
94 | + 0 // eod | ||
95 | +}; | ||
96 | + | ||
97 | +static const char qt_meta_stringdata_ARCSNetworkThreadedServer[] = { | ||
98 | + "ARCSNetworkThreadedServer\0" | ||
99 | +}; | ||
100 | + | ||
101 | +void ARCSNetworkThreadedServer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) | ||
102 | +{ | ||
103 | + Q_UNUSED(_o); | ||
104 | + Q_UNUSED(_id); | ||
105 | + Q_UNUSED(_c); | ||
106 | + Q_UNUSED(_a); | ||
107 | +} | ||
108 | + | ||
109 | +const QMetaObjectExtraData ARCSNetworkThreadedServer::staticMetaObjectExtraData = { | ||
110 | + 0, qt_static_metacall | ||
111 | +}; | ||
112 | + | ||
113 | +const QMetaObject ARCSNetworkThreadedServer::staticMetaObject = { | ||
114 | + { &QTcpServer::staticMetaObject, qt_meta_stringdata_ARCSNetworkThreadedServer, | ||
115 | + qt_meta_data_ARCSNetworkThreadedServer, &staticMetaObjectExtraData } | ||
116 | +}; | ||
117 | + | ||
118 | +#ifdef Q_NO_DATA_RELOCATION | ||
119 | +const QMetaObject &ARCSNetworkThreadedServer::getStaticMetaObject() { return staticMetaObject; } | ||
120 | +#endif //Q_NO_DATA_RELOCATION | ||
121 | + | ||
122 | +const QMetaObject *ARCSNetworkThreadedServer::metaObject() const | ||
123 | +{ | ||
124 | + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; | ||
125 | +} | ||
126 | + | ||
127 | +void *ARCSNetworkThreadedServer::qt_metacast(const char *_clname) | ||
128 | +{ | ||
129 | + if (!_clname) return 0; | ||
130 | + if (!strcmp(_clname, qt_meta_stringdata_ARCSNetworkThreadedServer)) | ||
131 | + return static_cast<void*>(const_cast< ARCSNetworkThreadedServer*>(this)); | ||
132 | + return QTcpServer::qt_metacast(_clname); | ||
133 | +} | ||
134 | + | ||
135 | +int ARCSNetworkThreadedServer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) | ||
136 | +{ | ||
137 | + _id = QTcpServer::qt_metacall(_c, _id, _a); | ||
138 | + if (_id < 0) | ||
139 | + return _id; | ||
140 | + return _id; | ||
141 | +} | ||
142 | +static const uint qt_meta_data_ARCSNetworkServer[] = { | ||
143 | + | ||
144 | + // content: | ||
145 | + 6, // revision | ||
146 | + 0, // classname | ||
147 | + 0, 0, // classinfo | ||
148 | + 0, 0, // methods | ||
149 | + 0, 0, // properties | ||
150 | + 0, 0, // enums/sets | ||
151 | + 0, 0, // constructors | ||
152 | + 0, // flags | ||
153 | + 0, // signalCount | ||
154 | + | ||
155 | + 0 // eod | ||
156 | +}; | ||
157 | + | ||
158 | +static const char qt_meta_stringdata_ARCSNetworkServer[] = { | ||
159 | + "ARCSNetworkServer\0" | ||
160 | +}; | ||
161 | + | ||
162 | +void ARCSNetworkServer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) | ||
163 | +{ | ||
164 | + Q_UNUSED(_o); | ||
165 | + Q_UNUSED(_id); | ||
166 | + Q_UNUSED(_c); | ||
167 | + Q_UNUSED(_a); | ||
168 | +} | ||
169 | + | ||
170 | +const QMetaObjectExtraData ARCSNetworkServer::staticMetaObjectExtraData = { | ||
171 | + 0, qt_static_metacall | ||
172 | +}; | ||
173 | + | ||
174 | +const QMetaObject ARCSNetworkServer::staticMetaObject = { | ||
175 | + { &QThread::staticMetaObject, qt_meta_stringdata_ARCSNetworkServer, | ||
176 | + qt_meta_data_ARCSNetworkServer, &staticMetaObjectExtraData } | ||
177 | +}; | ||
178 | + | ||
179 | +#ifdef Q_NO_DATA_RELOCATION | ||
180 | +const QMetaObject &ARCSNetworkServer::getStaticMetaObject() { return staticMetaObject; } | ||
181 | +#endif //Q_NO_DATA_RELOCATION | ||
182 | + | ||
183 | +const QMetaObject *ARCSNetworkServer::metaObject() const | ||
184 | +{ | ||
185 | + return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; | ||
186 | +} | ||
187 | + | ||
188 | +void *ARCSNetworkServer::qt_metacast(const char *_clname) | ||
189 | +{ | ||
190 | + if (!_clname) return 0; | ||
191 | + if (!strcmp(_clname, qt_meta_stringdata_ARCSNetworkServer)) | ||
192 | + return static_cast<void*>(const_cast< ARCSNetworkServer*>(this)); | ||
193 | + if (!strcmp(_clname, "ARCSAbstractComponent")) | ||
194 | + return static_cast< ARCSAbstractComponent*>(const_cast< ARCSNetworkServer*>(this)); | ||
195 | + return QThread::qt_metacast(_clname); | ||
196 | +} | ||
197 | + | ||
198 | +int ARCSNetworkServer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) | ||
199 | +{ | ||
200 | + _id = QThread::qt_metacall(_c, _id, _a); | ||
201 | + if (_id < 0) | ||
202 | + return _id; | ||
203 | + return _id; | ||
204 | +} | ||
205 | +QT_END_MOC_NAMESPACE |
network/network.pro
0 → 100644
1 | +unix:TEMPLATE = lib | ||
2 | +win32:TEMPLATE = lib | ||
3 | +INCLUDEPATH += $$(ARCSDIR)/include | ||
4 | +INCLUDEPATH +=. | ||
5 | +LIBRARIES += -L$$(ARCSDIR)/lib \ | ||
6 | + -larcs | ||
7 | +LIBS += -L$$(ARCSDIR)/lib \ | ||
8 | + -larcs | ||
9 | +CONFIG += dll | ||
10 | +QT = core \ | ||
11 | + network | ||
12 | + | ||
13 | +DESTDIR=../libs | ||
14 | +DLLDESTDIR=../libs | ||
15 | + | ||
16 | +HEADERS += arcsnetworkcomponent.h \ | ||
17 | + arcsnetworkfamily.h \ | ||
18 | + arcsnetworkserver.h \ | ||
19 | + arcsnetworkframes.h \ | ||
20 | + arcsnetworkconfigurator.h \ | ||
21 | + arcsnetworkproxyslot.h \ | ||
22 | + arcsnetworkproxysignal.h | ||
23 | +HEADERS += | ||
24 | +SOURCES += arcsnetworkcomponent.cpp \ | ||
25 | + arcsnetworkserver.cpp \ | ||
26 | + arcsnetworkframes.cpp \ | ||
27 | + arcsnetworkproxyslot.cpp \ | ||
28 | + arcsnetworkproxysignal.cpp | ||
29 | +SOURCES += | ||
30 | +ALXFILE = libnetwork.alx | ||
31 | +OTHER_FILES += libnetwork.alx | ||
32 | +arcslibrary.output = alm_${QMAKE_FILE_BASE}.cpp | ||
33 | +arcslibrary.input = ALXFILE | ||
34 | +arcslibrary.commands = arcslibmaker \ | ||
35 | + ${QMAKE_FILE_NAME} | ||
36 | +arcslibrary.variable_out = SOURCES | ||
37 | +QMAKE_EXTRA_COMPILERS += arcslibrary |
-
Please register or login to post a comment