1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#include "fqterm.h"
#include "fqterm_local_socket.h"
#include "fqterm_path.h"
namespace FQTerm {
FQTermLocalSocket::FQTermLocalSocket()
{
shell_process_ = new QProcess();
shell_process_->setProcessChannelMode(QProcess::MergedChannels);
FQ_VERIFY(connect(shell_process_, SIGNAL(started()), this, SIGNAL(connected())));
FQ_VERIFY(connect(shell_process_, SIGNAL(stateChanged(QProcess::ProcessState)), this , SLOT(stateChanged(QProcess::ProcessState))));
FQ_VERIFY(connect(shell_process_, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(finished(int, QProcess::ExitStatus))));
//FQ_VERIFY(connect(shell_process_, SIGNAL(delayedCloseFinished()), this, SIGNAL(delayedCloseFinished())));
FQ_VERIFY(connect(shell_process_, SIGNAL(readyRead()), this, SIGNAL(readyRead())));
//TODO: Error
//FQ_VERIFY(connect(shell_process_, SIGNAL(error(QAbstractSocket::SocketError)), this, SIGNAL(error(QAbstractSocket::SocketError))));
//FQ_VERIFY(connect(shell_process_, SIGNAL(socketState(int)), this, SIGNAL(socketState(int))));
conn_info.proto = PROTO_LOCAL;
}
FQTermLocalSocket::~FQTermLocalSocket()
{
delete shell_process_;
}
void FQTermLocalSocket::connectToHost( const QString &host, quint16 port )
{
if (local_shell_bin!=NULL) {
shell_process_->start(local_shell_bin->arg(QString::number(port), host),
QIODevice::ReadWrite | QIODevice::Unbuffered);
} else {
emit connectionClosed();
}
}
void FQTermLocalSocket::close()
{
shell_process_->close();
}
QByteArray FQTermLocalSocket::readBlock( unsigned long maxlen )
{
return shell_process_->read(maxlen);
}
long FQTermLocalSocket::writeBlock( const QByteArray &data )
{
int count = shell_process_->write(data);
//char c;
// shell_process_->getChar(&c);
// shell_process_->ungetChar(c);
if (bytesAvailable())
{
emit readyRead();
}
return count;
}
unsigned long FQTermLocalSocket::bytesAvailable()
{
return shell_process_->bytesAvailable();
}
void FQTermLocalSocket::finished( int exitCode, QProcess::ExitStatus exitStatus )
{
emit connectionClosed();
}
void FQTermLocalSocket::stateChanged(QProcess::ProcessState newState)
{
switch(newState)
{
case QProcess::NotRunning:
break;
case QProcess::Starting:
emit hostFound();
// shell_process_->write("dir\n");
break;
case QProcess::Running:
break;
}
}
}
#include "fqterm_local_socket.moc"
|