zp_nettransthread.h 2.4 KB
Newer Older
丁劲犇's avatar
丁劲犇 已提交
1 2 3 4 5 6 7 8
#ifndef ZP_NETTRANSTHREAD_H
#define ZP_NETTRANSTHREAD_H

#include <QObject>
#include <QMap>
#include <QList>
#include <QAbstractSocket>
#include <QMutex>
9
namespace ZPNetwork{
丁劲犇's avatar
丁劲犇 已提交
10 11 12 13 14 15
	class zp_net_ThreadPool;
	class zp_netTransThread : public QObject
	{
		Q_OBJECT
	public:
		explicit zp_netTransThread(zp_net_ThreadPool * pThreadPool,int nPayLoad = 4096,QObject *parent = 0);
丁劲犇's avatar
丁劲犇 已提交
16

丁劲犇's avatar
丁劲犇 已提交
17 18 19 20
		QList <QObject *> clientsList();
		int CurrentClients();
		void SetPayload(int nPayload);
		bool isActive(){return m_bActivated;}
丁劲犇's avatar
丁劲犇 已提交
21

丁劲犇's avatar
丁劲犇 已提交
22 23 24
		bool CanExit();
		bool SSLConnection(){return m_bSSLConnection ;}
		void SetSSLConnection(bool bssl){ m_bSSLConnection = bssl;}
丁劲犇's avatar
丁劲犇 已提交
25

丁劲犇's avatar
丁劲犇 已提交
26 27 28 29 30
	private:
		bool m_bActivated;
		bool m_bSSLConnection;
		//sending buffer, hold byteArraies.
		QMap<QObject *,QList<QByteArray> > m_buffer_sending;
丁劲犇's avatar
丁劲犇 已提交
31

丁劲犇's avatar
丁劲犇 已提交
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
		QMap<QObject *,QList<qint64> > m_buffer_sending_offset;
		QMap<QObject*,int> m_clientList;
		int m_nPayLoad;
		QMutex m_mutex_protect;
		zp_net_ThreadPool * m_pThreadPool;
	public slots:
		//This slot dealing with multi-thread client socket accept.
		void incomingConnection(QObject * threadid,qintptr socketDescriptor);
		//This slot dealing with possive connect to method.
		void startConnection(QObject * threadid,const QHostAddress & addr, quint16 port);
		//sending dtarray to objClient. dtarray will be pushed into m_buffer_sending
		void SendDataToClient(QObject * objClient,const QByteArray &  dtarray);
		//Broadcast dtarray to every client except objFromClient itself
		void BroadcastData(QObject * objFromClient,const QByteArray &  dtarray);
		//Set terminate mark, the thread will quit after last client quit.
		void Deactivate(){m_bActivated = false;}
		//terminate this thread immediately
		void DeactivateImmediately(zp_netTransThread *);
		//Kick all clients .
		void KickAllClients(zp_netTransThread *);
		//Kick client.
		void KickClient(QObject *);
54

丁劲犇's avatar
丁劲犇 已提交
55 56 57 58 59 60 61 62 63
	protected slots:
		//when client closed, this slot will be activated.
		void client_closed();
		void new_data_recieved();
		void some_data_sended(qint64);
		void displayError(QAbstractSocket::SocketError socketError);
		//SSL Encrypted started
		void on_encrypted();
	signals:
丁劲犇's avatar
丁劲犇 已提交
64

丁劲犇's avatar
丁劲犇 已提交
65 66 67 68 69 70
		void evt_SocketError(QObject * senderSock ,QAbstractSocket::SocketError socketError);
		void evt_NewClientConnected(QObject * client);
		void evt_ClientDisconnected(QObject * client);
		void evt_Data_recieved(QObject * ,const QByteArray &  );
		void evt_Data_transferred(QObject * client,qint64);
	};
71
}
丁劲犇's avatar
丁劲犇 已提交
72
#endif // ZP_NETTRANSTHREAD_H