Пример #1
0
        /// <summary>
        /// 開始
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected override void ButtonF1_Click(object sender, EventArgs e)
        {
            Logger.StartMethod(MethodBase.GetCurrentMethod().Name);
            base.ButtonF1_Click(sender, e);
            // ▼▼▼ 業務処理 ▼▼▼

            if (TcpServerUtil != null)
            {
                // 既に接続している場合、再接続前に破棄する
                TcpServerUtil.Dispose();
            }

            // Listen
            string ip = tboxIP.Text;

            int.TryParse(tboxPort.Text, out int port);
            TcpServerUtil = new TcpServerManager(ip, port);

            listViewLog.Items.Add($"Listenを開始しました。IP[{ip}] Port[{port}]");

            // Task停止用のトークン発行
            CancelTokenSource = new CancellationTokenSource();
            CancellationToken cToken = CancelTokenSource.Token;

            // Accept Loop Start
            acceptLoopTask = AcceptLoop(cToken);

            // ボタンの有効無効を設定
            SetButtonEnabled(ActionMode.Listen);
            // ▲▲▲ 業務処理 ▲▲▲
            Logger.EndMethod(MethodBase.GetCurrentMethod().Name);
        }
Пример #2
0
        private async void FormTcpServer_FormClosing(object sender, FormClosingEventArgs e)
        {
            CancelTokenSource?.Cancel();

            // Lisner Stop And TcpClient Close
            TcpServerUtil?.Dispose();

            // Accept And Read Task Wait
            List <Task> waitTasks = new List <Task>();

            if (acceptLoopTask != null)
            {
                waitTasks.Add(acceptLoopTask);
            }
            foreach (TcpServerManager.ClientInfo mgr in dicTcpClient.Values)
            {
                waitTasks.Add(mgr.ReadTask);
            }
            await Task.WhenAll(waitTasks);

            // Logger Dispose
            Logger?.Dispose();
        }