示例#1
0
        public static string LocalizedString(this DeviceConnectionStatus deviceConnectionStatus)
        {
            switch (deviceConnectionStatus)
            {
            case DeviceConnectionStatus.BluetoothError:
                return(Translations.Language.Enum_DeviceConnectionStatus_BluetoothError);

            case DeviceConnectionStatus.Connected:
                return(Translations.Language.Enum_DeviceConnectionStatus_Connected);

            case DeviceConnectionStatus.Disconnected:
                return(Translations.Language.Enum_DeviceConnectionStatus_Disconnected);

            case DeviceConnectionStatus.Disconnecting:
                return(Translations.Language.Enum_DeviceConnectionStatus_Disconnecting);

            case DeviceConnectionStatus.Failed: return(Translations.Language.Enum_DeviceConnectionStatus_Failed);

            case DeviceConnectionStatus.Connecting:
                return(Translations.Language.Enum_DeviceConnectionStatus_Connecting);

            case DeviceConnectionStatus.USBError: return(Translations.Language.Enum_DeviceConnectionStatus_USBError);

            case DeviceConnectionStatus.CommunicationError:
                return(Translations.Language.Enum_DeviceConnectionStatus_CommunicationError);

            case DeviceConnectionStatus.Unknown: return(Translations.Language.Enum_DeviceConnectionStatus_Unknown);

            default: throw new ArgumentOutOfRangeException("deviceConnectionStatus");
            }
        }
示例#2
0
 /// <summary>
 /// Sends the connection status back to the caller
 /// </summary>
 /// <param name="status">Status of the connect attempt.</param>
 /// <param name="phase">Current phase of the connection attempt.</param>
 /// <param name="message">Optional message describing the connection status.</param>
 private void SendConnectionStatus(
     DeviceConnectionStatus status,
     DeviceConnectionPhase phase,
     string message = "")
 {
     this.ConnectionStatus?.Invoke(this, new DeviceConnectionStatusEventArgs(status, phase, message));
 }
示例#3
0
        private async Task <DeviceConnectionStatus> DeviceCheckConnectionRequest(HttpClient client, string publicKey)
        {
            HttpResponseMessage response = null;

            Console.WriteLine("Checking for device connection request..");
            response = await client.PostAsJsonAsync(apiBaseAddress + "DeviceCheckRemoteConnectionRequest", publicKey);

            if (response.IsSuccessStatusCode)
            {
                bool authenticated = hmacResponseAuthenticator.IsResponseAuthenticated(response);
                if (authenticated)
                {
                    string responseString = await response.Content.ReadAsStringAsync();

                    DeviceConnectionStatus currentStatus = Newtonsoft.Json.JsonConvert.DeserializeObject <DeviceConnectionStatus>(responseString);
                    Console.WriteLine(responseString);

                    return(currentStatus);
                }
            }
            else
            {
                await PrintFailMessage(response);
            }

            return(null);
        }
示例#4
0
        private async Task <DeviceConnectionStatus> DeveloperCheckDeviceConnectionState(HttpClient client, string sshPublicKey)
        {
            HttpResponseMessage response = null;


            DeveloperCheckDeviceConnectionArgs args = new DeveloperCheckDeviceConnectionArgs();

            args.DeveloperSshPublicKey = sshPublicKey;
            args.DeviceName            = Configuration.Instance.TargetDevice;

            response = await client.PostAsJsonAsync(apiBaseAddress + "DeveloperCheckDeviceConnection", args);

            if (response.IsSuccessStatusCode)
            {
                bool authenticated = hmacAuthenticator.IsResponseAuthenticated(response);
                if (authenticated)
                {
                    string responseString = await response.Content.ReadAsStringAsync();

                    DeviceConnectionStatus currentStatus = Newtonsoft.Json.JsonConvert.DeserializeObject <DeviceConnectionStatus>(responseString);
                    logger.Debug(responseString);

                    return(currentStatus);
                }
            }
            else
            {
                await PrintFailMessage(response);
            }

            return(null);
        }
