#ifndef DEBUG_H
#define DEBUG_H
#include <QObject>
#include <QtNetwork>
#include <QTcpServer>
class Debug: public QObject
{
Q_OBJECT
public:
Debug(QObject *parent = 0);
~Debug();
private:
QTcpServer *m_tcp_server;
QTcpSocket *m_client_socket;
private slots:
void on_server_newconnect();
void readMessage();
};
#endif
#include "Debug.h"
#include <fcntl.h>
#define DEBUG_PORT (60000)
static char tty_name[20]={0};
void customMessageHandler(QtMsgType type, const char *msg)
{
/*
QString txt;
switch (type) {
case QtDebugMsg:
txt = QString("Debug: %1").arg(msg);
break;
case QtWarningMsg:
txt = QString("Warning: %1").arg(msg);
break;
case QtCriticalMsg:
txt = QString("Critical: %1").arg(msg);
break;
case QtFatalMsg:
txt = QString("Fatal: %1").arg(msg);
abort();
}
*/
QFile outFile(tty_name);
outFile.open(QIODevice::WriteOnly);
QTextStream ts(&outFile);
//ts << txt << endl;
ts << msg << endl;
}
Debug::Debug(QObject *parent):QObject(parent)
{
m_tcp_server = new QTcpServer(this);
connect(m_tcp_server,SIGNAL(newConnection()),this,SLOT(on_server_newconnect()));
m_tcp_server->listen(QHostAddress::Any,DEBUG_PORT);
m_client_socket = NULL;
}
Debug::~Debug()
{
if(m_client_socket)
{
m_client_socket->close();
m_client_socket = NULL;
}
m_tcp_server->close();
delete m_tcp_server;
m_tcp_server = NULL;
}
void Debug::on_server_newconnect()
{
m_client_socket = m_tcp_server->nextPendingConnection();
if(0 == m_client_socket)
{
}
else
{
m_client_socket->write("connect success",sizeof("connect success"));
connect(m_client_socket,SIGNAL(readyRead()),this,SLOT(readMessage()));
}
}
void Debug::readMessage()
{
memset(tty_name,0,20);
if(m_client_socket)
{
int ret = m_client_socket->read(tty_name,100);
if(ret >0)
{
int iPos=strlen(tty_name)-1;
while(1)
{
if(tty_name[iPos]=='\r'||tty_name[iPos]=='\n')
{
tty_name[iPos]=0;
iPos--;
if(iPos<=0)
{
break;
}
}
else
{
break;
}
}
qInstallMsgHandler(customMessageHandler);
}
}
}
//tty |telnet 127.0.0.1 60000