zp_netlistenthread.cpp 1.9 KB
Newer Older
丁劲犇's avatar
丁劲犇 已提交
1
#include "zp_netlistenthread.h"
2
namespace ZPNetwork{
3
	zp_netListenThread::zp_netListenThread(QString  id, QHostAddress address ,quint16 port,bool bSSL,QObject *parent)
丁劲犇's avatar
丁劲犇 已提交
4 5 6 7 8 9 10
		:QObject(parent)
		,m_tcpServer(0)
		,m_id(id)
		,m_address(address)
		,m_port(port)
		,m_bSSLConn (bSSL)
	{
丁劲犇's avatar
丁劲犇 已提交
11

丁劲犇's avatar
丁劲犇 已提交
12
	}
13 14 15 16 17 18

	bool zp_netListenThread::bSSLConn()
	{
		return m_bSSLConn;
	}

19 20
	/**
	 * @brief The slot recieves startListen command from its parent
21
	 * zp_net_Engine object. the Qt's signal-and-slots system
22 23 24 25
	 * likes a broadcast system, so, a string id should be used to
	 * tell each listening zp_netListenThread, only this id should be
	 * notified.
	 *
26
	 * @param id the Listening ID that zp_net_Engine really
27 28
	 * want to operate.
	 */
29
	void zp_netListenThread::startListen(QString  id)
丁劲犇's avatar
丁劲犇 已提交
30 31 32 33 34 35 36 37 38 39
	{
		if (id==m_id)
		{
			if (!m_tcpServer)
			{
				m_tcpServer = new ZP_TcpServer(this);
				connect (m_tcpServer,&ZP_TcpServer::evt_NewClientArrived,this,&zp_netListenThread::evt_NewClientArrived,Qt::QueuedConnection);
				if (false==m_tcpServer->listen(m_address,m_port))
				{
					disconnect (m_tcpServer,&ZP_TcpServer::evt_NewClientArrived,this,&zp_netListenThread::evt_NewClientArrived);
丁劲犇's avatar
丁劲犇 已提交
40
					emit evt_Message(this,"Error>"+QString(tr("Can not start listen!")));
丁劲犇's avatar
丁劲犇 已提交
41 42 43 44 45 46 47 48
					m_tcpServer->deleteLater();
					m_tcpServer = 0;
					//Close this thread.
					emit evt_ListenClosed(m_id);
				}
			}
		}
	}
丁劲犇's avatar
丁劲犇 已提交
49

50
	/**
51
	 * @brief this method is very similar to zp_netListenThread::startListen(QString  id)
52
	 *
53
	 * @param id the Listening ID that zp_net_Engine really want to operate.
54
	 */
55
	void zp_netListenThread::stopListen(QString  id)
丁劲犇's avatar
丁劲犇 已提交
56 57 58 59 60 61 62 63 64 65
	{
		if (id==m_id)
		{
			if (m_tcpServer)
			{
				disconnect (m_tcpServer,&ZP_TcpServer::evt_NewClientArrived,this,&zp_netListenThread::evt_NewClientArrived);
				m_tcpServer->close();
				m_tcpServer->deleteLater();
				m_tcpServer = 0;
				//Close this thread.
丁劲犇's avatar
丁劲犇 已提交
66
				emit evt_Message(this,"Info>"+QString(tr("Listen Closed!")));
丁劲犇's avatar
丁劲犇 已提交
67 68 69 70
				emit evt_ListenClosed(m_id);
			}
		}
	}
71
}