示例#5
0
        private IEnumerator CheckServiceConnection()
        {
            while (true)
            {
                ServiceConnectionStatus status = _plugin.TestServiceConnection();
                if (status != _ServiceConnectionStatus)
                {
                    _ServiceConnectionStatus = ChangeServiceConnectionStatus(status);
                }

                if (status == ServiceConnectionStatus.Connected)
                {
                    var suitConnection = _plugin.TestDeviceConnection();
                    if (suitConnection != _DeviceConnectionStatus)
                    {
                        _DeviceConnectionStatus = ChangeDeviceConnectionStatus(suitConnection);
                    }
                }
                else
                {
                    if (_DeviceConnectionStatus != DeviceConnectionStatus.Disconnected)
                    {
                        _DeviceConnectionStatus = ChangeDeviceConnectionStatus(DeviceConnectionStatus.Disconnected);
                    }
                }
                yield return(new WaitForSeconds(0.5f));
            }
        }
示例#6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DeviceConnectionStatusEventArgs"/> class.
 /// </summary>
 /// <param name="status">Status of the connection</param>
 /// <param name="phase">Phase of the connection</param>
 /// <param name="message">Optional message describing our connection/phase</param>
 internal DeviceConnectionStatusEventArgs(
     DeviceConnectionStatus status,
     DeviceConnectionPhase phase,
     string message = "")
 {
     this.Status  = status;
     this.Phase   = phase;
     this.Message = message;
 }
示例#7
0
 internal DeviceConnectionEventArgs(uint id, byte interfaceIndex, BaseDevice.DeviceType type, ushort vendorId, ushort productId, byte portNumber, DeviceConnectionStatus deviceStatus)
 {
     this.id             = id;
     this.interfaceIndex = interfaceIndex;
     this.type           = type;
     this.vendorId       = vendorId;
     this.productId      = productId;
     this.portNumber     = portNumber;
     this.deviceStatus   = deviceStatus;
 }
示例#8
0
 private DeviceConnectionStatus ChangeDeviceConnectionStatus(DeviceConnectionStatus newStatus)
 {
     if (newStatus == DeviceConnectionStatus.Connected)
     {
         OnSuitConnected(new SuitConnectionArgs());
     }
     else
     {
         OnSuitDisconnected(new SuitConnectionArgs());
     }
     return(newStatus);
 }
示例#9
0
        public IActionResult DeviceCheckRemoteConnectionRequest([FromBody] string devicePublicKey)
        {
            #warning to move in infrastructure module
            string deviceIdentity = (string)HttpContext.Items["ClientName"];

            Console.WriteLine("Device identity is: " + deviceIdentity);

            var deviceConnectionRequest = clientConnections.GetByClientName(deviceIdentity);

            bool isDeviceConnectionRequested = deviceConnectionRequest != null;

            if (isDeviceConnectionRequested)
            {
                // Verifica dello stato della connessione, se è già attiva non devo fare nulla
                var deviceConnection = this.clientConnections.CheckDeviceConnection(deviceIdentity);

                Core.Entities.DeviceConnectionStatus connectionStatus = ClientConnectionMapper.Mapper.Map <Core.Entities.DeviceConnectionStatus>(deviceConnection);

                // Altrimenti devo fare in modo che venga attivata la nuova connessione
                if (connectionStatus.State != EnumClientConnectionState.Connected)
                {
                    this.ssh.SaveClientKeys(connectionStatus.SshForwarding, "device_" + deviceIdentity, devicePublicKey);

                    // Generating Ssh connection details
                    Core.Entities.DeviceConnectionStatus connectionDetails = GenerateSshConnectionDetails();

                    // Inserting connection details to database

                    this.clientConnections.SetDeviceConnectionDetails(deviceIdentity, connectionDetails);

                    return(Ok(connectionDetails));
                }
                // in questo caso torna connected (quello che ha detto il db)
                return(Ok(connectionStatus));
            }
            else if (!isDeviceConnectionRequested)
            {
                DeviceConnectionStatus connectionStatus = new DeviceConnectionStatus()
                {
                    State = EnumClientConnectionState.NotRequest
                };
                return(Ok(connectionStatus));
            }
            else
            {
                return(StatusCode((int)HttpStatusCode.InternalServerError, "Database error"));
            }
        }
