提交 45feefce 编写于 作者: 丁劲犇's avatar 丁劲犇 😸

A lot of improvement

上级 9f8a5e5f
......@@ -35,6 +35,7 @@ namespace ZP_Cluster{
unsigned __int16 data_length;
unsigned __int8 data[1];
} plainData;
} payload;
} CROSS_SVR_MSG;
......
......@@ -8,9 +8,11 @@ namespace ZP_Cluster{
m_pClusterNet = new ZPNetwork::zp_net_ThreadPool(8192,this);
connect(m_pClusterNet,&ZPNetwork::zp_net_ThreadPool::evt_Message, this,&zp_ClusterTerm::evt_Message);
connect(m_pClusterNet,&ZPNetwork::zp_net_ThreadPool::evt_SocketError, this,&zp_ClusterTerm::evt_SocketError);
connect(m_pClusterNet,&ZPNetwork::zp_net_ThreadPool::evt_Data_recieved, this,&zp_ClusterTerm::on_evt_Data_recieved);
connect(m_pClusterNet,&ZPNetwork::zp_net_ThreadPool::evt_Data_transferred, this,&zp_ClusterTerm::on_evt_Data_transferred);
connect(m_pClusterNet,&ZPNetwork::zp_net_ThreadPool::evt_ClientDisconnected, this,&zp_ClusterTerm::on_evt_ClientDisconnected);
connect(m_pClusterNet,&ZPNetwork::zp_net_ThreadPool::evt_NewClientConnected, this,&zp_ClusterTerm::on_evt_NewClientConnected);
//connect(m_pClusterNet,&ZPNetwork::zp_net_ThreadPool::evt_ClientEncrypted, this,&zp_ClusterTerm::on_evt_ClientEncrypted);
m_nPortPublish = 0;
}
......
......@@ -34,8 +34,8 @@ namespace ZP_Cluster{
ZPNetwork::zp_net_ThreadPool * m_pClusterNet;
ZPTaskEngine::zp_pipeline * m_pClusterEng;
signals:
//These Message is nessery.-------------------------------------
void evt_Message(const QString &);
void evt_Message(QObject * ,const QString &);
//The socket error message
void evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError);
protected slots:
......
......@@ -24,8 +24,8 @@ namespace ZPDatabase{
QMutexLocker locker(&m_mutex_reg);
if (false==QSqlDatabase::contains(strDBName))
{
QString msg = tr(" Connection name ")+strDBName+ tr(" does not exist.");
emit evt_Message(msg);
QString msg = "Database:"+tr(" Connection name ")+strDBName+ tr(" does not exist.");
emit evt_Message(this,msg);
return QSqlDatabase();
}
return QSqlDatabase::database(strDBName);
......@@ -52,14 +52,14 @@ namespace ZPDatabase{
if (db.isOpen()==true)
db.close();
QSqlDatabase::removeDatabase(strDBName);
QString msg = tr(" Connection removed ")+strDBName+ tr(" .");
emit evt_Message(msg);
QString msg = "Database:"+tr(" Connection removed ")+strDBName+ tr(" .");
emit evt_Message(this,msg);
}
else
{
QString msg = tr(" Connection name ")+strDBName+ tr(" does not exist.");
emit evt_Message(msg);
QString msg = "Database:"+tr(" Connection name ")+strDBName+ tr(" does not exist.");
emit evt_Message(this,msg);
}
m_dbNames.remove(strDBName) ;
......@@ -111,8 +111,8 @@ namespace ZPDatabase{
if (db.isOpen()==true)
db.close();
QSqlDatabase::removeDatabase(connName);
QString msg = tr(" Connection removed ")+connName+ tr(" .");
emit evt_Message(msg);
QString msg = "Database:"+tr(" Connection removed ")+connName+ tr(" .");
emit evt_Message(this,msg);
}
m_dbNames[connName] = para;
......@@ -125,13 +125,13 @@ namespace ZPDatabase{
db.setConnectOptions(ExtraOptions);
if (db.open()==true)
{
QString msg = tr(" Connection ")+connName+ tr(" Established.");
emit evt_Message(msg);
QString msg ="Database:"+ tr(" Connection ")+connName+ tr(" Established.");
emit evt_Message(this,msg);
return true;
}
QString msg = tr(" Connection ")+connName+ tr(" Can't be opened. MSG=");
QString msg = "Database:"+tr(" Connection ")+connName+ tr(" Can't be opened. MSG=");
msg += db.lastError().text();
emit evt_Message(msg);
emit evt_Message(this,msg);
QSqlDatabase::removeDatabase(connName);
m_dbNames.remove(connName) ;
return false;
......@@ -149,8 +149,8 @@ namespace ZPDatabase{
QMutexLocker locker(&m_mutex_reg);
if (false==m_dbNames.contains(connName))
{
QString msg = tr(" Connection ")+connName+ tr(" has not been added.");
emit evt_Message(msg);
QString msg = "Database:"+tr(" Connection ")+connName+ tr(" has not been added.");
emit evt_Message(this,msg);
return false;
}
tagConnectionPara & para = m_dbNames[connName];
......@@ -166,9 +166,9 @@ namespace ZPDatabase{
query.exec(para.testSQL);
if (query.lastError().type()!=QSqlError::NoError)
{
QString msg = tr(" Connection ")+connName+ tr(" confirm failed. MSG=");
QString msg = "Database:"+tr(" Connection ")+connName+ tr(" confirm failed. MSG=");
msg += query.lastError().text();
emit evt_Message(msg);
emit evt_Message(this,msg);
bNeedDisconnect = true;
}
}
......@@ -181,8 +181,8 @@ namespace ZPDatabase{
else
return true;
}
QString msg = tr(" Connection ")+connName+ tr(" has not been opened.");
emit evt_Message(msg);
QString msg = "Database:"+tr(" Connection ")+connName+ tr(" has not been opened.");
emit evt_Message(this,msg);
db = QSqlDatabase::addDatabase(para.type,para.connName);
db.setHostName(para.HostAddr);
db.setPort(para.port);
......@@ -194,14 +194,14 @@ namespace ZPDatabase{
{
para.status = true;
para.lastError = "";
msg = tr(" Connection ")+connName+ tr(" Re-Established.");
emit evt_Message(msg);
msg = "Database:"+tr(" Connection ")+connName+ tr(" Re-Established.");
emit evt_Message(this,msg);
return true;
}
QSqlDatabase::removeDatabase(connName);
msg = tr(" Connection ")+connName+ tr(" Can't be opened. MSG=");
msg ="Database:"+ tr(" Connection ")+connName+ tr(" Can't be opened. MSG=");
msg += db.lastError().text();
emit evt_Message(msg);
emit evt_Message(this,msg);
para.status = false;
para.lastError = db.lastError().text();
return false;
......@@ -218,13 +218,13 @@ namespace ZPDatabase{
{
para.status = true;
para.lastError = "";
QString msg = tr(" Connection ")+connName+ tr(" Re-Established.");
emit evt_Message(msg);
QString msg ="Database:"+ tr(" Connection ")+connName+ tr(" Re-Established.");
emit evt_Message(this,msg);
return true;
}
QString msg = tr(" Connection ")+connName+ tr(" Can't be opened. MSG=");
QString msg ="Database:"+ tr(" Connection ")+connName+ tr(" Can't be opened. MSG=");
msg += db.lastError().text();
emit evt_Message(msg);
emit evt_Message(this,msg);
QSqlDatabase::removeDatabase(connName);
para.status = false;
para.lastError = db.lastError().text();
......
......@@ -68,7 +68,7 @@ namespace ZPDatabase{
QMutex m_mutex_reg;
QMap <QString,tagConnectionPara> m_dbNames;
signals:
void evt_Message(const QString &);
void evt_Message(QObject *,const QString &);
public slots:
};
......
#include "zp_net_threadpool.h"
#include <QCoreApplication>
#include <QStringList>
#include <QTcpSocket>
#include <QSslSocket>
namespace ZPNetwork{
/**
* @brief Construct a net thread pool object.
......@@ -80,6 +82,33 @@ 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<QTcpSocket *>(pSock);
QTcpSocket * pSocketSSL = qobject_cast<QSslSocket *>(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.
......@@ -113,7 +142,7 @@ namespace ZPNetwork{
emit startListen(id);
}
else
emit evt_Message("Warning>"+QString(tr("This ID has been used.")));
emit evt_Message(this,"Warning>"+QString(tr("This ID has been used.")));
}
/**
......@@ -153,11 +182,11 @@ namespace ZPNetwork{
zp_netListenThread * pSource = qobject_cast<zp_netListenThread *>(sender());
if (!pSource)
{
emit evt_Message("Waring>"+QString(tr("Non-zp_netListenThread type detected.")));
emit evt_Message(this,"Warning>"+QString(tr("Non-zp_netListenThread type detected.")));
return;
}
emit evt_Message("Info>"+QString(tr("New Client Arriverd.")));
emit evt_Message(this,"Info>" + QString(tr("Incomming client arriverd.")));
//m_mutex_trans.lock();
int nsz = m_vec_NetTransThreads.size();
int nMinPay = 0x7fffffff;
......@@ -178,15 +207,15 @@ namespace ZPNetwork{
}
//qDebug()<<i<<" "<<nPat<<" "<<nMinIdx;
}
for (int i=0;i<nsz;i++)
if (m_vec_NetTransThreads[i]->isActive()==false )
TransThreadDel(m_vec_NetTransThreads[i]);
// for (int i=0;i<nsz;i++)
// if (m_vec_NetTransThreads[i]->isActive()==false )
// TransThreadDel(m_vec_NetTransThreads[i]);
if (nMinIdx>=0 && nMinIdx<nsz)
emit evt_EstablishConnection(m_vec_NetTransThreads[nMinIdx],socketDescriptor);
else
{
emit evt_Message("Waring>"+QString(tr("Need Trans Thread Object for clients.")));
emit evt_Message(this,"Warning>"+QString(tr("Need Trans Thread Object for clients.")));
}
//m_mutex_trans.unlock();
}
......@@ -214,6 +243,7 @@ namespace ZPNetwork{
disconnect(pListenObj,&zp_netListenThread::evt_NewClientArrived,this,&zp_net_ThreadPool::on_New_Arrived_Client);
pListenObj->deleteLater();
pThread->quit();
pThread->wait();
pThread->deleteLater();
}
......@@ -248,6 +278,7 @@ namespace ZPNetwork{
connect (clientTH,&zp_netTransThread::evt_NewClientConnected,this,&zp_net_ThreadPool::evt_NewClientConnected,Qt::QueuedConnection);
connect (clientTH,&zp_netTransThread::evt_ClientEncrypted,this,&zp_net_ThreadPool::evt_ClientEncrypted,Qt::QueuedConnection);
connect (clientTH,&zp_netTransThread::evt_SocketError,this,&zp_net_ThreadPool::evt_SocketError,Qt::QueuedConnection);
connect (clientTH,&zp_netTransThread::evt_Message,this,&zp_net_ThreadPool::evt_Message,Qt::QueuedConnection);
connect (this,&zp_net_ThreadPool::evt_EstablishConnection,clientTH,&zp_netTransThread::incomingConnection,Qt::QueuedConnection);
connect (this,&zp_net_ThreadPool::evt_FireConnection,clientTH,&zp_netTransThread::startConnection,Qt::QueuedConnection);
connect (this,&zp_net_ThreadPool::evt_BroadcastData,clientTH,&zp_netTransThread::BroadcastData,Qt::QueuedConnection);
......@@ -287,6 +318,7 @@ namespace ZPNetwork{
disconnect (clientTH,&zp_netTransThread::evt_NewClientConnected,this,&zp_net_ThreadPool::evt_NewClientConnected);
disconnect (clientTH,&zp_netTransThread::evt_ClientEncrypted,this,&zp_net_ThreadPool::evt_ClientEncrypted);
disconnect (clientTH,&zp_netTransThread::evt_SocketError,this,&zp_net_ThreadPool::evt_SocketError);
disconnect (clientTH,&zp_netTransThread::evt_Message,this,&zp_net_ThreadPool::evt_Message);
disconnect (this,&zp_net_ThreadPool::evt_EstablishConnection,clientTH,&zp_netTransThread::incomingConnection);
disconnect (this,&zp_net_ThreadPool::evt_FireConnection,clientTH,&zp_netTransThread::startConnection);
disconnect (this,&zp_net_ThreadPool::evt_BroadcastData,clientTH,&zp_netTransThread::BroadcastData);
......@@ -294,7 +326,9 @@ namespace ZPNetwork{
disconnect (this,&zp_net_ThreadPool::evt_KickAll,clientTH,&zp_netTransThread::KickAllClients);
disconnect (this,&zp_net_ThreadPool::evt_DeactivteImmediately,clientTH,&zp_netTransThread::DeactivateImmediately);
disconnect (this,&zp_net_ThreadPool::evt_KickClient,clientTH,&zp_netTransThread::KickClient);
m_vec_netInternalTransThreads[idx]->quit();
m_vec_netInternalTransThreads[idx]->wait();
m_vec_netInternalTransThreads[idx]->deleteLater();
m_vec_NetTransThreads[idx]->deleteLater();
m_vec_netInternalTransThreads.remove(idx);
......@@ -354,6 +388,8 @@ namespace ZPNetwork{
nCount ++;
}
}
//Fire TransThreadDel Immediately
this->CanExit();
//m_mutex_trans.unlock();
}
......@@ -447,9 +483,9 @@ namespace ZPNetwork{
}
//qDebug()<<i<<" "<<nPat<<" "<<nMinIdx;
}
for (int i=0;i<nsz;i++)
if (m_vec_NetTransThreads[i]->isActive()==false )
TransThreadDel(m_vec_NetTransThreads[i]);
// for (int i=0;i<nsz;i++)
// if (m_vec_NetTransThreads[i]->isActive()==false )
// TransThreadDel(m_vec_NetTransThreads[i]);
if (nMinIdx>=0 && nMinIdx<nsz)
{
......@@ -458,7 +494,7 @@ namespace ZPNetwork{
}
else
{
emit evt_Message("Waring>"+QString(tr("Need Trans Thread Object for clients.")));
emit evt_Message(this,"Warning>"+QString(tr("Need Trans Thread Object for clients.")));
}
//m_mutex_trans.unlock();
return res;
......
......@@ -28,6 +28,9 @@ namespace ZPNetwork{
public:
explicit zp_net_ThreadPool(int nPayLoad = 4096,QObject *parent = 0);
// Dump errmessage
static QString GenSockMsg(QObject * pSock);
//Listening Ctrl
//Begin a listening socket at special address and port. The socket will be activated as soon as possible
void AddListeningAddress(const QString & id,const QHostAddress & address , quint16 nPort,bool bSSLConn = true);
......@@ -72,8 +75,8 @@ namespace ZPNetwork{
QVector<QThread *> m_vec_netInternalTransThreads;
bool TransThreadDel(zp_netTransThread * pThreadObj);
signals:
//These Message is nessery.-------------------------------------
void evt_Message(const QString &);
void evt_Message(QObject * pSource,const QString &);
//The socket error message
void evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError);
//this event indicates new client connected.
......
......@@ -31,7 +31,7 @@ namespace ZPNetwork{
if (false==m_tcpServer->listen(m_address,m_port))
{
disconnect (m_tcpServer,&ZP_TcpServer::evt_NewClientArrived,this,&zp_netListenThread::evt_NewClientArrived);
emit evt_Message("Error>"+QString(tr("Can not start listen!")));
emit evt_Message(this,"Error>"+QString(tr("Can not start listen!")));
m_tcpServer->deleteLater();
m_tcpServer = 0;
//Close this thread.
......@@ -57,7 +57,7 @@ namespace ZPNetwork{
m_tcpServer->deleteLater();
m_tcpServer = 0;
//Close this thread.
emit evt_Message("Info>"+QString(tr("Listen Closed!")));
emit evt_Message(this,"Info>"+QString(tr("Listen Closed!")));
emit evt_ListenClosed(m_id);
}
}
......
......@@ -27,7 +27,7 @@ namespace ZPNetwork{
explicit zp_netListenThread(const QString & id, QHostAddress address ,quint16 port,bool bSSL = true,QObject *parent = 0);
bool bSSLConn(){return m_bSSLConn;}
signals:
void evt_Message(const QString &);
void evt_Message(QObject *,const QString &);
void evt_ListenClosed(const QString &);
//This message will tell thread pool, a new incoming connection has arrived.
void evt_NewClientArrived(qintptr socketDescriptor);
......
......@@ -5,6 +5,7 @@
#include <QDebug>
#include <QCoreApplication>
#include <QHostAddress>
#include "zp_net_threadpool.h"
namespace ZPNetwork{
zp_netTransThread::zp_netTransThread(zp_net_ThreadPool *pThreadPool,int nPayLoad,QObject *parent) :
QObject(parent)
......@@ -111,6 +112,7 @@ namespace ZPNetwork{
psslsock->startServerEncryption();
}
emit evt_NewClientConnected(sock_client);
emit evt_Message(sock_client,"Info>" + QString(tr("Client Accepted.")));
}
else
sock_client->deleteLater();
......@@ -151,7 +153,7 @@ namespace ZPNetwork{
connect(sock_client, &QTcpSocket::connected,this, &zp_netTransThread::on_connected,Qt::QueuedConnection);
connect(psslsock, &QSslSocket::encrypted,this, &zp_netTransThread::on_encrypted,Qt::QueuedConnection);
m_mutex_protect.lock();
m_clientList[sock_client] = 0;
m_clientList[sock_client] = 1;
m_mutex_protect.unlock();
psslsock->connectToHostEncrypted(addr.toString(),port);
......@@ -164,7 +166,7 @@ namespace ZPNetwork{
connect(sock_client, &QTcpSocket::bytesWritten, this,&zp_netTransThread::some_data_sended,Qt::QueuedConnection);
connect(sock_client, &QTcpSocket::connected,this, &zp_netTransThread::on_connected,Qt::QueuedConnection);
m_mutex_protect.lock();
m_clientList[sock_client] = 0;
m_clientList[sock_client] = 1;
m_mutex_protect.unlock();
sock_client->connectToHost(addr,port);
......@@ -177,12 +179,14 @@ namespace ZPNetwork{
{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(sender());
emit evt_NewClientConnected(pSock);
emit evt_Message(pSock,"Info>" + QString(tr("Client connected.")));
}
void zp_netTransThread::on_encrypted()
{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(sender());
emit evt_ClientEncrypted(pSock);
emit evt_Message(pSock,"Info>" + QString(tr("Client Encrypted.")));
}
void zp_netTransThread::client_closed()
......@@ -200,6 +204,8 @@ namespace ZPNetwork{
disconnect(pSock, &QTcpSocket::disconnected,this,&zp_netTransThread::client_closed);
disconnect(pSock, SIGNAL(error(QAbstractSocket::SocketError)),this, SLOT(displayError(QAbstractSocket::SocketError)));
disconnect(pSock, &QTcpSocket::bytesWritten, this, &zp_netTransThread::some_data_sended);
disconnect(pSock, &QTcpSocket::connected,this, &zp_netTransThread::on_connected);
m_buffer_sending.remove(pSock);
m_buffer_sending_offset.remove(pSock);
m_mutex_protect.lock();
......@@ -207,6 +213,7 @@ namespace ZPNetwork{
m_mutex_protect.unlock();
pSock->deleteLater();
emit evt_ClientDisconnected(pSock);
emit evt_Message(pSock,"Info>" + QString(tr("Client Closed.")));
}
}
void zp_netTransThread::new_data_recieved()
......@@ -254,21 +261,21 @@ namespace ZPNetwork{
if (pSock)
{
emit evt_SocketError(pSock,socketError);
qDebug()<<(pSock->errorString());
emit evt_Message(pSock,"Debug:" + pSock->errorString());
pSock->abort();
}
}
void zp_netTransThread::SendDataToClient(QObject * objClient,const QByteArray & dtarray)
{
// m_mutex_protect.lock();
// if (m_clientList.find(objClient)==m_clientList.end())
if (objClient->parent()!=this)//this approach is very effective
m_mutex_protect.lock();
if (m_clientList.find(objClient)==m_clientList.end())
// if (objClient->parent()!=this)//this approach is very effective, but can cause memory problems
{
// m_mutex_protect.unlock();
m_mutex_protect.unlock();
return;
}
// m_mutex_protect.unlock();
m_mutex_protect.unlock();
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(objClient);
if (pSock&&dtarray.size())
{
......@@ -325,32 +332,35 @@ namespace ZPNetwork{
return;
m_mutex_protect.lock();
QList<QObject *> clientList = m_clientList.keys();
m_mutex_protect.unlock();
foreach(QObject * obj,clientList)
{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(obj);
if (pSock)
{
if (m_clientList[pSock]==0)
pSock->abort();
}
else
pSock->disconnectFromHost();
}
m_mutex_protect.unlock();
}
void zp_netTransThread::KickClient(QObject * objClient)
{
// m_mutex_protect.lock();
// if (m_clientList.find(objClient)==m_clientList.end())
if (objClient->parent()!=this)//this approach is very effective
m_mutex_protect.lock();
if (m_clientList.find(objClient)==m_clientList.end())
// if (objClient->parent()!=this)//this approach is very effective, but will cause memory crush .
{
// m_mutex_protect.unlock();
m_mutex_protect.unlock();
return;
}
// m_mutex_protect.unlock();
m_mutex_protect.unlock();
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(objClient);
if (pSock)
{
pSock->abort();
if (m_clientList[objClient]==0)
pSock->abort();
else
pSock->disconnectFromHost();
}
}
......
......@@ -38,6 +38,7 @@ namespace ZPNetwork{
QMap<QObject *,QList<QByteArray> > m_buffer_sending;
QMap<QObject *,QList<qint64> > m_buffer_sending_offset;
//The socket and the connection-direction, 0 is passive, 1 is postive.
QMap<QObject*,int> m_clientList;
int m_nPayLoad;
QMutex m_mutex_protect;
......@@ -71,7 +72,7 @@ namespace ZPNetwork{
//SSL Encrypted started
void on_encrypted();
signals:
void evt_Message(QObject * psource,const QString &);
void evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError);
void evt_NewClientConnected(QObject * client);
void evt_ClientEncrypted(QObject * client);
......
......@@ -61,7 +61,7 @@ namespace SmartLink{
signals:
void evt_Message (const QString &);
void evt_Message (QObject * psource,const QString &);
public slots:
//this event indicates new client connected.
......
......@@ -116,7 +116,7 @@ namespace SmartLink{
else
{
//strcpy(reply.TextInfo,"Server Access Error.");
emit evt_Message(tr("Database Access Error :")+query.lastError().text());
emit evt_Message(this,tr("Database Access Error :")+query.lastError().text());
}
}
else
......@@ -232,7 +232,7 @@ namespace SmartLink{
else
{
//strcpy(reply.TextInfo,"Server Access Error.");
emit evt_Message(tr("Database Access Error :")+query.lastError().text());
emit evt_Message(this,tr("Database Access Error :")+query.lastError().text());
}
}
else
......@@ -351,7 +351,7 @@ namespace SmartLink{
else
{
//strcpy(reply.TextInfo,"Server Access Error.");
emit evt_Message(tr("Database Access Error :")+query.lastError().text());
emit evt_Message(this,tr("Database Access Error :")+query.lastError().text());
}
}
else
......@@ -430,7 +430,7 @@ namespace SmartLink{
+ sizeof (quint32) * (pAppLayer->MsgUnion.msg_UploadUserListReq.UserNum)
)
{
emit evt_Message(tr("Broken Message stMsg_UploadUserListReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_UploadUserListReq, size not correct."));
return false;
}
......
......@@ -27,7 +27,7 @@ namespace SmartLink{
sql += "equip_id from relations where user_id = ?;";
else
{
emit evt_Message(tr("try to save relations before login!"));
emit evt_Message(this,tr("try to save relations before login!"));
return false;
}
QSqlQuery query(db);
......@@ -35,7 +35,7 @@ namespace SmartLink{
query.addBindValue((quint32)m_uuid);
if (false== query.exec())
{
emit evt_Message(tr("try to get relations Failed! ")+ query.lastError().text());
emit evt_Message(this,tr("try to get relations Failed! ")+ query.lastError().text());
return false;
}
......@@ -50,7 +50,7 @@ namespace SmartLink{
else
{
//Server db is currently not accessable, wait.
emit evt_Message("Server Not Accessable Now.");
emit evt_Message(this,"Server Not Accessable Now.");
}
return false;
}
......@@ -69,7 +69,7 @@ namespace SmartLink{
query.addBindValue((quint32)m_uuid);
if (false== query.exec())
{
emit evt_Message(tr("try to del old relations Failed! ")+ query.lastError().text());
emit evt_Message(this,tr("try to del old relations Failed! ")+ query.lastError().text());
return false;
}
}
......@@ -81,13 +81,13 @@ namespace SmartLink{
query.addBindValue((quint32)m_uuid);
if (false== query.exec())
{
emit evt_Message(tr("try to del old relations Failed! ")+ query.lastError().text());
emit evt_Message(this,tr("try to del old relations Failed! ")+ query.lastError().text());
return false;
}
}
else
{
emit evt_Message(tr("try to save relations before login!"));
emit evt_Message(this,tr("try to save relations before login!"));
return false;
}
......@@ -116,7 +116,7 @@ namespace SmartLink{
}
if (false== query.exec())
{
emit evt_Message(tr("try to insert new relations Failed! ")+ query.lastError().text());
emit evt_Message(this,tr("try to insert new relations Failed! ")+ query.lastError().text());
return false;
}
}
......@@ -125,7 +125,7 @@ namespace SmartLink{
else
{
//Server db is currently not accessable, wait.
emit evt_Message("Server Not Accessable Now.");
emit evt_Message(this,"Server Not Accessable Now.");
}
return false;
}
......@@ -135,7 +135,7 @@ namespace SmartLink{
{
//then , Start deal to-server messages
//Server - deal messages
emit evt_Message("Debug:" + m_currentBlock.toHex());
emit evt_Message(this,"Debug:" + m_currentBlock.toHex());
if (m_currentHeader.destin_id==0x00000001)
{
if (this->m_bLoggedIn==false || this->m_bUUIDRecieved==false)
......@@ -144,7 +144,7 @@ namespace SmartLink{
if (false==Deal_ToServer_Handshakes())
{
m_currentBlock = QByteArray();
emit evt_Message(tr("To-server Message Failed."));
emit evt_Message(this,tr("To-server Message Failed."));
emit evt_close_client(this->sock());
}
}
......@@ -156,7 +156,7 @@ namespace SmartLink{
if (false==Deal_Node2Svr_Msgs())
{
m_currentBlock = QByteArray();
emit evt_Message(tr("Box To Server Message Failed."));
emit evt_Message(this,tr("Box To Server Message Failed."));
emit evt_close_client(this->sock());
}
}
......@@ -166,20 +166,20 @@ namespace SmartLink{
if (false==Deal_Node2Svr_Msgs())
{
m_currentBlock = QByteArray();
emit evt_Message(tr("Client To Server Message Failed."));
emit evt_Message(this,tr("Client To Server Message Failed."));
emit evt_close_client(this->sock());
}
}
else if (m_currentHeader.source_id==0xFFFFFFFF)
{
m_currentBlock = QByteArray();
emit evt_Message(tr("warning, UUID 0xFFFFFFFF.ignore"));
emit evt_Message(this,tr("warning, UUID 0xFFFFFFFF.ignore"));
}
else
{
m_currentBlock = QByteArray();
emit evt_Message(tr("Bad UUID %1. Client Kicked out").arg(m_currentHeader.source_id));
emit evt_Message(this,tr("Bad UUID %1. Client Kicked out").arg(m_currentHeader.source_id));
emit evt_close_client(this->sock());
}
}
......@@ -190,14 +190,14 @@ namespace SmartLink{
{
//need furture works.
//Do Nothing
emit evt_Message(tr("Broadcast Message is not currently supported."));
emit evt_Message(this,tr("Broadcast Message is not currently supported."));
m_currentBlock = QByteArray();
}
else if (m_currentHeader.destin_id==0xFFFFFFFD)
{
//need furture works.
//Do Nothing
emit evt_Message(tr("Broadcast Message is not currently supported."));
emit evt_Message(this,tr("Broadcast Message is not currently supported."));
m_currentBlock = QByteArray();
}
else
......@@ -209,7 +209,7 @@ namespace SmartLink{
//need further dev, insert into db, or catched on disk.
//destin client is un-reachable, or in another function server.
//need server-to-server channels to re-post this message.
emit evt_Message(tr("Destin ID ") + QString("%1").arg(m_currentHeader.destin_id) + tr(" is not currently logged in."));
emit evt_Message(this,tr("Destin ID ") + QString("%1").arg(m_currentHeader.destin_id) + tr(" is not currently logged in."));
//Do Nothing
}
......@@ -247,12 +247,12 @@ namespace SmartLink{
);
if (m_current_app_header.header.MsgFmtVersion!=0x01)
{
emit evt_Message(tr("Application Layer Version too new."));
emit evt_Message(this,tr("Application Layer Version too new."));
emit evt_close_client(this->sock());
return false;
}
//do
qDebug()<<m_current_app_header.header.MsgType<<"\n";
//qDebug()<<m_current_app_header.header.MsgType<<"\n";
switch (m_current_app_header.header.MsgType)
{
case 0x1000:
......@@ -264,7 +264,7 @@ namespace SmartLink{
+ sizeof (SMARTLINK_MSG_APP::tag_app_layer_header)
+ sizeof (stMsg_HostRegistReq)+64)
{
emit evt_Message(tr("Broken Message stMsg_HostRegistReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_HostRegistReq, size not correct."));
res = false;
}
else
......@@ -279,7 +279,7 @@ namespace SmartLink{
+ sizeof (SMARTLINK_MSG_APP::tag_app_layer_header)
+ sizeof (stMsg_HostLogonReq)+64)
{
emit evt_Message(tr("Broken Message stMsg_HostLogonReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_HostLogonReq, size not correct."));
res = false;
}
else
......@@ -294,14 +294,14 @@ namespace SmartLink{
+ sizeof (SMARTLINK_MSG_APP::tag_app_layer_header)
+ sizeof (stMsg_ClientLoginReq)+66)
{
emit evt_Message(tr("Broken Message stMsg_ClientLoginReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_ClientLoginReq, size not correct."));
res = false;
}
else
res = this->LoginClient();
break;
default:
emit evt_Message(tr("Message type not supported."));
emit evt_Message(this,tr("Message type not supported."));
res = false;
break;
}
......@@ -332,7 +332,7 @@ namespace SmartLink{
);
if (m_current_app_header.header.MsgFmtVersion!=0x01)
{
emit evt_Message(tr("Application Layer Version too new."));
emit evt_Message(this,tr("Application Layer Version too new."));
emit evt_close_client(this->sock());
return false;
}
......@@ -348,7 +348,7 @@ namespace SmartLink{
+ sizeof (SMARTLINK_MSG_APP::tag_app_layer_header)
/*+ sizeof (stMsg_HostTimeCorrectReq)*/)
{
emit evt_Message(tr("Broken Message stMsg_HostRegistReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_HostRegistReq, size not correct."));
res = false;
}
else
......@@ -363,7 +363,7 @@ namespace SmartLink{
+ sizeof (SMARTLINK_MSG_APP::tag_app_layer_header)
+ sizeof (stMsg_UploadUserListReq) - sizeof(quint32))
{
emit evt_Message(tr("Broken Message stMsg_UploadUserListReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_UploadUserListReq, size not correct."));
res = false;
}
else
......@@ -378,7 +378,7 @@ namespace SmartLink{
+ sizeof (SMARTLINK_MSG_APP::tag_app_layer_header)
/*+ sizeof (stMsg_DownloadUserListReq)*/)
{
emit evt_Message(tr("Broken Message stMsg_DownloadUserListReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_DownloadUserListReq, size not correct."));
res = false;
}
else
......@@ -393,7 +393,7 @@ namespace SmartLink{
+ sizeof (SMARTLINK_MSG_APP::tag_app_layer_header)
+ sizeof (stMsg_ClientLogoutReq))
{
emit evt_Message(tr("Broken Message stMsg_ClientLogoutReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_ClientLogoutReq, size not correct."));
res = false;
}
else
......@@ -408,14 +408,14 @@ namespace SmartLink{
+ sizeof (SMARTLINK_MSG_APP::tag_app_layer_header)
/*+ sizeof (stMsg_GetHostListReq)*/)
{
emit evt_Message(tr("Broken Message stMsg_GetHostListReq, size not correct."));
emit evt_Message(this,tr("Broken Message stMsg_GetHostListReq, size not correct."));
res = false;
}
else
res = this->GetHostList();
break;
default:
emit evt_Message(tr("Message type not supported."));
emit evt_Message(this,tr("Message type not supported."));
res = false;
break;
}
......
......@@ -176,7 +176,7 @@ namespace SmartLink{
} //end deal trans message
else
{
emit evt_Message(tr("Client Send a unknown start Header %1 %2. Close client immediately.")
emit evt_Message(this,tr("Client Send a unknown start Header %1 %2. Close client immediately.")
.arg((int)(ptrCurrData[0])).arg((int)(ptrCurrData[1])));
m_currentMessageSize = 0;
m_currentBlock = QByteArray();
......@@ -213,7 +213,7 @@ namespace SmartLink{
}
else //Invalid
{
emit evt_Message(tr("Client ID is invalid! Close client immediatly."));
emit evt_Message(this,tr("Client ID is invalid! Close client immediatly."));
m_currentBlock = QByteArray();
emit evt_close_client(this->sock());
}
......@@ -227,7 +227,7 @@ namespace SmartLink{
(m_currentHeader.source_id==0xffffffff)
))
{
emit evt_Message(tr("Client ID is invalid! Close client immediatly."));
emit evt_Message(this,tr("Client ID is invalid! Close client immediatly."));
m_currentBlock = QByteArray();
emit evt_close_client(this->sock());
}
......@@ -242,7 +242,7 @@ namespace SmartLink{
qint64 usc = this->m_last_Report.secsTo(dtm);
if (usc >=m_pClientTable->heartBeatingThrd())
{
emit evt_Message(tr("Client ") + QString("%1").arg((unsigned int)((quint64)this)) + tr(" is dead, kick out."));
emit evt_Message(this,tr("Client ") + QString("%1").arg((unsigned int)((quint64)this)) + tr(" is dead, kick out."));
emit evt_close_client(this->sock());
}
}
......
......@@ -79,7 +79,7 @@ namespace SmartLink{
void evt_SendDataToClient(QObject * objClient,const QByteArray & dtarray);
void evt_BroadcastData(QObject * objFromClient,const QByteArray & dtarray);
void evt_close_client(QObject * objClient);
void evt_Message (const QString &);
void evt_Message (QObject * psource,const QString &);
};
}
......
......@@ -32,7 +32,7 @@ ZPMainFrame::ZPMainFrame(QWidget *parent) :
//Create databases
m_pDatabases = new ZPDatabase::DatabaseResource(this);
connect (m_pDatabases,&ZPDatabase::DatabaseResource::evt_Message,this,&ZPMainFrame::on_evt_Message);
connect (m_pDatabases,&ZPDatabase::DatabaseResource::evt_Message,this,&ZPMainFrame::on_evt_Message_Database);
m_pDatabases->start();
//Create Smartlink client table
......@@ -40,7 +40,7 @@ ZPMainFrame::ZPMainFrame(QWidget *parent) :
m_taskEngine,
m_pDatabases,
this);
connect (m_clientTable,&SmartLink::st_client_table::evt_Message,this,&ZPMainFrame::on_evt_Message);
connect (m_clientTable,&SmartLink::st_client_table::evt_Message,this,&ZPMainFrame::on_evt_Message_Smartlink);
m_nTimerId = startTimer(2000);
......@@ -92,7 +92,14 @@ void ZPMainFrame::initUI()
//Message Shown model
m_pMsgModel = new QStandardItemModel(this);
ui->listView_msg->setModel(m_pMsgModel);
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);
ui->listView_msg_smartlink->setModel(m_pMsgModelSmartlink);
//Network listeners setting model
m_pListenerModel = new QStandardItemModel(0,4,this);
m_pListenerModel->setHeaderData(0,Qt::Horizontal,tr("Name"));
......@@ -121,15 +128,67 @@ void ZPMainFrame::initUI()
ui->comboBox_db_type->setModel(pCombo);
}
//These Message is nessery.-------------------------------------
void ZPMainFrame::on_evt_Message(const QString & strMsg)
void ZPMainFrame::on_evt_Message(QObject * psource,const QString & strMsg)
{
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);
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);
}
}
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);
}
}
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);
}
}
//The socket error message
......@@ -138,21 +197,32 @@ 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_pMsgModel->rowCount();
m_pMsgModel->insertRow(0,new QStandardItem(msg));
int nrows = m_pMsgModelDebug->rowCount();
m_pMsgModelDebug->insertRow(0,new QStandardItem(msg));
while (nrows-- > 16384)
m_pMsgModel->removeRow(m_pMsgModel->rowCount()-1);
m_pMsgModelDebug->removeRow(m_pMsgModelDebug->rowCount()-1);
}
//These Message is nessery.-------------------------------------
void ZPMainFrame::on_evt_Message_Cluster(const QString & strMsg)
void ZPMainFrame::on_evt_Message_Cluster(QObject * psource,const QString & strMsg)
{
QDateTime dtm = QDateTime::currentDateTime();
QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " (Cluster)" + strMsg;
int nrows = m_pMsgModel->rowCount();
m_pMsgModel->insertRow(0,new QStandardItem(msg));
while (nrows-- > 16384)
m_pMsgModel->removeRow(m_pMsgModel->rowCount()-1);
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);
}
}
//The socket error message
......@@ -161,10 +231,10 @@ void ZPMainFrame::on_evt_SocketError_Cluster(QObject * senderSock ,QAbstractSoc
QDateTime dtm = QDateTime::currentDateTime();
QString msg = dtm.toString("yyyy-MM-dd HH:mm:ss.zzz") + " (Cluster)" + QString("SockError %1 with code %2")
.arg((quint64)senderSock).arg((quint32)socketError);
int nrows = m_pMsgModel->rowCount();
m_pMsgModel->insertRow(0,new QStandardItem(msg));
int nrows = m_pMsgModelDebug->rowCount();
m_pMsgModelDebug->insertRow(0,new QStandardItem(msg));
while (nrows-- > 16384)
m_pMsgModel->removeRow(m_pMsgModel->rowCount()-1);
m_pMsgModelDebug->removeRow(m_pMsgModelDebug->rowCount()-1);
}
......
......@@ -25,7 +25,10 @@ public:
protected:
void changeEvent(QEvent *e);
QStandardItemModel * m_pMsgModel;
QStandardItemModel * m_pMsgModelCluster;
QStandardItemModel * m_pMsgModelDatabase;
QStandardItemModel * m_pMsgModelSmartlink;
QStandardItemModel * m_pMsgModelDebug;
//Config File Name
QString m_currentConffile;
//Listeners settings
......@@ -53,12 +56,13 @@ private:
void SaveSettings(const QString & config_file);
void forkServer(const QString & config_file);
protected slots:
//These Message is nessery.-------------------------------------
void on_evt_Message(const QString &);
void on_evt_Message(QObject * psource,const QString &);
//The socket error message
void on_evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError);
//These Message is nessery.-------------------------------------
void on_evt_Message_Cluster(const QString &);
void on_evt_Message_Cluster(QObject * psource,const QString &);
void on_evt_Message_Database(QObject * psource,const QString &);
void on_evt_Message_Smartlink(QObject * psource,const QString &);
//The socket error message
void on_evt_SocketError_Cluster(QObject * senderSock ,QAbstractSocket::SocketError socketError);
public slots:
......
......@@ -870,9 +870,89 @@
<attribute name="title">
<string>Messages</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<layout class="QHBoxLayout" name="horizontalLayout_18">
<item>
<widget class="QListView" name="listView_msg"/>
<widget class="QTabWidget" name="tabWidget_msgs">
<property name="tabPosition">
<enum>QTabWidget::South</enum>
</property>
<property name="tabShape">
<enum>QTabWidget::Triangular</enum>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_msg_nodes">
<attribute name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icons/Resources/019-1.png</normaloff>:/icons/Resources/019-1.png</iconset>
</attribute>
<attribute name="title">
<string>Nodes</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QListView" name="listView_msg"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_msg_db">
<attribute name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icons/Resources/Backup drive.png</normaloff>:/icons/Resources/Backup drive.png</iconset>
</attribute>
<attribute name="title">
<string>Database</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QListView" name="listView_msg_database"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_msg_cluster">
<attribute name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icons/Resources/hanukkah_03.png</normaloff>:/icons/Resources/hanukkah_03.png</iconset>
</attribute>
<attribute name="title">
<string>Cluster</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_19">
<item>
<widget class="QListView" name="listView_msg_cluster"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_msg_smartlink">
<attribute name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icons/Resources/+_Sign_Alt.png</normaloff>:/icons/Resources/+_Sign_Alt.png</iconset>
</attribute>
<attribute name="title">
<string>Smartlink</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_8">
<item>
<widget class="QListView" name="listView_msg_smartlink"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_msg_debug">
<attribute name="icon">
<iconset resource="resource.qrc">
<normaloff>:/icons/Resources/BackUp-4.png</normaloff>:/icons/Resources/BackUp-4.png</iconset>
</attribute>
<attribute name="title">
<string>Debug</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_20">
<item>
<widget class="QListView" name="listView_msg_debug"/>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册