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; }
/// <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}."); } }
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); }
/// <param name="purpose">Success, BadRequest, VersionMismatch, UnsuccessfulRequest</param> public TotResponse(TotPurpose purpose, TotMessageId messageId) : this(purpose, TotContent.Empty, messageId) { }