Jean-Yves Didier

Correction bug synchronisation serveur.

#############################################################################
# Makefile for building: libnetwork.so.1.0.0
# Generated by qmake (2.01a) (Qt 4.8.4) on: Thu Aug 29 21:40:54 2013
# Generated by qmake (2.01a) (Qt 4.8.4) on: Tue Sep 3 10:32:45 2013
# Project: network.pro
# Template: lib
# Command: /usr/bin/qmake -spec /usr/lib/qt/mkspecs/linux-g++ -o Makefile network.pro
# Command: /usr/bin/qmake -o Makefile network.pro
#############################################################################
####### Compiler, tools and options
......@@ -13,10 +13,10 @@ CXX = g++
DEFINES = -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS = -pipe -g -Wall -W -D_REENTRANT -fPIC $(DEFINES)
INCPATH = -I/usr/lib/qt/mkspecs/linux-g++ -I. -I/usr/lib/qt/include/QtCore -I/usr/lib/qt/include/QtNetwork -I/usr/lib/qt/include -I../../ARCS2/include -I. -I.
INCPATH = -I/usr/lib/qt/mkspecs/linux-g++ -I. -I/usr/lib/qt/include/QtCore -I/usr/lib/qt/include/QtNetwork -I/usr/lib/qt/include -I../../ARCS2/trunk/include -I. -I.
LINK = g++
LFLAGS = -Wl,-rpath,/usr/lib/qt/lib -shared -Wl,-soname,libnetwork.so.1
LIBS = $(SUBLIBS) -L/usr/lib/qt/lib -L/home/vortex/sources/ARCS2/lib -larcs -lQtNetwork -L/usr/lib/qt/lib -lQtCore -lpthread
LIBS = $(SUBLIBS) -L/usr/lib/qt/lib -L/home/didier/sources/ARCS2/trunk/lib -larcs -lQtNetwork -L/usr/lib/qt/lib -lQtCore -lpthread
AR = ar cqs
RANLIB =
QMAKE = /usr/bin/qmake
......@@ -170,7 +170,7 @@ Makefile: network.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/lib/qt/mksp
/usr/lib/qt/mkspecs/features/include_source_dir.prf \
/usr/lib/qt/lib/libQtNetwork.prl \
/usr/lib/qt/lib/libQtCore.prl
$(QMAKE) -spec /usr/lib/qt/mkspecs/linux-g++ -o Makefile network.pro
$(QMAKE) -o Makefile network.pro
/usr/lib/qt/mkspecs/common/unix.conf:
/usr/lib/qt/mkspecs/common/linux.conf:
/usr/lib/qt/mkspecs/common/gcc-base.conf:
......@@ -201,7 +201,7 @@ Makefile: network.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/lib/qt/mksp
/usr/lib/qt/lib/libQtNetwork.prl:
/usr/lib/qt/lib/libQtCore.prl:
qmake: FORCE
@$(QMAKE) -spec /usr/lib/qt/mkspecs/linux-g++ -o Makefile network.pro
@$(QMAKE) -o Makefile network.pro
dist:
@$(CHK_DIR_EXISTS) .tmp/network1.0.0 || $(MKDIR) .tmp/network1.0.0
......
......@@ -3,6 +3,7 @@
#include "arcsnetworkproxyslot.h"
#include "arcsnetworkproxysignal.h"
#include "arcsnetworkframes.h"
#include <iostream>
#include <QTcpSocket>
......@@ -62,7 +63,7 @@ QStringList ARCSNetworkComponent::getSignals()
socket->connectToHost(hostName, port);
if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut))
{
ARCS::Network::log(405,socket->errorString());
ARCS::Network::logError(405,socket->errorString());
return res;
}
......@@ -76,12 +77,12 @@ QStringList ARCSNetworkComponent::getSignals()
// response maybe an error. It should then be a good idea to
// write down such response.
//! \todo handle other response (error)
ARCS::Network::log(467);
ARCS::Network::logError(467);
else
res = ((ARCSNetworkInterfaceResponse*)response->getData())->getSignals();
}
else
ARCS::Network::log(468);
ARCS::Network::logError(468);
socket->disconnectFromHost();
if (response)
......@@ -98,7 +99,7 @@ QStringList ARCSNetworkComponent::getSlots()
socket->connectToHost(hostName, port);
if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut))
{
ARCS::Network::log(405,socket->errorString());
ARCS::Network::logError(405,socket->errorString());
return res;
}
......@@ -110,12 +111,12 @@ QStringList ARCSNetworkComponent::getSlots()
{
if (response->getType() != ARCSNetworkFrame::IFACE_RESPONSE)
//! \todo handle returned error frames
ARCS::Network::log(467);
ARCS::Network::logError(467);
else
res = ((ARCSNetworkInterfaceResponse*)response->getData())->getSlots();
}
else
ARCS::Network::log(468);
ARCS::Network::logError(468);
socket->disconnectFromHost();
if (response)
......@@ -150,7 +151,7 @@ void ARCSNetworkComponent::requestSlotConnect(ARCSNetworkProxySlot* anps)
socket->connectToHost(hostName, port);
if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut))
{
ARCS::Network::log(439,socket->errorString());
ARCS::Network::logError(439,socket->errorString());
return ;
}
......@@ -163,14 +164,14 @@ void ARCSNetworkComponent::requestSlotConnect(ARCSNetworkProxySlot* anps)
{
if (response->getType() != ARCSNetworkFrame::CONNECT_RESPONSE)
//! \todo insérer traitement approprié
ARCS::Network::log(416);
ARCS::Network::logError(416);
else
{
anps->setSlotId(((ARCSNetworkConnectResponse*)response->getData())->getId());
}
}
else
ARCS::Network::log(417);
ARCS::Network::logError(417);
socket->disconnectFromHost();
if (response)
......@@ -184,7 +185,7 @@ void ARCSNetworkComponent::requestSignalConnect(ARCSNetworkProxySignal* anps)
socket->connectToHost(hostName, port);
if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut))
{
ARCS::Network::log(449,socket->errorString());
ARCS::Network::logError(449,socket->errorString());
return ;
}
......@@ -211,7 +212,7 @@ void ARCSNetworkComponent::requestSignalDisconnect(ARCSNetworkProxySignal* anps)
socket->connectToHost(hostName, port);
if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut))
{
ARCS::Network::log(449,socket->errorString());
ARCS::Network::logError(449,socket->errorString());
return ;
}
......@@ -246,7 +247,7 @@ bool ARCSNetworkComponent::genuineConnect (QString sig, ARCSAbstractComponent *d
socket->connectToHost(hostName, port);
if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut))
{
ARCS::Network::log(419,socket->errorString());
ARCS::Network::logError(419,socket->errorString());
return false;
}
......@@ -273,7 +274,7 @@ bool ARCSNetworkComponent::genuineDisconnect(QString sig, ARCSAbstractComponent*
socket->connectToHost(hostName, port);
if (!socket->waitForConnected(ARCSNetworkFrame::TimeOut))
{
ARCS::Network::log(429,socket->errorString());
ARCS::Network::logError(429,socket->errorString());
return false;
}
......
......@@ -48,7 +48,7 @@ class ARCSNetworkProxySlot;
virtual bool genuineInstanciate ()
{
if (!ARCSNetworkServer::getInstance()->isListening())
ARCSNetworkServer::getInstance()->start();
ARCSNetworkServer::getInstance()->startServer();
return true;
}
......
......@@ -11,7 +11,7 @@ namespace ARCS {
}
void ARCS::Network::log(int errorCode,QString moreInfo)
void ARCS::Network::logError(int errorCode,QString moreInfo)
{
if (moreInfo.isEmpty())
ARCSLog::getInstance()->logError("Net:"+QString::number(errorCode),
......@@ -38,6 +38,7 @@ QHash<int,QString> ARCS::Network::initErrors()
res[415]="CONNECT_REQUEST: wrong slot name (%1)";
res[416]="CONNECT_REQUEST: received invalid response";
res[417]="CONNECT_REQUEST: received null response";
res[418]="CONNECT_REQUEST: network error '%1'";
res[419]="CONNECT_REQUEST: network error '%1'";
res[424]="DISCONNECT_REQUEST: wrong source name (%1)";
......
......@@ -9,7 +9,7 @@
namespace ARCS {
namespace Network {
extern const QHash<int,QString> errors;
void log(int errorCode, QString moreInfo=QString::null);
void logError(int errorCode, QString moreInfo=QString::null);
}
}
......@@ -250,7 +250,7 @@ class ARCSNetworkAckResponse : public ARCSNetworkData
void setId (int i) { id=i;}
virtual void serialize(QDataStream& stream ) { stream << id ;}
virtual void deserialize(QDataStream& stream ) {stream >> id ; }
virtual void deserialize(QDataStream& stream ) { stream >> id ; }
private:
......
......@@ -106,7 +106,7 @@ void ARCSNetworkServerThread::handleConnectRequest(ARCSNetworkConnectRequest* an
// 3 : ack : c'est fini !
ARCSNetworkFrame frame(ARCSNetworkFrame::ACK_RESPONSE);
((ARCSNetworkAckResponse*)frame.getData())->setId(id);
((ARCSNetworkAckResponse*)frame.getData())->setId(id); // utilit du id ?
frame.writeFrame(socket);
/*if ((QString*)ARCSNetworkServer::getInstance()->getSignals()!=ancr->getSignal())
{
......@@ -173,7 +173,6 @@ void ARCSNetworkServerThread::handleSignalRequest(ARCSNetworkSignalRequest* ansr
{
//std::cout << "[Server] Recieved a signal connect on "<<
ARCSNetworkServer::getInstance()->createSlotStub(ansr->getSignal(),
ansr->getId(),
ansr->getPort(),
......@@ -182,11 +181,12 @@ void ARCSNetworkServerThread::handleSignalRequest(ARCSNetworkSignalRequest* ansr
((ARCSNetworkConnectResponse*)frame.getData())->setId(0);
frame.writeFrame(socket);
/** pourrissage en rgle de code.
if ((ARCSNetworkServer::getInstance()->getPort())!=ansr->getPort())
{
std::cerr <<"Erreur 441: SIGNAL _REQUEST error : port number is false"<< std::endl;
}
/*if ((ARCSNetworkServer::getInstance()->getSignals())!=ansr->getSignal())
if ((ARCSNetworkServer::getInstance()->getSignals())!=ansr->getSignal())
{
std ::cerr <<"Erreur 444 :SIGNAL_REQUEST error : signal name not found"<< std::endl;
}*/
......@@ -199,7 +199,7 @@ void ARCSNetworkServerThread::handleCallRequest(ARCSNetworkCallRequest* ancr, QT
//std::cout << "[Server] Recieved a call request." << std::endl;
ARCSNetworkServer::getInstance()->call(ancr->getId(), ancr->getParams());
ARCSNetworkFrame frame(ARCSNetworkFrame::ACK_RESPONSE);
((ARCSNetworkAckResponse*)frame.getData())->setId(0);
((ARCSNetworkAckResponse*)frame.getData())->setId(0); // utilit du id ?
//std::cout<< "Acquittement: paquets reus !" << std::endl;
frame.writeFrame(socket);
}
......@@ -250,6 +250,7 @@ void ARCSNetworkServer::run()
port = 0;
}
}
portDetermination.wakeAll();
exec();
}
......@@ -274,6 +275,15 @@ void ARCSNetworkServer::getInterface(QStringList & slotList, QStringList & signa
}
void ARCSNetworkServer::startServer()
{
start();
mutex.lock();
portDetermination.wait(&mutex);
mutex.unlock();
}
void ARCSNetworkServer::call(int id, QStringList params)
{
......
......@@ -5,6 +5,8 @@
#include <QObject>
#include <arcs/arcsabstractcomponent.h>
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <iostream>
......@@ -89,7 +91,7 @@ public:
static ARCSNetworkServer* getInstance(); //!< Singleton design pattern: mainly for lazy instanciation
int getPort() { return port; } //!< Returns the port which is listened by the server
void setInterface(QString name);//!< Sets the interface, i.e. the name of the component to which we want to apply distributed properties.
void setPort(int i) { port= (quint16)i; start(); } //!< Sets the port, the server will listen to.
void setPort(int i) { port= (quint16)i; startServer(); } //!< Sets the port, the server will listen to.
bool isListening() { return server?server->isListening():false; } //!< Tells wether the server is active or not.
/*! Construct and return a proxy for a given signal
......@@ -126,6 +128,7 @@ public:
void destroySlotStub(QString s);
void getInterface(QStringList& slotList, QStringList& signalList);
void startServer();
// importé de ARCSNetworkStub
......@@ -167,7 +170,8 @@ private:
QHash<QString, ARCSNetworkProxySlot*> proxySlots;
QMutex mutex;
QWaitCondition portDetermination;
};
......