zpmainframe.cpp 3.7 KB
Newer Older
丁劲犇's avatar
丁劲犇 已提交
1 2
#include "zpmainframe.h"
#include "ui_zpmainframe.h"
丁劲犇's avatar
丁劲犇 已提交
3
#include <QDateTime>
4
using namespace ZPNetwork;
5
using namespace ZPTaskEngine;
丁劲犇's avatar
丁劲犇 已提交
6 7 8 9 10
ZPMainFrame::ZPMainFrame(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ZPMainFrame)
{
    ui->setupUi(this);
丁劲犇's avatar
丁劲犇 已提交
11

12 13 14 15 16 17
    //Create net engine
    m_netEngine = new zp_net_ThreadPool (4096);

    connect (m_netEngine,&zp_net_ThreadPool::evt_Message,this,&ZPMainFrame::on_evt_Message);
    connect (m_netEngine,&zp_net_ThreadPool::evt_SocketError,this,&ZPMainFrame::on_evt_SocketError);

18 19 20

    m_netEngine->AddListeningAddress("23456_Plain",QHostAddress::Any,23456,false);
    m_netEngine->AddListeningAddress("23457_SSL",QHostAddress::Any,23457,true);
丁劲犇's avatar
丁劲犇 已提交
21 22
    m_netEngine->AddClientTransThreads(4,false);
    m_netEngine->AddClientTransThreads(4,true);
23 24 25 26 27 28

    //Create TaskEngine
    m_taskEngine = new zp_pipeline(this);
    m_taskEngine->addThreads(4);


29 30 31
    m_clientTable = new SmartLink::st_client_table (m_netEngine,m_taskEngine,this);


32

丁劲犇's avatar
丁劲犇 已提交
33
    m_nTimerId = startTimer(500);
34

丁劲犇's avatar
丁劲犇 已提交
35 36 37
    m_pMsgModel = new QStandardItemModel(this);
    ui->listView_msg->setModel(m_pMsgModel);

丁劲犇's avatar
丁劲犇 已提交
38 39 40 41
}

ZPMainFrame::~ZPMainFrame()
{
42 43 44 45 46 47 48
    m_netEngine->RemoveAllAddresses();
    m_netEngine->KickAllClients();
    m_netEngine->DeactiveImmediately();

    m_taskEngine->removeThreads(-1);

    while (m_netEngine->CanExit()==false || m_taskEngine->canClose()==false)
丁劲犇's avatar
丁劲犇 已提交
49 50
    {
        QCoreApplication::processEvents();
51
        QThread::currentThread()->msleep(200);
丁劲犇's avatar
丁劲犇 已提交
52
    }
53

丁劲犇's avatar
丁劲犇 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
    delete ui;
}

void ZPMainFrame::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}
//These Message is nessery.-------------------------------------
丁劲犇's avatar
丁劲犇 已提交
69
void  ZPMainFrame::on_evt_Message(const QString & strMsg)
丁劲犇's avatar
丁劲犇 已提交
70
{
丁劲犇's avatar
丁劲犇 已提交
71 72 73 74 75 76
    QDateTime dtm = QDateTime::currentDateTime();
    QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " " + strMsg;
    int nrows = m_pMsgModel->rowCount();
    m_pMsgModel->insertRow(0,new QStandardItem(msg));
    while (nrows-- > 16384)
        m_pMsgModel->removeRow(m_pMsgModel->rowCount()-1);
丁劲犇's avatar
丁劲犇 已提交
77 78 79
}

//The socket error message
丁劲犇's avatar
丁劲犇 已提交
80
void  ZPMainFrame::on_evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError)
丁劲犇's avatar
丁劲犇 已提交
81
{
丁劲犇's avatar
丁劲犇 已提交
82 83 84 85 86 87 88
    QDateTime dtm = QDateTime::currentDateTime();
    QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " " + QString("SockError %1 with code %2")
            .arg((quint64)senderSock).arg((quint32)socketError);
    int nrows = m_pMsgModel->rowCount();
    m_pMsgModel->insertRow(0,new QStandardItem(msg));
    while (nrows-- > 16384)
        m_pMsgModel->removeRow(m_pMsgModel->rowCount()-1);
丁劲犇's avatar
丁劲犇 已提交
89 90 91

}

丁劲犇's avatar
丁劲犇 已提交
92 93 94 95 96

void  ZPMainFrame::timerEvent(QTimerEvent * e)
{
    if (e->timerId()==m_nTimerId)
    {
97 98 99 100
        //recording net status
        QString str_msg;
        QStringList lstListeners = m_netEngine->ListenerNames();
        str_msg += tr("Current Listen Threads: %1\n").arg(lstListeners.size());
丁劲犇's avatar
丁劲犇 已提交
101
        for (int i=0;i<lstListeners.size();i++)
102 103
            str_msg += tr("\tListen Threads %1: %2\n").arg(i+1).arg(lstListeners.at(i));
        int nClientThreads = m_netEngine->TransThreadNum();
丁劲犇's avatar
丁劲犇 已提交
104

105
        str_msg += tr("Current Trans Threads: %1\n").arg(nClientThreads);
丁劲犇's avatar
丁劲犇 已提交
106
        for (int i=0;i<nClientThreads;i++)
107 108 109 110 111
            str_msg += tr("\tTrans Threads %1 hold %2 Client Sockets.\n").arg(i+1).arg(m_netEngine->totalClients(i));

        //recording task status
        str_msg += tr("Current Task Threads: %1\n").arg(m_taskEngine->threadsCount());
        str_msg += tr("Current Task Payload: %1\n").arg(m_taskEngine->payload());
112
        str_msg += tr("Current Task Idle Threads: %1\n").arg(m_taskEngine->idleThreads());
113
        ui->plainTextEdit_status_net->setPlainText(str_msg);
丁劲犇's avatar
丁劲犇 已提交
114 115
    }
}