Exemple #1
0
        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);
                    }
                }
            }
        }