summaryrefslogtreecommitdiff
path: root/src/protocol/fqterm_local_socket.cpp
diff options
context:
space:
mode:
authorIru Dog <mytbk920423@gmail.com>2014-11-02 19:36:03 +0800
committerIru Dog <mytbk920423@gmail.com>2014-11-02 19:36:03 +0800
commit68d84181d53cc1b3cfab0b9a1505a1599744991d (patch)
treedb1a4cf95686f5ebe9804b666375f94e5630dd45 /src/protocol/fqterm_local_socket.cpp
parent12544b035e8b5fdecfad472e5a9b1eea106d42a1 (diff)
downloadfqterm-68d84181d53cc1b3cfab0b9a1505a1599744991d.tar.xz
split fqterm_socket to fqterm_*_socket files
Diffstat (limited to 'src/protocol/fqterm_local_socket.cpp')
-rw-r--r--src/protocol/fqterm_local_socket.cpp81
1 files changed, 81 insertions, 0 deletions
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"