changeset 496:205b2f8adf4a

In preparation for some kind of IPC added a server class. With this abstraction it will be easier to create plugins for other ides or editors which can communicate with UiGUI. git-svn-id: svn://svn.code.sf.net/p/universalindent/code/trunk@736 59b1889a-e5ac-428c-b0c7-476e01d41282
author thomas_-_s <thomas_-_s@59b1889a-e5ac-428c-b0c7-476e01d41282>
date Tue, 17 Jun 2008 13:07:24 +0000
parents 2f6b8f923697
children 97e85897faec
files src/UiguiIndentServer.cpp src/UiguiIndentServer.h src/UniversalIndentGUI.vcproj src/main.cpp
diffstat 4 files changed, 154 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/UiguiIndentServer.cpp	Tue Jun 17 13:07:24 2008 +0000
@@ -0,0 +1,90 @@
+/***************************************************************************
+ *   Copyright (C) 2006-2008 by Thomas Schweitzer                          *
+ *   thomas-schweitzer(at)arcor.de                                         *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License version 2.0 as   *
+ *   published by the Free Software Foundation.                            *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program in the file LICENSE.GPL; if not, write to the *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+
+
+#include "UiguiIndentServer.h"
+
+UiguiIndentServer::UiguiIndentServer(void) : QObject() {
+    tcpServer = NULL;
+}
+
+
+UiguiIndentServer::~UiguiIndentServer(void) {
+}
+
+
+void UiguiIndentServer::startServer() {
+    if ( tcpServer == NULL ) {
+        tcpServer = new QTcpServer(this);
+    }
+
+    if ( !tcpServer->isListening() ) {
+        if ( !tcpServer->listen(QHostAddress::Any, 84484) ) {
+            QMessageBox::critical( NULL, tr("UiGUI Server"), tr("Unable to start the server: %1.").arg(tcpServer->errorString()) );
+            return;
+        }
+    }
+
+    connect( tcpServer, SIGNAL(newConnection()), this, SLOT(handleNewConnection()) );
+}
+
+
+void UiguiIndentServer::stopServer() {
+    if ( tcpServer != NULL ) {
+        tcpServer->close();
+        delete tcpServer;
+        tcpServer = NULL;
+    }
+}
+
+
+void UiguiIndentServer::handleNewConnection() {
+    QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
+    connect( clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()) );
+
+    connect( clientConnection, SIGNAL(readyRead()), this, SLOT(handleReceivedData()) );
+}
+
+
+void UiguiIndentServer::handleReceivedData() {
+
+    QTcpSocket *clientConnection = qobject_cast<QTcpSocket*>( sender() );
+    quint16 blockSize = 0;
+    QString receivedData = "";
+
+    if ( clientConnection != NULL ) {
+        QDataStream in(clientConnection);
+        //in.setVersion(QDataStream::Qt_4_0);
+
+        if ( blockSize == 0 ) {
+            if ( clientConnection->bytesAvailable() < (int)sizeof(quint16) )
+                return;
+
+            in >> blockSize;
+        }
+
+        if ( clientConnection->bytesAvailable() < blockSize )
+            return;
+
+        unsigned int l = clientConnection->bytesAvailable();
+        char *myData = new char[l];
+        in.readRawData( myData, l);
+        delete myData;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/UiguiIndentServer.h	Tue Jun 17 13:07:24 2008 +0000
@@ -0,0 +1,47 @@
+/***************************************************************************
+ *   Copyright (C) 2006-2008 by Thomas Schweitzer                          *
+ *   thomas-schweitzer(at)arcor.de                                         *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License version 2.0 as   *
+ *   published by the Free Software Foundation.                            *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program in the file LICENSE.GPL; if not, write to the *
+ *   Free Software Foundation, Inc.,                                       *
+ *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ ***************************************************************************/
+
+#ifndef UIGUIINDENTSERVER_H
+#define UIGUIINDENTSERVER_H
+
+#include <QTcpServer>
+#include <QTcpSocket>
+#include <QMessageBox>
+
+class UiguiIndentServer : public QObject
+{
+    Q_OBJECT
+
+public:
+    UiguiIndentServer(void);
+    ~UiguiIndentServer(void);
+
+public slots:
+    void startServer();
+    void stopServer();
+
+private slots:
+    void handleNewConnection();
+    void handleReceivedData();
+
+private:
+    QTcpServer *tcpServer;
+};
+
+#endif // UIGUIINDENTSERVER_H
\ No newline at end of file
--- a/src/UniversalIndentGUI.vcproj	Tue Jun 17 13:05:31 2008 +0000
+++ b/src/UniversalIndentGUI.vcproj	Tue Jun 17 13:07:24 2008 +0000
@@ -249,6 +249,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\UiguiIndentServer.cpp"
+				>
+			</File>
+			<File
 				RelativePath=".\uiguiIniFileParser.cpp"
 				>
 			</File>
@@ -311,6 +315,10 @@
 				>
 			</File>
 			<File
+				RelativePath=".\UiguiIndentServer.h"
+				>
+			</File>
+			<File
 				RelativePath=".\uiguiIniFileParser.h"
 				>
 			</File>
@@ -401,6 +409,10 @@
 				>
 			</File>
 			<File
+				RelativePath="$(OutDir)\tmp\moc\moc_UiguiIndentServer.cpp"
+				>
+			</File>
+			<File
 				RelativePath="$(OutDir)\tmp\moc\moc_uiguisettings.cpp"
 				>
 			</File>
--- a/src/main.cpp	Tue Jun 17 13:05:31 2008 +0000
+++ b/src/main.cpp	Tue Jun 17 13:07:24 2008 +0000
@@ -20,6 +20,8 @@
 #include "mainwindow.h"
 #include <QApplication>
 
+#include "UiguiIndentServer.h"
+
 #include "uiguiIniFileParser.h"
 
 /*!
@@ -30,6 +32,9 @@
     QApplication app(argc, argv);
     QString file2OpenOnStart = "";
 
+    UiguiIndentServer server;
+    server.startServer();
+
     if ( argc > 1 ) {
         file2OpenOnStart = argv[1];
     }