Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>pull/3/head
parent
281a7702cf
commit
2d49c44c47
@ -1,175 +0,0 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006-2012 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"
|
||||
|
||||
#include <tqtcpserver.h>
|
||||
#include <tqtcpsocket.h>
|
||||
#include <tqmessagebox.h>
|
||||
#include <tqtdebug.h>
|
||||
|
||||
// \defgroup grp_Server All concerning the server component.
|
||||
|
||||
/*
|
||||
\class UiGuiIndentServer
|
||||
\ingroup grp_Server
|
||||
\brief UiGuiIndentServer is in such an early state, that even the communication
|
||||
protocol isn't completely planned. So this class lacks documentation until
|
||||
I really know where all this will lead to.
|
||||
|
||||
The plan however is to have a server that receives commands for selecting an
|
||||
indenter and perhaps load some by the user predefined indenter config file. Then
|
||||
the client can send a text to it and will receive it formatted.
|
||||
The idea behind that is to make UiGUIs use as plugin or whatever more flexible.
|
||||
So the plugin is developed for Eclipse for example and it takes the client role,
|
||||
making it possible to use UiGUI from within Eclipse. Choosing a network protocol
|
||||
makes everything platform and programming language independent, so it doesn't
|
||||
matter for which application the plugin/client is developed.
|
||||
*/
|
||||
|
||||
UiGuiIndentServer::UiGuiIndentServer(void) :
|
||||
TQObject()
|
||||
{
|
||||
_tcpServer = NULL;
|
||||
_currentClientConnection = NULL;
|
||||
_readyForHandleRequest = false;
|
||||
}
|
||||
|
||||
UiGuiIndentServer::~UiGuiIndentServer(void)
|
||||
{
|
||||
}
|
||||
|
||||
void UiGuiIndentServer::startServer()
|
||||
{
|
||||
if (_tcpServer == NULL)
|
||||
{
|
||||
_tcpServer = new TQTcpServer(this);
|
||||
}
|
||||
|
||||
if (!_tcpServer->isListening())
|
||||
{
|
||||
if (!_tcpServer->listen(TQHostAddress::Any, tquint16(84484)))
|
||||
{
|
||||
TQMessageBox::critical(NULL, tr("UiGUI Server"),
|
||||
tr("Unable to start the server: %1.").arg(_tcpServer->errorString()));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
connect(_tcpServer, TQ_SIGNAL(newConnection()), this, TQ_SLOT(handleNewConnection()));
|
||||
_readyForHandleRequest = true;
|
||||
_blockSize = 0;
|
||||
}
|
||||
|
||||
void UiGuiIndentServer::stopServer()
|
||||
{
|
||||
if (_tcpServer != NULL)
|
||||
{
|
||||
_tcpServer->close();
|
||||
delete _tcpServer;
|
||||
_tcpServer = NULL;
|
||||
}
|
||||
_currentClientConnection = NULL;
|
||||
_readyForHandleRequest = false;
|
||||
}
|
||||
|
||||
void UiGuiIndentServer::handleNewConnection()
|
||||
{
|
||||
TQTcpSocket *clientConnection = _tcpServer->nextPendingConnection();
|
||||
connect(clientConnection, TQ_SIGNAL(disconnected()), clientConnection, TQ_SLOT(deleteLater()));
|
||||
|
||||
connect(clientConnection, TQ_SIGNAL(readyRead()), this, TQ_SLOT(handleReceivedData()));
|
||||
}
|
||||
|
||||
void UiGuiIndentServer::handleReceivedData()
|
||||
{
|
||||
if (!_readyForHandleRequest)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_currentClientConnection = qobject_cast<TQTcpSocket*>(sender());
|
||||
TQString receivedData = "";
|
||||
|
||||
if (_currentClientConnection != NULL)
|
||||
{
|
||||
TQDataStream in(_currentClientConnection);
|
||||
in.setVersion(TQDataStream::TQt_4_0);
|
||||
|
||||
if (_blockSize == 0)
|
||||
{
|
||||
if (_currentClientConnection->bytesAvailable() < (int)sizeof(tquint32))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
in >> _blockSize;
|
||||
}
|
||||
|
||||
if (_currentClientConnection->bytesAvailable() < _blockSize)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
TQString receivedMessage;
|
||||
in >> receivedMessage;
|
||||
|
||||
_blockSize = 0;
|
||||
|
||||
tqDebug() << "receivedMessage: " << receivedMessage;
|
||||
|
||||
if (receivedMessage == "ts")
|
||||
{
|
||||
sendMessage("Toll");
|
||||
}
|
||||
else
|
||||
{
|
||||
sendMessage("irgendwas");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UiGuiIndentServer::sendMessage(const TQString &message)
|
||||
{
|
||||
_readyForHandleRequest = false;
|
||||
|
||||
_dataToSend = "";
|
||||
TQDataStream out(&_dataToSend, TQIODevice::WriteOnly);
|
||||
out.setVersion(TQDataStream::TQt_4_0);
|
||||
out << (tquint32)0;
|
||||
out << message;
|
||||
out.device()->seek(0);
|
||||
out << (tquint32)(_dataToSend.size() - sizeof(tquint32));
|
||||
|
||||
connect(_currentClientConnection, TQ_SIGNAL(bytesWritten(qint64)), this,
|
||||
TQ_SLOT(checkIfReadyForHandleRequest()));
|
||||
_currentClientConnection->write(_dataToSend);
|
||||
}
|
||||
|
||||
void UiGuiIndentServer::checkIfReadyForHandleRequest()
|
||||
{
|
||||
if (_currentClientConnection->bytesToWrite() == 0)
|
||||
{
|
||||
TQString dataToSendStr = _dataToSend.right(_dataToSend.size() - sizeof(tquint32));
|
||||
tqDebug() << "checkIfReadyForHandleRequest _dataToSend was: " << dataToSendStr;
|
||||
disconnect(_currentClientConnection, TQ_SIGNAL(bytesWritten(qint64)), this,
|
||||
TQ_SLOT(checkIfReadyForHandleRequest()));
|
||||
_readyForHandleRequest = true;
|
||||
}
|
||||
}
|
@ -1,55 +0,0 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2006-2012 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 <tqobject.h>
|
||||
|
||||
class TQTcpServer;
|
||||
class TQTcpSocket;
|
||||
|
||||
|
||||
class UiGuiIndentServer : public TQObject
|
||||
{
|
||||
TQ_OBJECT
|
||||
|
||||
public:
|
||||
UiGuiIndentServer(void);
|
||||
~UiGuiIndentServer(void);
|
||||
|
||||
public slots:
|
||||
void startServer();
|
||||
void stopServer();
|
||||
|
||||
private slots:
|
||||
void handleNewConnection();
|
||||
void handleReceivedData();
|
||||
void sendMessage(const TQString &message);
|
||||
void checkIfReadyForHandleRequest();
|
||||
|
||||
private:
|
||||
TQTcpServer *_tcpServer;
|
||||
TQByteArray _dataToSend;
|
||||
bool _readyForHandleRequest;
|
||||
TQTcpSocket *_currentClientConnection;
|
||||
TQ_UINT32 _blockSize;
|
||||
};
|
||||
|
||||
#endif // UIGUIINDENTSERVER_H
|
Loading…
Reference in new issue