示例#10
0
        public async Task Run()
        {
            while (true)
            {
                DeviceConnectionStatus connectionDetails = await http.CheckRemoteConnectionRequest(ssh.PublicKey);

                if (connectionDetails != null)
                {
                    // Reset the connection if the client is connected with the wrong port (old connections)
                    if (ssh.ConnectionState == EnumSshConnectionState.Open && ssh.CurrentForwardingPort != connectionDetails.SshForwarding)
                    {
                        ssh.CloseSshConnection("wrong port and is open");
                    }

                    if ((connectionDetails.State == EnumClientConnectionState.Ready) && ssh.ConnectionState != EnumSshConnectionState.Open)
                    {
                        // Attesa di 2 secondi per fare in modo che OpenSSH acquisisca i certificati che abbiamo appena caricato
                        System.Threading.Thread.Sleep(5000);

                        ssh.OpenSshConnection(connectionDetails);
                        ssh.EnableRemoteForwarding(connectionDetails);
                    }
                    else if ((connectionDetails.State == EnumClientConnectionState.NotRequest) && (ssh.ConnectionState == EnumSshConnectionState.Open))
                    {
                        ssh.CloseSshConnection("Not request and is open");
                    }
                }
                else
                {
                    ssh.CloseSshConnection("no connection details");
                }

                // Connection status is beign constantly setted beacuse the server constantly check the last timestamp
                // If the client goes offline, the server will mark the device as not connected automatically
                if (ssh.ConnectionState == EnumSshConnectionState.Open)
                {
                    await http.SetActiveDeviceConnection();
                }
                else if (connectionDetails != null && (connectionDetails.State != EnumClientConnectionState.NotRequest))
                {
                    await http.SetClosedSshConnectionState();
                }


                System.Threading.Thread.Sleep(5000);
            }
        }
示例#11
0
        public async Task Run()
        {
            while (true)
            {
                // Insert connection request to the target device
                await http.InsertConnectionRequest();

                // Check device connection state to the ssh server
                DeviceConnectionStatus deviceConnectionDetails = await http.CheckDeviceConnectionState(ssh.PublicKey);

                if (deviceConnectionDetails != null)
                {
                    // Reset the connection if the client is connected with the wrong port (old connections)
                    if (ssh.ConnectionState == EnumSshConnectionState.Open && ssh.CurrentForwardingPort != deviceConnectionDetails.SshForwarding)
                    {
                        ssh.CloseSshConnection("wrong port");
                    }


                    if (deviceConnectionDetails.State != EnumClientConnectionState.Connected)
                    {
                        logger.Output("Waiting for device connection..");
                        waiting = true;
                    }
                    else
                    {
                        if (ssh.ConnectionState != EnumSshConnectionState.Open)
                        {
                            logger.Debug("Device has been connected, connecting developer to the ssh server..");

                            ssh.OpenSshConnection(deviceConnectionDetails);
                            ssh.EnableLocalForwarding(deviceConnectionDetails);

                            logger.Output($"Developer SSH connection created: Device ssh server exposed on port {deviceConnectionDetails.SshForwarding})");
                            waiting = false;
                        }
                        else if (waiting)
                        {
                            logger.Output($"Developer SSH connection re-established: Device ssh server exposed on port {deviceConnectionDetails.SshForwarding})");
                            waiting = false;
                        }
                    }
                }
                System.Threading.Thread.Sleep(5000);
            }
        }
