public void onConnectionStateChange(int connectionState, string stateMessage)
 {
     if (OnConnectionStateChange != null)
     {
         OnConnectionStateChange.Invoke(connectionState, stateMessage);
     }
 }
Пример #2
0
 /// <summary>
 /// Сообщить об изменении состояния подключения к базе данных
 /// </summary>
 /// <param name="status">статус подключения к БД</param>
 public void CallConnectionStatus(StatusDataBase status)
 {
     Task.Run(() =>
     {
         OnConnectionStateChange?.Invoke(this, new ConnectionArgs(config, status));
     });
 }
Пример #3
0
 /// <summary>
 /// Did we loose connection?
 /// </summary>
 /// <returns></returns>
 internal bool LostConnection()
 {
     if (!_client.Connected)
     {
         OnConnectionStateChange?.Invoke(ConnectionStateChange.ConnectionLost);
         return(true);
     }
     return(false);
 }
Пример #4
0
        /// <summary>
        ///     Disconnects the client from the server
        /// </summary>
        public void Disconnect()
        {
            if (_client.Connected)
            {
                _nsReadTaskCancellationTokenSource.Cancel();
                _client.Client.Disconnect(false);
                OnConnectionStateChange?.Invoke(ConnectionStateChange.Disconnected);
            }

            _client.Close();
        }
Пример #5
0
 private static void ThreadSafeConnectionStateChange(bool connected)
 {
     if (MonitorForm != null && MonitorForm.InvokeRequired)
     {
         lock (_formUpdateLock)
             MonitorForm.Invoke(new ConnectionEventHandler(ThreadSafeConnectionStateChange), new object[] { connected });
     }
     else
     {
         OnConnectionStateChange?.Invoke(connected);
     }
 }
Пример #6
0
        /// <summary>
        ///     Connects to the specified RCON Server
        /// </summary>
        /// <param name="hostname">The hostname of the RCON Server</param>
        /// <param name="port">The port to connect to</param>
        public void Connect(string hostname, int port)
        {
            Log($"Connecting to {hostname}:{port}");
            try
            {
                IAsyncResult ar = null;
                try
                {
                    ar = _client.BeginConnect(hostname, port, null, null);
                }
                catch (ObjectDisposedException)
                {
                    _client = new TcpClient();
                    try
                    {
                        ar = _client.BeginConnect(hostname, port, null, null);
                    }
                    catch (Exception e)
                    {
                        Log($"Unknown/Unexpected exception:\n{e}");
                    }
                }
                ar.AsyncWaitHandle.WaitOne(2000); // wait 2 seconds
                if (!ar.IsCompleted)
                {
                    OnConnectionStateChange?.Invoke(ConnectionStateChange.NoConnection);
                    _client.Client.Close();
                }
            }
            catch (SocketException)
            {
                if (OnConnectionStateChange != null)
                {
                    OnConnectionStateChange(ConnectionStateChange.ConnectionTimeout);
                    _client.Client.Close();
                }
                return;
            }

            if (!_client.Connected)
            {
                return;
            }
            _ns = _client.GetStream();

            _sizeBuffer = new byte[4];
            _nsReadTaskCancellationTokenSource = new CancellationTokenSource();
            _ = ListenToNetworkStreamAsync(_nsReadTaskCancellationTokenSource.Token);

            Log("Connected.");
            OnConnectionStateChange?.Invoke(ConnectionStateChange.Connected);
        }
Пример #7
0
        internal async Task ListenToNetworkStreamAsync(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                try
                {
                    if (!await ReadFixedAmountAsync(_sizeBuffer, 0, 4, cancellationToken))
                    {
                        return;
                    }

                    int size   = BinaryReaderExt.ToInt32LittleEndian(_sizeBuffer);
                    var packet = new byte[size];

                    if (!await ReadFixedAmountAsync(packet, 0, size, cancellationToken))
                    {
                        return;
                    }

                    ParsePacket(size, packet);
                }
                catch (TimeoutException) { }
                catch (ObjectDisposedException)
                {
                    OnConnectionStateChange?.Invoke(ConnectionStateChange.ConnectionLost);
                    Disconnect();
                    return;
                }
                catch (IOException)
                {
                    OnConnectionStateChange?.Invoke(ConnectionStateChange.ConnectionLost);
                    Disconnect();
                    return;
                }
                catch (Exception e)
                {
                    Log(e.ToString());
                    return;
                }
            }
        }