3.1 系統啟動
系統啟動方法StartReceiver()首先清理資源、創建數據庫連接、初始化若干計數值,然後創建服務器端偵聽Socket對象,最後調用靜態方法ThreadPool.QueueUserWorkItem()在線程池中創建3個核心處理線程。
/// <summary>
/// 啟動接收器
/// </summary>
public bool StartReceiver()
{
try
{
_stopReceiver = true;
this.Close();
if (!this.ConnectDatabase()) return false;
_clIEntCount = 0;
_datagramQueueCount = 0;
_datagramCount = 0;
_errorDatagramCount = 0;
_exceptionCount = 0;
_sessionTable = new Hashtable(_maxAllowClIEntCount);
_datagramQueue = new Queue<TDatagram>(_maxAllowDatagramQueueCount);
_stopReceiver = false; // 循環中均要該標志
if (!this.CreateReceiverSocket()) //建立服務器端 Socket 對象
{
return false;
}
// 偵聽客戶端連接請求線程, 使用委托推斷, 不建 CallBack 對象
if (!ThreadPool.QueueUserWorkItem(ListenClIEntRequest))
{
return false;
}
// 處理數據包隊列線程
if (!ThreadPool.QueueUserWorkItem(HandleDatagrams))
{
return false;
}
// 檢查客戶會話狀態, 長時間未通信則清除該對象
if (!ThreadPool.QueueUserWorkItem(CheckClIEntState))
{
return false;
}
_stopConnectRequest = false; // 啟動接收器,則自動允許連接
}
catch
{
this.OnReceiverException();
_stopReceiver = true;
}
return !_stopReceiver;
}