From 68d84181d53cc1b3cfab0b9a1505a1599744991d Mon Sep 17 00:00:00 2001 From: Iru Dog Date: Sun, 2 Nov 2014 19:36:03 +0800 Subject: split fqterm_socket to fqterm_*_socket files --- src/protocol/fqterm_local_socket.cpp | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/protocol/fqterm_local_socket.cpp (limited to 'src/protocol/fqterm_local_socket.cpp') diff --git a/src/protocol/fqterm_local_socket.cpp b/src/protocol/fqterm_local_socket.cpp new file mode 100644 index 0000000..e15f8d9 --- /dev/null +++ b/src/protocol/fqterm_local_socket.cpp @@ -0,0 +1,81 @@ +#include "fqterm.h" +#include "fqterm_local_socket.h" + +namespace FQTerm { + +FQTermLocalSocket::FQTermLocalSocket( const QString& shell_bin ) : shell_bin_(shell_bin) +{ + 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)))); +} + +FQTermLocalSocket::~FQTermLocalSocket() +{ + delete shell_process_; +} + +void FQTermLocalSocket::connectToHost( const QString &host, quint16 port ) +{ + shell_process_->start("", QIODevice::ReadWrite | QIODevice::Unbuffered); +} + +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" -- cgit v1.2.3