示例#12
0
    static void Main()
    {
        // DeviceConnectionStatus ist ohne [Flags] definiert. Eine Variable diesen
        // Typs hat also immer nur einen der definierten Werte.
        DeviceConnectionStatus connectionStatus = DeviceConnectionStatus.Available;

        Console.WriteLine("Aktueller Verbindungsstatus: {0}", connectionStatus);

        // Du kannst einer Enum auch einen Wert zuweisen der nicht für sie definiert
        // ist. Dann bekommst du aber auch keine passende Beschreibung.
        // Du musst auch schon einen richtigen Cast anwenden, damit der Compiler nicht
        // meckert.
        connectionStatus = (DeviceConnectionStatus)3;
        Console.WriteLine("Aktueller Verbindungsstatus ohne gültige Beschreibung: {0}", connectionStatus);

        DeviceErrorStatus error = DeviceErrorStatus.HardwareError
                                  | DeviceErrorStatus.Hardware_CommunicationError
                                  | DeviceErrorStatus.WatchdogError;

        Console.WriteLine("Ist das Flag HardwareError gesetzt? {0}", error.HasFlag(DeviceErrorStatus.HardwareError));
        Console.WriteLine("Ist das Flag SoftwareError gesetzt? {0}", error.HasFlag(DeviceErrorStatus.SoftwareError));
    }
示例#13
0
        public async Task <DeviceConnectionStatus> CheckDeviceConnectionState(string sshPublicKey)
        {
            DeviceConnectionStatus state = await DeveloperCheckDeviceConnectionState(client, sshPublicKey);

            return(state);
        }
示例#14
0
 public Task <DeviceConnectionStatus> TestDevice()
 {
     lock (this._locker)
     {
         this.CloseIfOpen();
         try
         {
             this._serialDevice.Open();
             this._serialDevice.OnReceivedData = (Func <byte[], bool>)null;
             DeviceConnectionStatus result = DeviceConnectionStatus.InitializationError;
             this.GetReadDataSync("3p=", (Action <string>)(res =>
             {
                 if (!res.ContainsIgnoreCase("OK"))
                 {
                     result = DeviceConnectionStatus.InitializationError;
                 }
                 else
                 {
                     this.ForceGoodReadTone();
                     result = DeviceConnectionStatus.Enabled;
                 }
             }));
             StaticTimer.Wait((Func <bool>)(() => result == DeviceConnectionStatus.InitializationError), 2);
             if (result == DeviceConnectionStatus.InitializationError)
             {
                 return(Task.FromResult <DeviceConnectionStatus>(result));
             }
             result = DeviceConnectionStatus.InitializationError;
             this.GetReadDataSync("14", (Action <string>)(res =>
             {
                 if (!res.StartsWith("S14"))
                 {
                     result = DeviceConnectionStatus.InitializationError;
                 }
                 else
                 {
                     res = res.Substring(3);
                     if (!res.StartsWith("3") && !res.StartsWith("5"))
                     {
                         result = DeviceConnectionStatus.InitializationError;
                     }
                     else
                     {
                         result = DeviceConnectionStatus.Enabled;
                     }
                 }
             }));
             StaticTimer.Wait((Func <bool>)(() => result == DeviceConnectionStatus.InitializationError), 2);
             return(Task.FromResult <DeviceConnectionStatus>(result));
         }
         catch (Exception ex)
         {
             ILogger <Magellan9300S> logger = this._logger;
             if (logger != null)
             {
                 logger.LogError(ex, ex.Message);
             }
             if (ex.Message.ContainsIgnoreCase("port"))
             {
                 Action <DeviceLog> onDeviceWarning = this.OnDeviceWarning;
                 if (onDeviceWarning != null)
                 {
                     BarcodeScannerLog barcodeScannerLog = new BarcodeScannerLog();
                     barcodeScannerLog.Category = TerminalLogCategory.Critical;
                     barcodeScannerLog.Message  = "Device not connected";
                     onDeviceWarning((DeviceLog)barcodeScannerLog);
                 }
                 return(Task.FromResult <DeviceConnectionStatus>(DeviceConnectionStatus.NotConnected));
             }
             Action <DeviceLog> onDeviceWarning1 = this.OnDeviceWarning;
             if (onDeviceWarning1 != null)
             {
                 BarcodeScannerLog barcodeScannerLog = new BarcodeScannerLog();
                 barcodeScannerLog.Category = TerminalLogCategory.Critical;
                 barcodeScannerLog.Message  = "Initialization error";
                 onDeviceWarning1((DeviceLog)barcodeScannerLog);
             }
             return(Task.FromResult <DeviceConnectionStatus>(DeviceConnectionStatus.InitializationError));
         }
         finally
         {
             this._serialDevice.OnReceivedData = new Func <byte[], bool>(this.OnDataReceived);
         }
     }
 }
