コード例 #1
0
        /// <summary>
        /// CAUTION: YOU MUST <see langword="await"/> <see cref="_InitTask"/> BEFORE USING THIS OBJECT!
        /// </summary>
        /// <param name="device"></param>
        /// <param name="connectResponse"></param>
        /// <param name="cryptoContext"></param>
        private SmartGlassClient(
            Device device,
            ConnectResponseMessage connectResponse,
            CryptoContext cryptoContext)
        {
            _messageTransport        = new MessageTransport(device.Address.ToString(), cryptoContext);
            _sessionMessageTransport = new SessionMessageTransport(
                _messageTransport,
                new SessionInfo()
            {
                ParticipantId = connectResponse.ParticipantId
            });
            _sessionMessageTransport.ProtocolTimeoutOccured += (_, e) => ProtocolTimeoutOccured?.Invoke(this, e);
            _sessionMessageTransport.MessageReceived        += (s, e) =>
            {
                if (e.Message is ConsoleStatusMessage consoleStatusMessage)
                {
                    CurrentConsoleStatus = new ConsoleStatus()
                    {
                        Configuration = consoleStatusMessage.Configuration,
                        ActiveTitles  = consoleStatusMessage.ActiveTitles
                    };

                    ConsoleStatusChanged?.Invoke(this, new ConsoleStatusChangedEventArgs(
                                                     CurrentConsoleStatus
                                                     ));
                }
            };

            _InitTask = InitializeAsync();
        }
コード例 #2
0
 public void StartHeartbeat()
 {
     Task.Run(async() =>
     {
         _lastReceived = DateTime.Now;
         while (!_cancellationTokenSource.IsCancellationRequested)
         {
             await SendMessageAckAsync(requestAck: true);
             await Task.Delay(_heartbeatInterval);
             if (DateTime.Now - _lastReceived > _heartbeatTimeout)
             {
                 ProtocolTimeoutOccured?.Invoke(this, new EventArgs());
                 break;
             }
         }
     }, _cancellationTokenSource.Token);
 }
コード例 #3
0
 public void StartHeartbeat()
 {
     Task.Run(() =>
     {
         while (!_cancellationTokenSource.IsCancellationRequested)
         {
             try
             {
                 SendHeartbeatAsync().GetAwaiter().GetResult();
             }
             catch (TimeoutException)
             {
                 ProtocolTimeoutOccured?.Invoke(this, new EventArgs());
                 break;
             }
             Task.Delay(TimeSpan.FromSeconds(_heartbeatTimeoutSeconds))
             .GetAwaiter().GetResult();
         }
     }, _cancellationTokenSource.Token);
 }