Пример #1
0
        void ChangeStatus(TcpConnectionStatus newStatus)
        {
            if (status == newStatus)
            {
                return;
            }

            status = newStatus;

            logger.Info($"{nameof(TcpClient)} status changed to {newStatus}");

            configuration.SynchronizeSafe(() => {
                ClientStatusChangedEventArgs args = new ClientStatusChangedEventArgs(newStatus);
                try
                {
                    OnStatusChanged(args);
                }
                catch (Exception ex)
                {
                    Logger.Error($"Unhandled exception on {this.GetType().Name}.{nameof(OnStatusChanged)}: {ex}");
                }
                try
                {
                    OnStatusChangedEvent?.Invoke(args);
                }
                catch (Exception ex)
                {
                    Logger.Error($"Unhandled exception on {this.GetType().Name}.{nameof(OnStatusChangedEvent)}: {ex}");
                }
            }, logger);
        }
 protected virtual void OnTcpCient_ClientStatusChanged(object sender, ClientStatusChangedEventArgs args)
 {
     ClientStatus = args.Status;
     if (args.Status == ClientStatus.Closed)
     {
         CanConnect = true;
     }
 }
Пример #3
0
 protected override void OnTcpCient_ClientStatusChanged(object sender, ClientStatusChangedEventArgs args)
 {
     base.OnTcpCient_ClientStatusChanged(sender, args);
     if (args.Status == ClientStatus.Connected)
     {
         _tcpClient.JoinGroup("Manager");
     }
 }
 protected virtual void OnTcpServer_ClientStatusChanged(object sender, ClientStatusChangedEventArgs args)
 {
     if (args.Status == ClientStatus.Connected)
     {
         _serverClientID = args.ClientID;
     }
     else
     {
         _serverClientID = -1;
     }
 }
Пример #5
0
        private void _server_ClientStatusChanged(object sender, ClientStatusChangedEventArgs args)
        {
            if (!IsRunning)
            {
                return;
            }
            long proxyClientID = args.ClientID;

            if (args.Status == ClientStatus.Connected)
            {
                TcpClientEx tcpClient = new TcpClientEx(RawPacketSpliter.Default);
                tcpClient.Tag = proxyClientID;
                tcpClient.ClientStatusChanged += TcpClient_ClientStatusChanged;
                tcpClient.MessageReceived     += TcpClient_MessageReceived;
                Task.Factory.StartNew(() =>
                {
                    bool isConnected = tcpClient.Connect(RemoteIP, (ushort)RemotePort);
                    if (isConnected)
                    {
                        bool isOK = _clientDict.TryAdd(proxyClientID, tcpClient);
                        System.Diagnostics.Debug.Assert(isOK, "add new client failed");
                    }
                    else
                    {
                        _server.CloseClient(proxyClientID);
                    }
                    if (_waitConnDict.ContainsKey(proxyClientID))
                    {
                        _waitConnDict[proxyClientID].Set();
                    }
                });
            }
            else if (args.Status == ClientStatus.Closed)
            {
                if (_clientDict.TryRemove(proxyClientID, out TcpClientEx client))
                {
                    client.Close();
                }
            }
            ClientCount = _server.Clients.Count;
            if (ClientCountChanged != null)
            {
                ClientCountChangedEventArgs countChangedArgs = new ClientCountChangedEventArgs()
                {
                    NewCount = ClientCount
                };
                ClientCountChanged(this, countChangedArgs);
            }
        }
Пример #6
0
        private void _tcpServer_ClientStatusChanged(object sender, ClientStatusChangedEventArgs args)
        {
            string connStr = args.Status == ClientStatus.Connected ? "connected" : "disconnected";
            string logInfo = $"{args.IPEndPoint.ToString()} {connStr}\r\n";

            if (args.Status == ClientStatus.Closed)
            {
                _uploadFileHandler.CloseClient(args.ClientID);
            }
            this.Dispatcher.BeginInvoke((Action)(() =>
            {
                tbxLog.AppendText(logInfo);
                tbxLog.ScrollToEnd();
            }));
        }
        private void TcpClient_ClientStatusChanged(object sender, ClientStatusChangedEventArgs args)
        {
            if (!IsRunning)
            {
                return;
            }
            TcpClientEx clientEx      = sender as TcpClientEx;
            long        proxyClientID = (long)clientEx.Tag;

            if (args.Status == ClientStatus.Closed)
            {
                if (_clientDict.TryRemove(proxyClientID, out TcpClientEx client))
                {
                    _server.CloseClient(proxyClientID);
                }
            }
        }
Пример #8
0
 protected virtual void OnTcpCient_ClientStatusChanged(object sender, ClientStatusChangedEventArgs args)
 {
     ClientStatus = args.Status;
     if (args.Status == ClientStatus.Closed)
     {
         CanConnect = true;
     }
     if (args.Status == ClientStatus.Connected)
     {
         QueryServerTimeRequest request = new QueryServerTimeRequest()
         {
             Name    = "jackson",
             Message = ClientSendText
         };
         QueryServerTimeResponse response = _tcpClient.QueryAsync <QueryServerTimeResponse>(request).Result;
         ClientRecvText += "server time: " + response.ServerTime.ToString() + "\r\n";
     }
 }
Пример #9
0
 private void _tcpClient_ClientStatusChanged(object sender, ClientStatusChangedEventArgs args)
 {
     if (args.Status == SiS.Communication.ClientStatus.Closed)
     {
         btnConnect.IsEnabled  = true;
         btnConnect.Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#DDDDDD"));
     }
     else if (args.Status == SiS.Communication.ClientStatus.Connecting)
     {
         btnConnect.IsEnabled  = false;
         btnConnect.Background = new SolidColorBrush(Colors.Orange);
     }
     else if (args.Status == SiS.Communication.ClientStatus.Connected)
     {
         btnConnect.IsEnabled  = false;
         btnConnect.Background = new SolidColorBrush(Colors.Green);
         //join "chat" group after connected
         _tcpClient.JoinGroup("chat");
     }
 }
Пример #10
0
 protected virtual void OnStatusChanged(ClientStatusChangedEventArgs args)
 {
 }
Пример #11
0
 /// <summary>
 /// </summary>
 /// <param name="sender">
 /// </param>
 /// <param name="e">
 /// </param>
 private void messageServer_ClientConnected(object sender, ClientStatusChangedEventArgs e)
 {
     this.subscribers.Add(e.ClientId, new Subscriber());
 }
Пример #12
0
 /// <summary>
 /// </summary>
 /// <param name="sender">
 /// </param>
 /// <param name="e">
 /// </param>
 private void messageServer_ClientDisconnected(object sender, ClientStatusChangedEventArgs e)
 {
     this.subscribers.Remove(e.ClientId);
 }