/** * @brief ServerThreadFuction * @param[in] none * @return void * @note TcpServerスレッド処理 */ void ServerThreadFuction() { while (true) { Thread.Sleep(1); if (stopReqFlag == true) // 終了要求時 { // 各Client停止要求後 allClientEndProc(); break; } if (server.Pending() == true) // true:Clientが接続してきた { try { ServerSideTcpClient srvSideClient = new ServerSideTcpClient(); srvSideClient.setTcpClient(server.AcceptTcpClient()); // Accept待ち clients.Add(srvSideClient); // Clinetリストに追加 srvSideClient.startProc(); // Clientとの通信用スレッド起動 } catch (System.IO.IOException ioerr) // 切断検知 { Console.WriteLine(ioerr.Message); allClientEndProc(); } } // 終了した ServerSideTcpClient クラス解放 clientArrayMemberClear(); } }
/** * @brief allClientEndProc * @param[in] none * @return void * @note 接続している全Client切断、Client処理スレッド終了依頼 */ void allClientEndProc() { for (int i = clients.Count - 1; i >= 0; i--) { ServerSideTcpClient srvSideClient = (ServerSideTcpClient)clients[i]; clients.Remove(clients[i]); // 要素の削除 srvSideClient.endProc(); // Clientとの通信処理スレッド終了待ち srvSideClient.Dispose(); // Clientとの通信処理クラス破棄 } }
/** * @brief clientArrayMemberClear * @param[in] none * @return void * @note Client保持 ArraList から 切断したClient破棄 */ void clientArrayMemberClear() { for (int i = clients.Count - 1; i >= 0; i--) { ServerSideTcpClient srvSideClient = (ServerSideTcpClient)clients[i]; if (srvSideClient.getEndFlag() == true) { clients.Remove(clients[i]); // 要素の削除 srvSideClient.Dispose(); } } }