protected TotMessageBase(TotMessageType messageType, TotMessageId messageId, TotPurpose purpose, TotContent content)
 {
     Version     = TotVersion.Version1;
     MessageType = Guard.NotNull(nameof(messageType), messageType);
     MessageId   = Guard.NotNull(nameof(messageId), messageId);
     Purpose     = purpose ?? TotPurpose.Empty;
     Content     = content ?? TotContent.Empty;
 }
Exemple #2
0
 /// <param name="purpose">Success, BadRequest, VersionMismatch, UnsuccessfulRequest</param>
 public TotResponse(TotPurpose purpose, TotContent content, TotMessageId messageId) : base(TotMessageType.Response, messageId, purpose, content)
 {
     Guard.NotNull(nameof(purpose), purpose);
     if (purpose != TotPurpose.Success &&
         purpose != TotPurpose.BadRequest &&
         purpose != TotPurpose.VersionMismatch &&
         purpose != TotPurpose.UnsuccessfulRequest)
     {
         throw new ArgumentException($"{nameof(purpose)} of {nameof(TotResponse)} can only be {TotPurpose.Success}, {TotPurpose.BadRequest}, {TotPurpose.VersionMismatch} or {TotPurpose.UnsuccessfulRequest}. Actual: {purpose}.");
     }
 }
Exemple #3
0
        public override void FromBytes(byte[] bytes)
        {
            Guard.NotNullOrEmpty(nameof(bytes), bytes);

            base.FromBytes(bytes);

            var expectedMessageType = TotMessageType.Response;

            if (MessageType != expectedMessageType)
            {
                throw new FormatException($"Wrong {nameof(MessageType)}. Expected: {expectedMessageType}. Actual: {MessageType}.");
            }

            var validPurposes = new TotPurpose[] { TotPurpose.Success, TotPurpose.BadRequest, TotPurpose.VersionMismatch, TotPurpose.UnsuccessfulRequest };

            if (!validPurposes.Contains(Purpose))
            {
                throw new FormatException($"Wrong {nameof(Purpose)}. Value: {Purpose}.");
            }
        }
        public void TotPurposeTest()
        {
            var x  = TotPurpose.Success;
            var x2 = TotPurpose.Empty;
            var x3 = new TotPurpose();

            x3.FromHex("00");
            var x4 = new TotPurpose();

            x4.FromBytes(new byte[] { 0 });

            Assert.NotEqual(x, x2);
            Assert.Equal(x, x3);
            Assert.Equal(x, x4);

            Assert.Equal(TotPurpose.Ping, new TotPurpose("ping"));
            Assert.Equal(TotPurpose.Pong, new TotPurpose("pong"));
            Assert.Equal(new byte[] { }, TotPurpose.Empty.ToBytes());
            Assert.Equal(new TotPurpose(""), TotPurpose.Empty);
            Assert.Equal(new TotPurpose(new byte[] { }), TotPurpose.Empty);
            Assert.NotEqual(new TotPurpose(), TotPurpose.Empty);
            Assert.Equal("", TotPurpose.Empty.ToString());
            Assert.Equal("X'00' Success", TotPurpose.Success.ToString());
            Assert.Equal("X'01' BadRequest", TotPurpose.BadRequest.ToString());
            Assert.Equal("X'02' VersionMismatch", TotPurpose.VersionMismatch.ToString());
            Assert.Equal("X'03' UnsuccessfulRequest", TotPurpose.UnsuccessfulRequest.ToString());
            Assert.Equal("ping", TotPurpose.Ping.ToString());
            Assert.Equal("pong", TotPurpose.Pong.ToString());

            Assert.Equal(3, new TotPurpose("foo").Length);

            var bigStringBuilder = new StringBuilder();

            for (int i = 0; i < 255; i++)
            {
                bigStringBuilder.Append("0");
            }
            new TotPurpose(bigStringBuilder.ToString());
            bigStringBuilder.Append("0");
            Assert.Throws <ArgumentOutOfRangeException>(() => new TotPurpose(bigStringBuilder.ToString()));
        }
        public override void FromBytes(byte[] bytes)
        {
            Guard.NotNullOrEmpty(nameof(bytes), bytes);
            Guard.InRangeAndNotNull($"{nameof(bytes)}.{nameof(bytes.Length)}", bytes.Length, 7, 536870912 + 3 + 4 + 255);

            Version = new TotVersion();
            Version.FromByte(bytes[0]);

            MessageType = new TotMessageType();
            MessageType.FromByte(bytes[1]);

            MessageId = new TotMessageId();
            MessageId.FromBytes(bytes.Skip(2).Take(2).ToArray());

            int purposeLength = bytes[4];

            Purpose = new TotPurpose();
            Purpose.FromBytes(bytes.Skip(4).Take(purposeLength + 1).ToArray(), startsWithLength: true);

            int contentLength = BitConverter.ToInt32(bytes.Skip(5 + purposeLength).Take(4).ToArray(), 0);

            Content = new TotContent();
            Content.FromBytes(bytes.Skip(5 + purposeLength).ToArray(), startsWithLength: true);
        }
Exemple #6
0
 /// <param name="purpose">Success, BadRequest, VersionMismatch, UnsuccessfulRequest</param>
 public TotResponse(TotPurpose purpose, TotMessageId messageId) : this(purpose, TotContent.Empty, messageId)
 {
 }