public void WithFullPayload()
            {
                // Arrange
                var expected = new AlarmActionRequestWrapper
                {
                    AlarmActionRequest =
                        new AlarmActionRequest
                        {
                            AlarmActionFilter =
                                new AlarmActionFilter { AlarmGuid = new MultipleCVAlarmGuidFilter { CurrentValues = new[] { "E95A9F3E-A107-4277-AB2E-2A9C6E5525C8" } } },
                            Command = "2",
                            Parameters =
                                new Parameters
                                {
                                    ConditionSequenceNumber = "5",
                                    AlarmResponseText = "response"
                                }
                        }
                };

                // Act
                var actual = _replySerializer.Deserialize(FullXmlMessage);

                // Assert
                DtoAssert.AreEqual(expected, actual);
            }
            public void WithEmptyReply()
            {
                // Arrange 
                const string message = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<P2000Request />";
                var expected = new AlarmActionRequestWrapper();

                // Act
                var actual = _replySerializer.Deserialize(message);

                // Assert
                DtoAssert.AreEqual(expected, actual);
            }
Ejemplo n.º 3
0
        /// <summary>
        /// Used to ack, respond, or complete an alarm.
        /// </summary>
        /// <param name="userName">Name of the user.</param>
        /// <param name="sessionGuid">The session GUID.</param>
        /// <param name="alarmGuids">An IEnumerable of Tuples that contain the alarm guid and the
        /// associated Condition Sequence Number</param>
        /// <param name="alarmState">State of the alarm.</param>
        /// <param name="response">The response.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentOutOfRangeException">Thrown if <paramref name="alarmState"/> is not one
        /// of the following: 1 = completed, 2 = responding, 3 = acknowledged.</exception>
        public AlarmActionReply AlarmAction(string userName, string sessionGuid, IEnumerable<AlarmIdSequenceTuple> alarmGuids, 
            int alarmState, string response)
        {
            AlarmIdSequenceTuple[] alarmIdSequenceNumberTuples = alarmGuids.ToArray();
            if (userName == null) throw new ArgumentNullException("userName");
            if (sessionGuid == null) throw new ArgumentNullException("sessionGuid");
            if (alarmGuids == null) throw new ArgumentNullException("alarmGuids");
            if (alarmState < 0 || alarmState > 3) throw new ArgumentOutOfRangeException("alarmState");
            if (response == null) throw new ArgumentNullException("response");

            var request = new AlarmActionRequestWrapper
                              {
                                  AlarmActionRequest =
                                      new AlarmActionRequest
                                          {
                                              AlarmActionFilter =
                                                  new AlarmActionFilter
                                                      {
                                                          AlarmGuid =
                                                              new MultipleCVAlarmGuidFilter
                                                                  {
                                                                      CurrentValues =
                                                                          alarmIdSequenceNumberTuples.Select(x => x.Item1.ToString())
                                                                          .ToArray()
                                                                  }
                                                      },
                                              Command = alarmState.ToString(CultureInfo.InvariantCulture),
                                              Parameters = new Parameters()
                                          }
                              };

            // If the Guid/SequenceNumber array only contains 1 value, then the sequence number
            // must be passed to the P2000.
            if (alarmIdSequenceNumberTuples.Count() == 1)
            {
                request.AlarmActionRequest.Parameters.ConditionSequenceNumber =
                    alarmIdSequenceNumberTuples[0].Item2.ToString(CultureInfo.InvariantCulture);
            }

            if (alarmState == RespondingState)
            {
                request.AlarmActionRequest.Parameters.AlarmResponseText = response;
            }

            string serializedRequest = XmlSerializer<AlarmActionRequestWrapper>.Instance.Serialize(request);

            P2000ReturnStructure responseStructure =
                _alarmServiceProxy.Invoke(proxy => proxy.AlarmAction(userName, sessionGuid, serializedRequest));

            return XmlSerializer<AlarmActionReplyWrapper>.Instance.Deserialize(responseStructure.XmlDoc).AlarmActionReply;
        }