public void onConnectionStateChange(int connectionState, string stateMessage) { if (OnConnectionStateChange != null) { OnConnectionStateChange.Invoke(connectionState, stateMessage); } }
/// <summary> /// Сообщить об изменении состояния подключения к базе данных /// </summary> /// <param name="status">статус подключения к БД</param> public void CallConnectionStatus(StatusDataBase status) { Task.Run(() => { OnConnectionStateChange?.Invoke(this, new ConnectionArgs(config, status)); }); }
/// <summary> /// Did we loose connection? /// </summary> /// <returns></returns> internal bool LostConnection() { if (!_client.Connected) { OnConnectionStateChange?.Invoke(ConnectionStateChange.ConnectionLost); return(true); } return(false); }
/// <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(); }
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); } }
/// <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); }
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; } } }