示例#15
0
 public DeviceConnectionStatus Init()
 {
     lock (this._locker)
     {
         try
         {
             this._tmpStr = string.Empty;
             if (this._currentStatus == DeviceConnectionStatus.Enabled)
             {
                 return(DeviceConnectionStatus.Enabled);
             }
             Action <DeviceLog> onDeviceWarning1 = this.OnDeviceWarning;
             if (onDeviceWarning1 != null)
             {
                 BarcodeScannerLog barcodeScannerLog = new BarcodeScannerLog();
                 barcodeScannerLog.Category = TerminalLogCategory.All;
                 barcodeScannerLog.Message  = "[Magellan9300S] - Start Initialization";
                 onDeviceWarning1((DeviceLog)barcodeScannerLog);
             }
             this.CloseIfOpen();
             this._serialDevice.OnReceivedData = (Func <byte[], bool>)null;
             this._serialDevice.Open();
             this._serialDevice.Write(this.GetCommand("01"));
             this._serialDevice.Write(this.GetCommand("339"));
             byte[] buffer = new byte[this._serialDevice.ReadBufferSize];
             this._serialDevice.Read(buffer, 0, buffer.Length);
             this._serialDevice.DiscardInBuffer();
             this._serialDevice.DiscardOutBuffer();
             this._serialDevice.Write(this.GetCommand("3p="));
             Action <DeviceLog> onDeviceWarning2 = this.OnDeviceWarning;
             if (onDeviceWarning2 != null)
             {
                 BarcodeScannerLog barcodeScannerLog = new BarcodeScannerLog();
                 barcodeScannerLog.Category = TerminalLogCategory.All;
                 barcodeScannerLog.Message  = "[Magellan9300S] - Get info about scanner";
                 onDeviceWarning2((DeviceLog)barcodeScannerLog);
             }
             for (int index = 0; this._serialDevice.ReadBufferSize < 1 && index < 10; ++index)
             {
                 Thread.Sleep(100);
             }
             byte[] numArray = new byte[this._serialDevice.ReadBufferSize];
             this._serialDevice.Read(numArray, 0, numArray.Length);
             string str = Encoding.ASCII.GetString(numArray);
             if (_logger != null)
             {
                 _logger.LogDebug("[Magellan9300S] - Initialization message - " + str);
             }
             bool flag = str.ContainsIgnoreCase("OK");
             Action <DeviceLog> onDeviceWarning3 = this.OnDeviceWarning;
             if (onDeviceWarning3 != null)
             {
                 BarcodeScannerLog barcodeScannerLog = new BarcodeScannerLog();
                 barcodeScannerLog.Category = TerminalLogCategory.All;
                 barcodeScannerLog.Message  = string.Format("[Magellan9300S] - Initialization result {0}", (object)flag);
                 onDeviceWarning3((DeviceLog)barcodeScannerLog);
             }
             this._currentStatus = flag ? DeviceConnectionStatus.Enabled : DeviceConnectionStatus.InitializationError;
             return(this._currentStatus);
         }
         catch (Exception ex)
         {
             ILogger <Magellan9300S> logger = this._logger;
             if (logger != null)
             {
                 logger.LogError(ex, ex.Message);
             }
             if (ex.Message.ContainsIgnoreCase("port"))
             {
                 Action <DeviceLog> onDeviceWarning = this.OnDeviceWarning;
                 if (onDeviceWarning != null)
                 {
                     BarcodeScannerLog barcodeScannerLog = new BarcodeScannerLog();
                     barcodeScannerLog.Category = TerminalLogCategory.Critical;
                     barcodeScannerLog.Message  = "Device not connected";
                     onDeviceWarning((DeviceLog)barcodeScannerLog);
                 }
                 return(DeviceConnectionStatus.NotConnected);
             }
             Action <DeviceLog> onDeviceWarning1 = this.OnDeviceWarning;
             if (onDeviceWarning1 != null)
             {
                 BarcodeScannerLog barcodeScannerLog = new BarcodeScannerLog();
                 barcodeScannerLog.Category = TerminalLogCategory.Critical;
                 barcodeScannerLog.Message  = "Initialization error";
                 onDeviceWarning1((DeviceLog)barcodeScannerLog);
             }
             return(DeviceConnectionStatus.InitializationError);
         }
         finally
         {
             this._serialDevice.OnReceivedData = new Func <byte[], bool>(this.OnDataReceived);
         }
     }
 }
