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

Add an extra "quint64" field for ZPnetEngine on bool connectTo (const...

Add an  extra "quint64" field for ZPnetEngine on bool connectTo (const QHostAddress & address , quint16 nPort,bool bSSLConn, quint64 extraData);
When user call connectTo actively to a remote address, this extra data can be remembered by network engine.
Same extra data value will be taken along with socket handle when
on_connect, on_recieveded or on_sended, on_disconnect... is called.
This approach is well used in another project "dataProxy" in my git resp.
上级 3658b2de
......@@ -8,7 +8,7 @@ QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = $$OUT_PWD/../bin/FunctionalClientTest
TARGET = FunctionalClientTest
TEMPLATE = app
......
......@@ -7,7 +7,7 @@ QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = $$OUT_PWD/../bin/QTcpClientTest
TARGET = QTcpClientTest
TEMPLATE = app
# Input
HEADERS += qghtcpclient.h qtcpclienttest.h \
......
......@@ -9,7 +9,7 @@ unix:QMAKE_CXXFLAGS += -std=c++11
win32-g++: QMAKE_CXXFLAGS += -std=c++11
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = $$OUT_PWD/../bin/ZoomPipeline_FuncSvr
TARGET = ZoomPipeline_FuncSvr
TEMPLATE = app
......
......@@ -307,7 +307,7 @@ namespace ZP_Cluster{
//because cross-connection is not good, we just want the low Addr:port connect to max Addr:Port.
//Connect to New Servers
if (strName > m_pTerm->name())
emit evt_connect_to(addrToConnectTo,PortToConnectTo,false);
emit evt_connect_to(addrToConnectTo,PortToConnectTo,false,0);
else
emit evt_Message(this,tr("Name %1 <= %2, omitted.").arg(strName).arg(m_pTerm->name()));
}
......
......@@ -80,7 +80,7 @@ namespace ZP_Cluster{
signals:
void evt_SendDataToClient(QObject * objClient,QByteArray dtarray);
void evt_close_client(QObject * objClient);
void evt_connect_to(const QHostAddress & address , quint16 nPort,bool bSSLConn);
void evt_connect_to(const QHostAddress & address , quint16 nPort,bool bSSLConn, quint64);
void evt_Message (QObject * psource,QString );
//Notify Messages
......
......@@ -129,7 +129,7 @@ namespace ZP_Cluster{
}
bool zp_ClusterTerm::JoinCluster(const QHostAddress &addr, int nPort,bool bSSL)
{
return m_pClusterNet->connectTo(addr,nPort,bSSL);
return m_pClusterNet->connectTo(addr,nPort,bSSL,0);
}
bool zp_ClusterTerm::canExit()
{
......
......@@ -420,9 +420,11 @@ namespace ZPNetwork{
* @param address the address to connect to
* @param nPort port to connect to
* @param bSSLConn if true, SSL connections will be used
* @param extraData Extra data for users to remember extra imformation for this connection.this message will be
* given back when on_connect is called.
* @return bool
*/
bool zp_net_Engine::connectTo (const QHostAddress & address , quint16 nPort,bool bSSLConn)
bool zp_net_Engine::connectTo (const QHostAddress & address , quint16 nPort,bool bSSLConn, quint64 extraData)
{
bool res= false;
//m_mutex_trans.lock();
......@@ -453,7 +455,7 @@ namespace ZPNetwork{
if (nMinIdx>=0 && nMinIdx<nsz)
{
res = true;
emit evt_FireConnection(m_vec_NetTransThreads[nMinIdx],address,nPort);
emit evt_FireConnection(m_vec_NetTransThreads[nMinIdx],address,nPort,extraData);
}
else
{
......
......@@ -75,24 +75,24 @@ namespace ZPNetwork{
void evt_Message(QObject * pSource,QString );
//The socket error message
void evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError);
void evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError, quint64 extraData);
//this event indicates new client connected.
void evt_NewClientConnected(QObject * /*clientHandle*/);
void evt_NewClientConnected(QObject * /*clientHandle*/, quint64 extraData);
//SSL Connections OK
void evt_ClientEncrypted(QObject * client);
void evt_ClientEncrypted(QObject * client, quint64 extraData);
//this event indicates a client disconnected.
void evt_ClientDisconnected(QObject * /*clientHandle*/);
void evt_ClientDisconnected(QObject * /*clientHandle*/, quint64 extraData);
//some data arrival
void evt_Data_recieved(QObject * /*clientHandle*/,QByteArray /*datablock*/ );
void evt_Data_recieved(QObject * /*clientHandle*/,QByteArray /*datablock*/ , quint64 extraData);
//a block of data has been successfuly sent
void evt_Data_transferred(QObject * /*clientHandle*/,qint64 /*bytes sent*/);
void evt_Data_transferred(QObject * /*clientHandle*/,qint64 /*bytes sent*/, quint64 extraData);
//Internal Message for ctrl.------------------------------------
//Listen Control
void startListen(QString id);
void stopListen(QString id);
void evt_EstablishConnection(QObject * threadid,qintptr socketDescriptor);
void evt_FireConnection(QObject * threadid,const QHostAddress & hostAddr, quint16 port);
void evt_FireConnection(QObject * threadid,const QHostAddress & hostAddr, quint16 port, quint64 extraData);
//Trans Control,for intenal thread usage
void evt_SendDataToClient(QObject * objClient,QByteArray dtarray);
void evt_KickClient(QObject *);
......@@ -109,7 +109,7 @@ namespace ZPNetwork{
void KickClients(QObject * object);
//Possive Connection Methods
bool connectTo (const QHostAddress & address , quint16 nPort,bool bSSLConn);
bool connectTo (const QHostAddress & address , quint16 nPort,bool bSSLConn, quint64 extraData);
};
}
......
......@@ -130,6 +130,7 @@ namespace ZPNetwork{
while (m_rabish_can.size()>=RUBBISH_CAN_SIZE)
{
if (m_extraData.contains(m_rabish_can.first())) m_extraData.remove(m_rabish_can.first());
m_rabish_can.first()->deleteLater();
m_set_rabish.remove(m_rabish_can.first());
m_rabish_can.pop_front();
......@@ -161,6 +162,10 @@ namespace ZPNetwork{
#endif
if (sock_client)
{
quint64 extraData = 0;
if (m_extraData.contains(sock_client))
extraData = m_extraData[sock_client];
//Initial content
if (true ==sock_client->setSocketDescriptor(socketDescriptor))
{
......@@ -186,7 +191,7 @@ namespace ZPNetwork{
#endif
qDebug()<<sock_client->peerAddress().toString()<<
sock_client->peerPort() <<tr("(%1)..Accepted.").arg((quint64)sock_client);
emit evt_NewClientConnected(sock_client);
emit evt_NewClientConnected(sock_client,extraData);
//emit evt_Message(sock_client,"Info>" + QString(tr("Client Accepted.")));
}
else
......@@ -202,7 +207,7 @@ namespace ZPNetwork{
* @param addr address to which the socket should be connected.
* @param port port to which the socket should be connected.
*/
void zp_netTransThread::startConnection(QObject * threadid,const QHostAddress & addr, quint16 port)
void zp_netTransThread::startConnection(QObject * threadid,const QHostAddress & addr, quint16 port, quint64 extraData)
{
if (threadid!=this)
return;
......@@ -217,6 +222,7 @@ namespace ZPNetwork{
#endif
if (sock_client)
{
m_extraData[sock_client] = extraData;
#if (ZP_WANTSSL!=0)
if (m_bSSLConnection==true)
{
......@@ -270,7 +276,9 @@ namespace ZPNetwork{
void zp_netTransThread::on_connected()
{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(sender());
emit evt_NewClientConnected(pSock);
quint64 extraData = 0;
if (m_extraData.contains(pSock)) extraData = m_extraData[pSock];
emit evt_NewClientConnected(pSock,extraData);
emit evt_Message(pSock,"Info>" + QString(tr("Client connected.")));
qDebug()<<pSock->peerAddress().toString()<<
pSock->peerPort() <<tr("(%1)..connected.").arg((quint64)pSock);
......@@ -279,7 +287,9 @@ namespace ZPNetwork{
void zp_netTransThread::on_encrypted()
{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(sender());
emit evt_ClientEncrypted(pSock);
quint64 extraData = 0;
if (m_extraData.contains(pSock)) extraData = m_extraData[pSock];
emit evt_ClientEncrypted(pSock,extraData);
//emit evt_Message(pSock,"Info>" + QString(tr("Client Encrypted.")));
qDebug()<<pSock->peerAddress().toString()<<
pSock->peerPort() <<tr("(%1)..Encrypted.").arg((quint64)pSock);
......@@ -290,6 +300,9 @@ namespace ZPNetwork{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(sender());
if (pSock)
{
quint64 extraData = 0;
if (m_extraData.contains(pSock)) extraData = m_extraData[pSock];
#if (ZP_WANTSSL!=0)
if (m_bSSLConnection)
{
......@@ -310,7 +323,7 @@ namespace ZPNetwork{
m_clientList.remove(pSock);
m_mutex_protect.unlock();
//pSock->abort();
emit evt_ClientDisconnected(pSock);
emit evt_ClientDisconnected(pSock,extraData);
emit evt_Message(pSock,"Info>" + QString(tr("Client Closed.")));
qDebug()<<tr("(%1)..Closed.").arg((quint64)pSock);
push_to_rabish_can(pSock);
......@@ -321,13 +334,16 @@ namespace ZPNetwork{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(sender());
if (pSock)
{
quint64 extraData = 0;
if (m_extraData.contains(pSock)) extraData = m_extraData[pSock];
QByteArray array = pSock->readAll();
int sz = array.size();
g_mutex_sta.lock();
g_bytesRecieved +=sz;
g_secRecieved += sz;
g_mutex_sta.unlock();
emit evt_Data_recieved(pSock,array);
emit evt_Data_recieved(pSock,array,extraData);
}
}
/**
......@@ -346,7 +362,10 @@ namespace ZPNetwork{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(sender());
if (pSock)
{
emit evt_Data_transferred(pSock,wsended);
quint64 extraData = 0;
if (m_extraData.contains(pSock)) extraData = m_extraData[pSock];
emit evt_Data_transferred(pSock,wsended,extraData);
QList<QByteArray> & list_sock_data = m_buffer_sending[pSock];
QList<qint64> & list_offset = m_buffer_sending_offset[pSock];
while (list_sock_data.empty()==false)
......@@ -372,9 +391,12 @@ namespace ZPNetwork{
QTcpSocket * pSock = qobject_cast<QTcpSocket*>(sender());
if (pSock)
{
quint64 extraData = 0;
if (m_extraData.contains(pSock)) extraData = m_extraData[pSock];
qDebug()<<pSock->peerAddress().toString()<<
pSock->peerPort() <<tr("(%1)..Error :%2.").arg((quint64)pSock).arg(pSock->errorString());
emit evt_SocketError(pSock,socketError);
emit evt_SocketError(pSock,socketError,extraData);
#if (ZP_WANTSSL!=0)
if (m_bSSLConnection)
{
......@@ -394,7 +416,7 @@ namespace ZPNetwork{
m_clientList.remove(pSock);
m_mutex_protect.unlock();
pSock->abort();
emit evt_ClientDisconnected(pSock);
emit evt_ClientDisconnected(pSock,extraData);
emit evt_Message(pSock,"Info>" + QString(tr("Client Error, Closed.")));
//pSock->disconnectFromHost();
push_to_rabish_can(pSock);
......
......@@ -53,12 +53,14 @@ namespace ZPNetwork{
QList<QObject *> m_rabish_can;
QSet<QObject *> m_set_rabish;
QMutex m_mutex_rabish_can;
//Extra Data
QHash<QObject *, quint64> m_extraData;
void push_to_rabish_can(QObject * deletedobj);
public slots:
//This slot dealing with multi-thread client socket accept.
void incomingConnection(QObject * threadid,qintptr socketDescriptor);
//This slot dealing with possive connecting-to method.
void startConnection(QObject * threadid,const QHostAddress & addr, quint16 port);
void startConnection(QObject * threadid,const QHostAddress & addr, quint16 port, quint64 extraData);
//sending dtarray to objClient. dtarray will be pushed into m_buffer_sending
void SendDataToClient(QObject * objClient,QByteArray dtarray);
//Set terminate mark, the thread will quit after last client quit.
......@@ -82,12 +84,12 @@ namespace ZPNetwork{
void on_encrypted();
signals:
void evt_Message(QObject * psource,QString );
void evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError);
void evt_NewClientConnected(QObject * client);
void evt_ClientEncrypted(QObject * client);
void evt_ClientDisconnected(QObject * client);
void evt_Data_recieved(QObject * ,QByteArray );
void evt_Data_transferred(QObject * client,qint64);
void evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError, quint64 extraData);
void evt_NewClientConnected(QObject * client, quint64 extraData);
void evt_ClientEncrypted(QObject * client, quint64 extraData);
void evt_ClientDisconnected(QObject * client, quint64 extraData);
void evt_Data_recieved(QObject * ,QByteArray , quint64 extraData);
void evt_Data_transferred(QObject * client,qint64, quint64 extraData);
};
}
#endif // ZP_NETTRANSTHREAD_H
......@@ -2,4 +2,3 @@ TEMPLATE = subdirs
SUBDIRS += QTcpClientTest
SUBDIRS += FunctionalClientTest
SUBDIRS += ZoomPipeline_FuncSvr
OTHER_FILES += .gitignore
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册