private static void AssertVersion(TotVersion expected, TotVersion actual) { if (expected != actual) { throw new TotRequestException($"Server responded with wrong version. Expected: {expected}. Actual: {actual}."); } }
public void TotVersionTest() { var x = TotVersion.Version1; var x2 = new TotVersion(2); var x3 = new TotVersion(1); var x4 = new TotVersion(); x4.FromHex("01"); var x5 = new TotVersion(); x5.FromByte(1); Assert.NotEqual(x, x2); Assert.Equal(x, x3); Assert.Equal(x, x4); Assert.Equal(x, x5); new TotVersion(0); new TotVersion(255); Assert.Throws <ArgumentOutOfRangeException>(() => { new TotVersion(-1); }); Assert.Throws <ArgumentOutOfRangeException>(() => { new TotVersion(256); }); Assert.Throws <IndexOutOfRangeException>(() => { new TotVersion().FromHex("1"); }); }
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); }
private async Task <TotMessageBase> ReceiveAsync(TotMessageId expectedMessageId, TotVersion expectedVersion, int timeout) { Guard.NotNull(nameof(expectedMessageId), expectedMessageId); Guard.NotNull(nameof(expectedVersion), expectedVersion); Guard.MinimumAndNotNull(nameof(timeout), timeout, 1); int delay = 10; int maxDelayCount = timeout / delay; int delayCount = 0; while (!ResponseCache.ContainsKey(expectedMessageId)) { if (delayCount > maxDelayCount) { throw new TimeoutException($"No response arrived within the specified timeout: {timeout} milliseconds."); } await Task.Delay(delay).ConfigureAwait(false); delayCount++; } ResponseCache.TryRemove(expectedMessageId, out TotMessageBase response); AssertVersion(expectedVersion, response.Version); return(response); }