示例#16
0
        public async Task <DeviceConnectionStatus> CheckRemoteConnectionRequest(string publicKey)
        {
            DeviceConnectionStatus state = await DeviceCheckConnectionRequest(client, publicKey);

            return(state);
        }
示例#17
0
        /// <summary>
        /// Performs the action of the reestablish connection command
        /// </summary>
        /// <returns>A task capturing the continuation of the asynchronous action to reestablish the connection</returns>
        private async Task ExecuteReestablishConnectionAsync()
        {
            this.OutputDiagnosticString("ExecuteReestablishConnectionAsync\n");
            int numTries = 1;

            DeviceConnectionStatus finalConnectionStatus = DeviceConnectionStatus.None;

            DeviceConnectionStatusEventHandler handler = (DevicePortal sender, DeviceConnectionStatusEventArgs args) =>
            {
                this.OutputDiagnosticString("Connection status update: Status: {0}, Phase: {1}\n", args.Status, args.Phase);
                if (args.Status == DeviceConnectionStatus.Connected)
                {
                    this.OutputDiagnosticString("Connection succeeded after {0} tries.\n", numTries);
                    this.ConnectionStatus = DeviceConnectionStatus.Connected;
                }
                else if (args.Status == DeviceConnectionStatus.Failed)
                {
                    this.OutputDiagnosticString("Connection failed after {0} tries.\n", numTries);
                    this.OutputDiagnosticString("HTTP Status: {0}\n", this.Portal.ConnectionHttpStatusCode);
                    this.OutputDiagnosticString("Failure description: {0}\n", args.Message);
                }

                finalConnectionStatus = args.Status;
            };

            this.Portal.ConnectionStatus += handler;

            this.Ready = false;
            try
            {
                do
                {
                    await this.Portal.ConnectAsync();

                    if (this.Portal.ConnectionHttpStatusCode == HttpStatusCode.Unauthorized)
                    {
                        // Don't try to reconnect when there is an authentication failure
                        break;
                    }
                    else if (this.Portal.ConnectionHttpStatusCode != HttpStatusCode.OK && numTries <= this.ConnectionRetryAttempts)
                    {
                        await Task.Delay(1000 * 5);
                    }

                    ++numTries;
                }while (this.Portal.ConnectionHttpStatusCode != HttpStatusCode.OK && numTries <= this.ConnectionRetryAttempts);

                if (this.Portal.ConnectionHttpStatusCode != HttpStatusCode.OK)
                {
                    throw new Exception(string.Format("Unable to connect after {0} tries.", numTries - 1));
                }

                this.OnPropertyChanged("Address");
                this.OnPropertyChanged("DeviceFamily");
                this.OnPropertyChanged("OperatingSystemVersion");
                this.OnPropertyChanged("Platform");
                this.OnPropertyChanged("PlatformName");
            }
            catch (Exception exn)
            {
                this.ReportException("ReestablishConnection", exn);
            }

            this.Portal.ConnectionStatus -= handler;
            this.Ready            = true;
            this.ConnectionStatus = finalConnectionStatus;
        }
