private async void ClickConnect(object sender, EventArgs e) { bool success = false; try { if (connection != null && connection.IsConnected == false) { success = await connection.ConnectAsync(); } if (success == true) { MainLable.Text = "Connected"; } else { MainLable.Text = "Unable To Connect (Maybe u are already connected?)"; } //we want to start listen only if we are not already listening if (connection.IsConnected && !isListening) { await ListenOnDevice(); } } catch (Exception ex) { await DisplayAlert("Exception", ex.Message, "cancel"); } }
public async Task AutoConnect() { DateTime?beforeTrialTime = null; SendSystemInfo("接続しました", InfoType.Notice); while (true) { var disconnectReason = DisconnectReason.Unknown; if (await _connector.IsLivingAsync()) { beforeTrialTime = GetCurrentDateTime(); disconnectReason = await _connector.ConnectAsync(); } else { SendSystemInfo("配信が終了しました", InfoType.Notice); break; } if (disconnectReason == DisconnectReason.User) { SendSystemInfo("切断しました", InfoType.Notice); break; } if (disconnectReason == DisconnectReason.Finished) { SendSystemInfo("配信が終了しました", InfoType.Notice); break; } //再接続が、暴走しないようにインターバルを設ける。 if (beforeTrialTime.HasValue) { var elapsed = GetCurrentDateTime() - beforeTrialTime.Value; if (elapsed < new TimeSpan(0, 0, ReconnectionIntervalMinimamSec)) { var waitTime = new TimeSpan(0, 0, ReconnectionIntervalMinimamSec) - elapsed; await Task.Delay(waitTime); } } } }