Mercurial > hg > forks > UniversalIndentGUI
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]; }