예제 #1
0
 /// <summary>
 /// DisConnect
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected override void ButtonF2_Click(object sender, EventArgs e)
 {
     base.ButtonF2_Click(sender, e);
     // ▼▼▼ 業務処理 ▼▼▼
     ReadCancelTokenSource.Cancel();
     TcpClientUtil.Dispose();
     TcpClientUtil = null;
     SetControlEnabled(ActionMode.Init);
     // ▲▲▲ 業務処理 ▲▲▲
 }
예제 #2
0
        private async void CloseTcpClient()
        {
            // TCP破棄
            TcpClientUtil?.Dispose();
            TcpClientUtil = null;

            // キャンセル
            ReadCancelTokenSource.Cancel();

            // 受信スレッド終了待ち
            await readLoopTask;

            readLoopTask?.Dispose();
            readLoopTask = null;
        }
예제 #3
0
        /// <summary>
        /// Connect
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected override void ButtonF1_Click(object sender, EventArgs e)
        {
            Logger.WriteLine(MethodBase.GetCurrentMethod().Name);

            base.ButtonF1_Click(sender, e);
            // ▼▼▼ 業務処理 ▼▼▼

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

            // 接続
            string ip = tboxIP.Text;

            int.TryParse(tboxPort.Text, out int port);

            try
            {
                TcpClientUtil = new TcpClientManager(ip, port);

                listViewLog.Items.Add($"接続しました。{TcpClientUtil.GetClientIpAndPort()}->{TcpClientUtil.GetServerIpAndPort()}");

                // 名前を送信
                string            name = tboxName.Text;
                TcpMessageUtility mgr  = new TcpMessageUtility(TcpMessageUtility.HeaderConnect, name, TcpMessageUtility.TargetAll, name);
                TcpClientUtil.Send(mgr.GetSendMessage());
            }
            catch (SocketException ex)
            {
                Debug.WriteLine(ex.ToString());
                listViewLog.Items.Add(ex.Message);
                return;
            }

            // 読み込みループ開始
            // Task停止用のトークン発行
            ReadCancelTokenSource = new CancellationTokenSource();
            CancellationToken cToken = ReadCancelTokenSource.Token;

            readLoopTask = ReadLoop(cToken);
            readLoopTask.ConfigureAwait(false);

            // ボタンの有効無効を設定
            SetControlEnabled(ActionMode.Connect);
            // ▲▲▲ 業務処理 ▲▲▲
        }