# HG changeset patch # User Jeandet Alexis # Date 2014-03-18 16:34:37 # Node ID d09469239955f93bb3a350f8076da510d8f5330d # Parent 3d3921dcdd34f87429910ebb0f8f3f37aa19c36d Sync diff --git a/spwplugin/SpwTcpPacketServer/spwtcppacketserver.cpp b/spwplugin/SpwTcpPacketServer/spwtcppacketserver.cpp --- a/spwplugin/SpwTcpPacketServer/spwtcppacketserver.cpp +++ b/spwplugin/SpwTcpPacketServer/spwtcppacketserver.cpp @@ -21,6 +21,8 @@ ----------------------------------------------------------------------------*/ #include "spwtcppacketserver.h" #include "ui_spwtcppacketserver.h" +#include +#include SpwTcpPacketServer::SpwTcpPacketServer(QWidget *parent) : QWidget(parent), @@ -30,6 +32,8 @@ SpwTcpPacketServer::SpwTcpPacketServer(Q this->p_bridge = NULL; this->p_server = new QTcpServer(); connect(this->ui->startServeQpb,SIGNAL(clicked(bool)),SLOT(toggleServer())); + updateHostIP(); + this->ui->PortLineEdit->setText("2200"); } SpwTcpPacketServer::~SpwTcpPacketServer() @@ -49,20 +53,72 @@ void SpwTcpPacketServer::setBridge(abstr void SpwTcpPacketServer::pushPacket(char *packet, int size) { - + QByteArray data; + char sizech[3]; + data.append((char)0); + sizech[0]=size & 0x0FF; + sizech[1]=(size>>8) & 0x0FF; + sizech[2]=(size>>16) & 0x0FF; + data.append(sizech,3); + data.append(packet,size); + for(int i=0;istate()!=QAbstractSocket::ConnectedState) + { + connectedClients.removeAt(i); + delete soc; + } + else + { + connectedClients.at(i)->write(data); + } + } } void SpwTcpPacketServer::toggleServer() { if(this->p_server->isListening()) { - this->ui->startServeQpb->setText("Start Server"); - this->p_server->close(); + disconnectServer(); } else { - this->p_server->listen(QHostAddress::Any,this->ui->PortLineEdit->text().toInt()); - - this->ui->startServeQpb->setText("Stop Server"); + connectServer(); } } + +void SpwTcpPacketServer::connectServer() +{ + this->p_server->listen(QHostAddress::Any,this->ui->PortLineEdit->text().toInt()); + this->ui->startServeQpb->setText("Stop Server"); +} + +void SpwTcpPacketServer::disconnectServer() +{ + this->ui->startServeQpb->setText("Start Server"); + this->p_server->close(); +} + +void SpwTcpPacketServer::setServerPort(qint32 port) +{ + this->ui->PortLineEdit->setText(QString("%1").arg(port)); +} + +void SpwTcpPacketServer::newConnection() +{ + this->connectedClients.append(this->p_server->nextPendingConnection()); +} + +void SpwTcpPacketServer::updateHostIP() +{ + QList list = QNetworkInterface::allAddresses(); + + for(int nIter=0; nIterui->IPLineEdit->setText(list[nIter].toString()); + } +} diff --git a/spwplugin/SpwTcpPacketServer/spwtcppacketserver.h b/spwplugin/SpwTcpPacketServer/spwtcppacketserver.h --- a/spwplugin/SpwTcpPacketServer/spwtcppacketserver.h +++ b/spwplugin/SpwTcpPacketServer/spwtcppacketserver.h @@ -25,6 +25,8 @@ #include #include #include +#include +#include namespace Ui { class SpwTcpPacketServer; @@ -43,10 +45,16 @@ public: public slots: void pushPacket(char* packet,int size); void toggleServer(); + void connectServer(); + void disconnectServer(); + void setServerPort(qint32 port); + void newConnection(); private: + void updateHostIP(); Ui::SpwTcpPacketServer *ui; abstractSpwBridge* p_bridge; QTcpServer* p_server; + QList connectedClients; }; #endif // SPWTCPPACKETSERVER_H diff --git a/spwplugin/spwplugin.cpp b/spwplugin/spwplugin.cpp --- a/spwplugin/spwplugin.cpp +++ b/spwplugin/spwplugin.cpp @@ -46,6 +46,9 @@ spwplugin::spwplugin(QWidget *parent):so this->bridgeSelector->addItem("STAR-Dundee Spw USB Brick"); connect(this->bridgeSelector,SIGNAL(currentIndexChanged(QString)),this,SLOT(bridgeSelectionChanged(QString))); connect(((spwPyWrapper*)this->pyObject),SIGNAL(selectBridge(QString)),this,SLOT(selectBridge(QString))); + connect(((spwPyWrapper*)this->pyObject),SIGNAL(TCPServerConnect()),this->tcpServer,SLOT(connectServer())); + connect(((spwPyWrapper*)this->pyObject),SIGNAL(TCPServerDisconnect()),this->tcpServer,SLOT(disconnectServer())); + connect(((spwPyWrapper*)this->pyObject),SIGNAL(TCPServerSetPort(qint32)),this->tcpServer,SLOT(setServerPort(qint32))); } @@ -99,8 +102,8 @@ void spwplugin::bridgeSelectionChanged(c connect(((spwPyWrapper*)this->pyObject),SIGNAL(connectBridge()),((stardundeeSPW_USB*)bridge),SLOT(connectBridge())); connect(((spwPyWrapper*)this->pyObject),SIGNAL(disconnectBridge()),((stardundeeSPW_USB*)bridge),SLOT(disconnectBridge())); } +} -} void spwplugin::selectBridge(const QString &text) { diff --git a/spwplugin/spwplugin.h b/spwplugin/spwplugin.h --- a/spwplugin/spwplugin.h +++ b/spwplugin/spwplugin.h @@ -63,8 +63,8 @@ public slots: signals: private: + SpwTcpPacketServer* tcpServer; abstractSpwBridge* bridge; - SpwTcpPacketServer* tcpServer; bool scanDone; QTabWidget* mainTabWidgt; QGroupBox* mainGroupBox; diff --git a/spwplugin/spwpywrapper.h b/spwplugin/spwpywrapper.h --- a/spwplugin/spwpywrapper.h +++ b/spwplugin/spwpywrapper.h @@ -7,7 +7,6 @@ class spwPyWrapper : public genericPySys Q_OBJECT public: explicit spwPyWrapper(socexplorerplugin *parent = 0); - signals: void selectBridge(const QString &bridgeName); bool connectBridge(); @@ -19,6 +18,10 @@ signals: void StarDundeeSetRmapAddress(const QString & address); void StarDundeeSetRmapKey(const QString & key); void StarDundeeSetRmapTimeout(const QString & timeout); + + void TCPServerConnect(); + void TCPServerDisconnect(); + void TCPServerSetPort(qint32 port); public slots: };