示例#18
0
        /// <summary>
        /// Gets a composite key concatenating the values.
        /// </summary>
        /// <param name="httpStatusCode">The 3 digit Code denoting the Notification Response Status of the web call.</param>
        /// <param name="pushNotificationStatus">The status of the notification received by the Microsoft Push Notification Service.</param>
        /// <param name="deviceConnectionStatus">The connection status of the device.</param>
        /// <param name="subscriptionStatus">The subscription status of the device.</param>
        /// <returns>The resource key.</returns>
        private static string GetKey(HttpStatusCode httpStatusCode, PushNotificationStatus pushNotificationStatus, DeviceConnectionStatus deviceConnectionStatus, SubscriptionStatus subscriptionStatus)
        {
            var key = String.Format(CultureInfo.InvariantCulture, "ResponseComments_{0}_{1}_{2}_{3}", httpStatusCode, pushNotificationStatus, deviceConnectionStatus, subscriptionStatus);

            return(key);
        }
        private void ResponseComments_Test(HttpStatusCode httpStatusCode, PushNotificationStatus pushNotificationStatus, DeviceConnectionStatus deviceConnectionStatus, SubscriptionStatus subscriptionStatus, string value)
        {
            var result = new PushNotificationSendResult()
            {
                HttpStatusCode = httpStatusCode,
                PushNotificationStatus = pushNotificationStatus,
                DeviceConnectionStatus = deviceConnectionStatus,
                PushNotificationSubscriptionStatus = subscriptionStatus,
            };

            Assert.AreEqual(result.Comments, value);
        }
        private void ResponseComments_Test(HttpStatusCode httpStatusCode, PushNotificationStatus pushNotificationStatus, DeviceConnectionStatus deviceConnectionStatus, SubscriptionStatus subscriptionStatus, string value)
        {
            var result = new PushNotificationSendResult()
            {
                HttpStatusCode                     = httpStatusCode,
                PushNotificationStatus             = pushNotificationStatus,
                DeviceConnectionStatus             = deviceConnectionStatus,
                PushNotificationSubscriptionStatus = subscriptionStatus,
            };

            Assert.AreEqual(result.Comments, value);
        }
示例#21
0
        /// <summary>
        /// Gets a value indicating the possible set of reasons for the current response (Http Status + Notification Status + Device Connection Status + Subscription Status)/
        /// This message may also suggest the next steps in many cases.
        /// </summary>
        /// <param name="httpStatusCode">The 3 digit Code denoting the Notification Response Status of the web call.</param>
        /// <param name="pushNotificationStatus">The status of the notification received by the Microsoft Push Notification Service.</param>
        /// <param name="deviceConnectionStatus">The connection status of the device.</param>
        /// <param name="subscriptionStatus">The subscription status of the device.</param>
        /// <returns>The suggestion as a message.</returns>
        public static string GetComments(HttpStatusCode httpStatusCode, PushNotificationStatus pushNotificationStatus, DeviceConnectionStatus deviceConnectionStatus, SubscriptionStatus subscriptionStatus)
        {
            var message = String.Empty;
            var key     = Extensions.GetKey(httpStatusCode, pushNotificationStatus, deviceConnectionStatus, subscriptionStatus);

            if (Extensions.pushNotificationServiceResponseComments.ContainsKey(key))
            {
                message = Extensions.pushNotificationServiceResponseComments[key];
            }

            return(message);
        }