Example #1
0
 private static void AssertVersion(TotVersion expected, TotVersion actual)
 {
     if (expected != actual)
     {
         throw new TotRequestException($"Server responded with wrong version. Expected: {expected}. Actual: {actual}.");
     }
 }
Example #2
0
        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");
            });
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }