Esempio n. 1
0
        void cmdStartServers_Click(object sender, EventArgs e)
        {
            if (CheckServerFields() && _kClient == null && _kTracker == null)
            {
                var ipa = IPAddress.Parse(cboPossibleAddresses.Text);
                int trackerPort, kcPort;
                trackerPort = Convert.ToInt32(txtTrackerServerPort.Text);
                kcPort      = Convert.ToInt32(txtKClientPort.Text);
                _kTracker   = new TrackerServer(new IPEndPoint(ipa, trackerPort));
                _kClient    = new KClient(_kTracker, new IPEndPoint(ipa, kcPort));

                _kTracker.Logger = this;
                _kClient.Logger  = this;

                _kTracker.Listen();
                _kClient.Listen();

                Log("启动完成。本地参数: KClient=" + cboPossibleAddresses.Text + ":" + kcPort.ToString() + ", KTracker=" + cboPossibleAddresses.Text + ":" + trackerPort.ToString());

                txtTrackerURL.Text = "http://localhost:" + txtTrackerServerPort.Text + _kTracker.AnnouceUrl.TrimEnd('?');
                txtLocalKClientAddrAndPort.Text = cboPossibleAddresses.Text + ":" + txtKClientPort.Text;

                groupBox1.Enabled = false;
                groupBox2.Enabled = true;
                groupBox4.Enabled = true;
            }
            else
            {
                Log("本地服务器设置错误。");
            }
        }
Esempio n. 2
0
 void cmdConnectToTargetKClient_Click(object sender, EventArgs e)
 {
     try
     {
         IPEndPoint ipep = KeiUtil.ParseIPEndPoint(cboTargetKClientEndPoint.Text);
         Thread     kcWorkerThread;
         for (var i = 0; i < 1; i++)
         {
             //Thread.Sleep(1500);
             WaitHandle wh;
             if (KeiGuiOptions.Current.IsPointInsertion)
             {
                 wh = _kClient.EnterNetwork(ipep, Convert.ToUInt16(txtLocalKClientPort.Text), out kcWorkerThread);
             }
             else
             {
                 // 普通用户
                 wh = _kClient.EnterNetwork(ipep, 0, out kcWorkerThread);
             }
             Thread thread = new Thread(delegate()
             {
                 Invoke(new Action(() =>
                 {
                     cmdConnectToTargetKClient.Enabled = false;
                 }));
                 TimeSpan passedTime = TimeSpan.Zero;
                 while (kcWorkerThread.IsAlive && !wh.SafeWaitHandle.IsClosed && passedTime < TimeSpan.FromSeconds(3))
                 {
                     wh.WaitOne(TimeSpan.FromMilliseconds(10));
                     passedTime += TimeSpan.FromMilliseconds(10);
                 }
                 if (_kClient.ConnectionList.Count > 0)
                 {
                     Invoke(new Action(() =>
                     {
                         if (!_kClient.IsActive)
                         {
                             // 普通用户此时启动
                             // 不过确实,想想,对于普通用户,如果是端口在从 TestBind() 到现在(即,点下“启动”按钮到点下“连接”按钮并成功)
                             // 这段时间内,该K客户端端口被占用了怎么办?这里就会直接异常,线程崩溃了……
                             _kClient.Listen();
                         }
                         cmdConnectToTargetKClient.Enabled = false;
                         groupBox2.Enabled = false;
                         KGState           = KeiGuiState.Connected;
                         if (!cboTargetKClientEndPoint.Items.Contains(cboTargetKClientEndPoint.Text))
                         {
                             cboTargetKClientEndPoint.Items.Add(cboTargetKClientEndPoint.Text);
                         }
                         SetStatusText("已经连接到 " + cboTargetKClientEndPoint.Text + ",开始工作 [" + _kClient.ConnectionList.Count.ToString() + "]");
                         mnuOpForceBroadcast.Enabled = true;
                         ctxForceBroadcast.Enabled   = true;
                     }));
                 }
                 else
                 {
                     Invoke(new Action(() =>
                     {
                         cmdConnectToTargetKClient.Enabled = true;
                         SetStatusText("未能连接到 " + cboTargetKClientEndPoint.Text);
                     }));
                 }
             });
             thread.IsBackground = true;
             thread.Start();
         }
     }
     catch (Exception ex)
     {
         Program.Logger.Log(ex.Message);
     }
 }