diff --git a/ZoomPipeline_FuncSvr/ZoomPipeline_FuncSvr.pro b/ZoomPipeline_FuncSvr/ZoomPipeline_FuncSvr.pro index cecbbde2c24aaf4acba5a92e1247573d5eba3ff4..ab553c3dab491edd93180ad2c64c848c3d41d451 100644 --- a/ZoomPipeline_FuncSvr/ZoomPipeline_FuncSvr.pro +++ b/ZoomPipeline_FuncSvr/ZoomPipeline_FuncSvr.pro @@ -53,3 +53,6 @@ FORMS += zpmainframe.ui \ RESOURCES += \ resource.qrc +OTHER_FILES += \ + ZoomPipeline_FuncSvr_zh_CN.ts + diff --git a/ZoomPipeline_FuncSvr/ZoomPipeline_FuncSvr_zh_CN.ts b/ZoomPipeline_FuncSvr/ZoomPipeline_FuncSvr_zh_CN.ts index 591fe6f326989e0b6438b360178b6752d80e1881..67c9b72271b064598bd4c16f2f5ec247c24bf584 100644 --- a/ZoomPipeline_FuncSvr/ZoomPipeline_FuncSvr_zh_CN.ts +++ b/ZoomPipeline_FuncSvr/ZoomPipeline_FuncSvr_zh_CN.ts @@ -1,6 +1,24 @@ + + DialogAddressInput + + + Dialog + 对话框 + + + + Addr + 地址 + + + + Port + 端口 + + MainDialog @@ -135,99 +153,99 @@ 记录 - + Recieved Heart-beating msg sended %1 sec(s) ago. 收到了 %1 秒前发出的心跳测试. - + Client Send a unknown start Header %1 %2. Close client immediately. 客户发出了一个未知的开始头 %1 %2. 立刻关闭连接. - + Res = %1, ID = %2 结果 %1 ID %2 - - - - - - + + + + + + Succeed! 成功! - - + + Log in succeed! 登入成功! - - - + + - + - + + Failed! 失败! - - + + Log in Failed! 登入失败! - - - + + - + + Res = %1 结果 %1 - + Time Corrected! 时间校对成功! - + Time Correct Failed! 时间校对失败! - + upload succeed! 上传成功! - + upload in Failed! 上传失败! - - + + download succeed! 下载成功! - - + + download in Failed! 下载失败! - + log out succeed! 注销成功! @@ -324,15 +342,15 @@ SmartLink::st_clientNodeAppLayer - - - + + + Database Access Error : 数据库访问错误 : - - + + Broken Message stMsg_UploadUserListReq, size not correct. 消息长度不匹配. stMsg_UploadUserListReq. @@ -359,86 +377,86 @@ 试图插入新的权属关系失败! - + To-server Message Failed. 发往服务器的消息解译/处理失败. - + Box To Server Message Failed. 主机发往服务器的消息解译失败. - + Client To Server Message Failed. 客户端发往主机的程序解译失败. - + warning, UUID 0xFFFFFFFF.ignore 警告, UUID为 0xFFFFFFF 的消息被忽略 - + Bad UUID %1. Client Kicked out 非法的 UUID %1. 立刻踢出套接字 - - + + Broadcast Message is not currently supported. 广播消息尚未被支持。 - + Destin ID 目的节点ID - + is not currently logged in. 尚未在本服务器登记。 - - + + Application Layer Version too new. 应用层协议版本太高。 - - + + Broken Message stMsg_HostRegistReq, size not correct. 消息长度不匹配. stMsg_HostRegistReq. - + Broken Message stMsg_HostLogonReq, size not correct. 消息长度不匹配. stMsg_HostLogonReq. - + Broken Message stMsg_ClientLoginReq, size not correct. 消息长度不匹配. stMsg_ClientLoginReq. - - + + Message type not supported. 消息类型不被支持. - + Broken Message stMsg_DownloadUserListReq, size not correct. 消息长度不匹配. stMsg_DownloadUserListReq. - + Broken Message stMsg_ClientLogoutReq, size not correct. 消息长度不匹配. stMsg_ClientLogoutReq. - + Broken Message stMsg_GetHostListReq, size not correct. 消息长度不匹配. stMsg_GetHostListReq. @@ -470,76 +488,76 @@ ZPDatabase::DatabaseResource - - + + Connection name 数据库连接名称 - - + + does not exist. 尚未定义。 - - + + Connection removed 数据库连接已经移除 - - + + . - - - - - - - + + + + + + + Connection 数据库连接 - + Established. 已经建立。 - - - + + + Can't be opened. MSG= 无法建立,错误消息= - - + + Connection 数据库连接 - + has not been added. 尚未建立. - + confirm failed. MSG= 数据库连接确认失败,出错提示= - + has not been opened. 尚未建立。 - - + + Re-Established. 已经恢复正常。 @@ -552,310 +570,318 @@ ZPMainFrame 伸缩流水线服务器框架 - + Summary 概况 - + Settings 设置 - + Listeners 监听器 - - - - + + + + Name 名称 - - + + Addr 地址 - - - + + + Port - + SSL Connection 使用SSL连接 - - + + Add 添加 - + Del 删除 - - - + + + Save 保存 - + Task Pools 任务池 - - - + + + %v %v - + Working Task Threads 逻辑处理线程数目 - + SSL connection Trans Threads SSL 连接传输线程数目 - + Plain connection Trans Threads 普通TCP连接传输线程数目 - - + + + Database 数据库资源 - - + + Type 类型 - + Host Address 主机地址 - + Host Port 主机端口 - + Database Name 数据库实例 - + User 用户名 - + Password 口令 - + Remove 移除 - + + Cluster 集群终端 - + Terminal Listen Address 终端本地监听地址 - + Listen Port 本地端口 - + TransThreads 传输线程数 - + Working Threads 处理线程数 - + Active Terminals 可用集群终端表 - + Publish Address 本节点对外发布地址 - + Publish Port 发布端口 - + Publish Name 发布名称 - - + + &Save 保存(&S) - + Participate 加入集群 - + + Smartlink Smartlink 专有设置 - + Heart-beating 心跳检测最大保活时延 - + seconds - + User Account Database Name 用户信息数据库连接资源名称 - + Main event db name 关键消息缓存数据库连接资源名称 - + Large data root folder 本地大文件存储根路径 - + ... ... - + Messages 运行消息 - + + Nodes + 节点 + + + &Control 控制(&C) - + &Help 帮助(&H) - + E&xit 退出(&x) - + &Start/Stop 开始/结束(&S) - + Start or stop the server 开启或者暂停服务 - + &About 关于(&A) - + &Reload config file 重新加载配置文件(&R) - + Reload Config file 重新加载配置文件并调整服务器参数 - + SSL SSL - + HostAddr 服务地址 - + Username 用户名 - + Options 附加选项 - + TestSQL 用于测试连接的SQL - + Current Listen Threads: %1 监听端口: %1 - + Listen Threads %1: %2 线程%1 监听 %2 - + Current Trans Threads: %1 传输线程: %1 @@ -868,168 +894,186 @@ - + + Confire Exit + 确认退出 + + + + There are still some clients alive in the server. continue waiting? + 有尚未主动退出的节点套接字,是否继续等待? + + + + + + ,Source=%1 + ,来源:%1 + + + + %1:%2 - + Current Task Threads: %1 逻辑处理线程: %1 - + Current Task Payload: %1 逻辑处理负荷: %1 - + Current Task Idle Threads: %1 空闲逻辑处理线程:%1 - + Database Connections: %1 数据库连接: %1 - + %1 status = %2 连接 %1 状态 %2 - + Cluster Group Paras: 集群终端参数: - + Terminal %1 : %2, published Address: %3:%4 终端 %1 : %2, 发布地址: %3:%4 - + Trans Threads: %1 传输线程: %1 - + Shift Threads: %1 处理线程: %1 - + Shift Payload: %1 处理线程负荷: %1 - + Shift Idle Threads: %1 处理线程空闲: %1 - + Smartlink Function Server Paras: Smartlink 功能服务器专有参数: - + User Account Database is : %1 用户信息数据库: %1 - + Event Database is : %1 重要事件数据库: %1 - + Local folder for large file is : %1 磁盘仓库根路径: %1 - + Heart beating Threadhold is : %1 心跳保活门限 %1 秒 - + Name Already Used. 名称已经存在. - + The listener name has been used. 监听器的名称已经被使用了。 - + Invalid Paraments. 无效的参数. - + Address must be valid, Port between 1024 to 32767. 监听端口需要介于 1024 到 32767之间。 - + Open Conf file 打开配置文件 - + Ini files(*.ini) Ini文件(*.ini) - + Name can't be empty. 名称不能为空. - + Database name can not be empty. 数据库资源名称不能为空。 - + Name already exist. 名称已经被使用了。 - + Database name already exist. 名称已经被使用了。 @@ -1037,36 +1081,63 @@ ZPNetwork::zp_netListenThread - + Can not start listen! 无法启动监听! - + Listen Closed! 监听结束! + + ZPNetwork::zp_netTransThread + + + Client Accepted. + 接受节点的接入请求. + + + + Client connected. + 节点已成功连接. + + + + Client Encrypted. + 节点已成功建立加密连接. + + + + Client Closed. + 节点已成功关闭. + + ZPNetwork::zp_net_ThreadPool - + This ID has been used. 这个ID已经被使用了。 - + Non-zp_netListenThread type detected. 非标准线程被检测到,服务器可能受到攻击. - + + Incomming client arriverd. + 收到一个节点接入申请. + + New Client Arriverd. - 新的节点接入。 + 新的节点接入。 - - + + Need Trans Thread Object for clients. 需要一些逻辑处理线程来处理具体的事件。 diff --git a/ZoomPipeline_FuncSvr/network/zp_net_threadpool.cpp b/ZoomPipeline_FuncSvr/network/zp_net_threadpool.cpp index 3cefdfebb5a04406fba0c26f102c7c139b1ec97b..8ec08a13e74da08cf2e24efe4096235335dc6dac 100644 --- a/ZoomPipeline_FuncSvr/network/zp_net_threadpool.cpp +++ b/ZoomPipeline_FuncSvr/network/zp_net_threadpool.cpp @@ -1,8 +1,7 @@ #include "zp_net_threadpool.h" #include #include -#include -#include + namespace ZPNetwork{ /** * @brief Construct a net thread pool object. @@ -82,33 +81,6 @@ namespace ZPNetwork{ return 0; } - QString zp_net_ThreadPool::GenSockMsg(QObject * pSock) - { - QString msg; - msg += tr("Obj=%1").arg((unsigned int)pSock); - QTcpSocket * pSocket = qobject_cast(pSock); - QTcpSocket * pSocketSSL = qobject_cast(pSock); - if (pSocketSSL) - { - msg += tr (",SSLSock,Local=(%1:%2),Peer=%3(%4:%5)") - .arg(pSocket->localAddress().toString()) - .arg(pSocket->localPort()) - .arg(pSocket->peerName()) - .arg(pSocket->peerAddress().toString()) - .arg(pSocket->peerPort()); - } - else if (pSocket) - { - msg += tr (",TcpSock,Local=(%1:%2),Peer=%3(%4:%5)") - .arg(pSocket->localAddress().toString()) - .arg(pSocket->localPort()) - .arg(pSocket->peerName()) - .arg(pSocket->peerAddress().toString()) - .arg(pSocket->peerPort()); - } - return msg; - } - /** * @brief Begin a listening socket at special address and port. The socket will be activated as soon as possible * The Wait-and-Accept approaches are all managed by Listening thread, instead of main-GUI thread. @@ -207,9 +179,10 @@ namespace ZPNetwork{ } //qDebug()<isActive()==false ) -// TransThreadDel(m_vec_NetTransThreads[i]); + //remove old threads + for (int i=0;iisActive()==false ) + TransThreadDel(m_vec_NetTransThreads[i]); if (nMinIdx>=0 && nMinIdxisActive()==false ) -// TransThreadDel(m_vec_NetTransThreads[i]); + //remove old threads + for (int i=0;iisActive()==false ) + TransThreadDel(m_vec_NetTransThreads[i]); if (nMinIdx>=0 && nMinIdx #include #include +#include +#include +#include "smartlink/st_clientnode_basetrans.h" #include "dialogaddressinput.h" using namespace ZPNetwork; using namespace ZPTaskEngine; @@ -20,7 +23,7 @@ ZPMainFrame::ZPMainFrame(QWidget *parent) : //Create net engine m_netEngine = new zp_net_ThreadPool (8192); - connect (m_netEngine,&zp_net_ThreadPool::evt_Message,this,&ZPMainFrame::on_evt_Message); + connect (m_netEngine,&zp_net_ThreadPool::evt_Message,this,&ZPMainFrame::on_evt_MessageNetwork); connect (m_netEngine,&zp_net_ThreadPool::evt_SocketError,this,&ZPMainFrame::on_evt_SocketError); //Create TaskEngine m_taskEngine = new zp_pipeline(this); @@ -64,12 +67,22 @@ ZPMainFrame::~ZPMainFrame() m_pClusterTerm->netEng()->KickAllClients(); m_pClusterTerm->netEng()->DeactiveImmediately(); m_pClusterTerm->taskEng()->removeThreads(-1); - + int maxWait = 0; while (m_netEngine->CanExit()==false || m_taskEngine->canClose()==false || m_pDatabases->isRunning()==true || m_pClusterTerm->canExit()==false) { QCoreApplication::processEvents(); QThread::currentThread()->msleep(200); + maxWait ++; + if (maxWait>=150) + { + if (QMessageBox::information(0,tr("Confire Exit"), + tr("There are still some clients alive in the server. continue waiting?"), + QMessageBox::Yes|QMessageBox::No)==QMessageBox::Yes) + maxWait = 0; + else + break; + } } delete ui; @@ -90,12 +103,10 @@ void ZPMainFrame::changeEvent(QEvent *e) void ZPMainFrame::initUI() { //Message Shown model - m_pMsgModel = new QStandardItemModel(this); - ui->listView_msg->setModel(m_pMsgModel); + m_pMsgModelNetwork = new QStandardItemModel(this); + ui->listView_msg->setModel(m_pMsgModelNetwork); m_pMsgModelCluster = new QStandardItemModel(this); ui->listView_msg_cluster->setModel(m_pMsgModelCluster); - m_pMsgModelDebug = new QStandardItemModel(this); - ui->listView_msg_debug->setModel(m_pMsgModelDebug); m_pMsgModelDatabase = new QStandardItemModel(this); ui->listView_msg_database->setModel(m_pMsgModelDatabase); m_pMsgModelSmartlink = new QStandardItemModel(this); @@ -128,67 +139,39 @@ void ZPMainFrame::initUI() ui->comboBox_db_type->setModel(pCombo); } - -void ZPMainFrame::on_evt_Message(QObject * psource,const QString & strMsg) +void ZPMainFrame::on_evt_MessageNetwork(QObject * psource,const QString & strMsg) { QDateTime dtm = QDateTime::currentDateTime(); QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " " + strMsg; - if (strMsg.left(5)==QString("Debug")) - { - int nrows = m_pMsgModelDebug->rowCount(); - m_pMsgModelDebug->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelDebug->removeRow(m_pMsgModelDebug->rowCount()-1); - } - else - { - int nrows = m_pMsgModel->rowCount(); - m_pMsgModel->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModel->removeRow(m_pMsgModel->rowCount()-1); - } - + msg += tr(",Source=%1").arg((unsigned int)psource); + int nrows = m_pMsgModelNetwork->rowCount(); + m_pMsgModelNetwork->insertRow(0,new QStandardItem(msg)); + while (nrows-- > 4096) + m_pMsgModelNetwork->removeRow(m_pMsgModelNetwork->rowCount()-1); } void ZPMainFrame::on_evt_Message_Database(QObject * psource,const QString &strMsg) { QDateTime dtm = QDateTime::currentDateTime(); QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " " + strMsg; - if (strMsg.left(5)==QString("Debug")) - { - int nrows = m_pMsgModelDebug->rowCount(); - m_pMsgModelDebug->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelDebug->removeRow(m_pMsgModelDebug->rowCount()-1); - } - else - { - int nrows = m_pMsgModelDatabase->rowCount(); - m_pMsgModelDatabase->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelDatabase->removeRow(m_pMsgModelDatabase->rowCount()-1); - } - + msg += tr(",Source=%1").arg((unsigned int)psource); + int nrows = m_pMsgModelDatabase->rowCount(); + m_pMsgModelDatabase->insertRow(0,new QStandardItem(msg)); + while (nrows-- > 4096) + m_pMsgModelDatabase->removeRow(m_pMsgModelDatabase->rowCount()-1); } void ZPMainFrame::on_evt_Message_Smartlink(QObject * psource,const QString &strMsg) { QDateTime dtm = QDateTime::currentDateTime(); QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " " + strMsg; - if (strMsg.left(5)==QString("Debug")) - { - int nrows = m_pMsgModelDebug->rowCount(); - m_pMsgModelDebug->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelDebug->removeRow(m_pMsgModelDebug->rowCount()-1); - } - else - { - int nrows = m_pMsgModelSmartlink->rowCount(); - m_pMsgModelSmartlink->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelSmartlink->removeRow(m_pMsgModelSmartlink->rowCount()-1); - } + msg += tr(",Source=%1").arg((unsigned int)psource); + + int nrows = m_pMsgModelSmartlink->rowCount(); + m_pMsgModelSmartlink->insertRow(0,new QStandardItem(msg)); + while (nrows-- > 4096) + m_pMsgModelSmartlink->removeRow(m_pMsgModelSmartlink->rowCount()-1); + } //The socket error message @@ -197,10 +180,10 @@ void ZPMainFrame::on_evt_SocketError(QObject * senderSock ,QAbstractSocket::Soc 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_pMsgModelDebug->rowCount(); - m_pMsgModelDebug->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelDebug->removeRow(m_pMsgModelDebug->rowCount()-1); + int nrows = m_pMsgModelNetwork->rowCount(); + m_pMsgModelNetwork->insertRow(0,new QStandardItem(msg)); + while (nrows-- > 4096) + m_pMsgModelNetwork->removeRow(m_pMsgModelNetwork->rowCount()-1); } @@ -208,33 +191,23 @@ void ZPMainFrame::on_evt_Message_Cluster(QObject * psource,const QString & strM { QDateTime dtm = QDateTime::currentDateTime(); QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " " + strMsg; - if (strMsg.left(5)==QString("Debug")) - { - int nrows = m_pMsgModelDebug->rowCount(); - m_pMsgModelDebug->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelDebug->removeRow(m_pMsgModelDebug->rowCount()-1); - } - else - { - int nrows = m_pMsgModelCluster->rowCount(); - m_pMsgModelCluster->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelCluster->removeRow(m_pMsgModelCluster->rowCount()-1); - } - + msg += tr(",Source=%1").arg((unsigned int)psource); + int nrows = m_pMsgModelCluster->rowCount(); + m_pMsgModelCluster->insertRow(0,new QStandardItem(msg)); + while (nrows-- > 4096) + m_pMsgModelCluster->removeRow(m_pMsgModelCluster->rowCount()-1); } //The socket error message void ZPMainFrame::on_evt_SocketError_Cluster(QObject * senderSock ,QAbstractSocket::SocketError socketError) { QDateTime dtm = QDateTime::currentDateTime(); - QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " (Cluster)" + QString("SockError %1 with code %2") + 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_pMsgModelDebug->rowCount(); - m_pMsgModelDebug->insertRow(0,new QStandardItem(msg)); - while (nrows-- > 16384) - m_pMsgModelDebug->removeRow(m_pMsgModelDebug->rowCount()-1); + int nrows = m_pMsgModelCluster->rowCount(); + m_pMsgModelCluster->insertRow(0,new QStandardItem(msg)); + while (nrows-- > 4096) + m_pMsgModelCluster->removeRow(m_pMsgModelCluster->rowCount()-1); } @@ -449,8 +422,13 @@ void ZPMainFrame::forkServer(const QString & config_file) int nClusterWorkingThreads = settings.value("Cluster/nClusterWorkingThreads","4").toInt(); this->m_pClusterTerm->netEng()->RemoveAllAddresses(); this->m_pClusterTerm->netEng()->RemoveClientTransThreads(-1,false); - this->m_pClusterTerm->netEng()->AddClientTransThreads(nClusterTransThreads,false); this->m_pClusterTerm->taskEng()->removeThreads(-1); + while (m_pClusterTerm->netEng()->ListenerNames().size()) + { + QThread::currentThread()->msleep(200); + QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents); + } + this->m_pClusterTerm->netEng()->AddClientTransThreads(nClusterTransThreads,false); this->m_pClusterTerm->taskEng()->addThreads(nClusterWorkingThreads); this->m_pClusterTerm->setName(strClusterPubName); this->m_pClusterTerm->setPublishAddr(QHostAddress(strClusterPubAddr)); diff --git a/ZoomPipeline_FuncSvr/zpmainframe.h b/ZoomPipeline_FuncSvr/zpmainframe.h index fb9cbcdda68a7a4a365a01f7aa26e65ec7a31981..59fbe3072d14a3dcfe01606f5c62c4eb40c67900 100644 --- a/ZoomPipeline_FuncSvr/zpmainframe.h +++ b/ZoomPipeline_FuncSvr/zpmainframe.h @@ -22,13 +22,13 @@ public: explicit ZPMainFrame(QWidget *parent = 0); ~ZPMainFrame(); void timerEvent(QTimerEvent *); + protected: void changeEvent(QEvent *e); - QStandardItemModel * m_pMsgModel; + QStandardItemModel * m_pMsgModelNetwork; QStandardItemModel * m_pMsgModelCluster; QStandardItemModel * m_pMsgModelDatabase; QStandardItemModel * m_pMsgModelSmartlink; - QStandardItemModel * m_pMsgModelDebug; //Config File Name QString m_currentConffile; //Listeners settings @@ -57,7 +57,7 @@ private: void forkServer(const QString & config_file); protected slots: - void on_evt_Message(QObject * psource,const QString &); + void on_evt_MessageNetwork(QObject * psource,const QString &); //The socket error message void on_evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError); void on_evt_Message_Cluster(QObject * psource,const QString &); diff --git a/ZoomPipeline_FuncSvr/zpmainframe.ui b/ZoomPipeline_FuncSvr/zpmainframe.ui index be628733d7f6e8ccdaa64a0fa6bce4433afb96ce..5bfe01cc3c74b8ce890c54cb023ef16bed415c1a 100644 --- a/ZoomPipeline_FuncSvr/zpmainframe.ui +++ b/ZoomPipeline_FuncSvr/zpmainframe.ui @@ -938,20 +938,6 @@ - - - - :/icons/Resources/BackUp-4.png:/icons/Resources/BackUp-4.png - - - Debug - - - - - - -