internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args)
        {
            var cts  = new CancellationTokenSource();
            var call = ProvidedCap.Invoke(interfaceId, methodId, args, cts.Token);

            return(new LocalAnswer(cts, AwaitAnswer(call)));
        }
        async Task <DeserializerState> CallImpl(ulong interfaceId, ushort methodId, DynamicSerializerState args, CancellationToken cancellationToken)
        {
            ConsumedCapability cap;

            try
            {
                cap = await _capTask;
            }
            catch
            {
                args.Dispose();
                throw;
            }

            if (cancellationToken.IsCancellationRequested)
            {
                args.Dispose();
                cancellationToken.ThrowIfCancellationRequested();
            }

            using var proxy = new Proxy(cap);
            var call         = proxy.Call(interfaceId, methodId, args, default);
            var whenReturned = call.WhenReturned;

            using (var registration = cancellationToken.Register(call.Dispose))
            {
                return(await whenReturned);
            }
        }
Exemplo n.º 3
0
        public void CallServerSideException()
        {
            (var server, var client) = SetupClientServerPair();

            using (server)
                using (client)
                {
                    Assert.IsTrue(client.WhenConnected.Wait(MediumNonDbgTimeout));
                    SpinWait.SpinUntil(() => server.ConnectionCount > 0, MediumNonDbgTimeout);
                    Assert.AreEqual(1, server.ConnectionCount);

                    var mock = new ProvidedCapabilityMock();
                    server.Main = mock;
                    var main = client.GetMain <BareProxy>();
                    Assert.IsTrue(main.WhenResolved.WrappedTask.Wait(MediumNonDbgTimeout));
                    var args = DynamicSerializerState.CreateForRpc();
                    args.SetStruct(1, 0);
                    args.WriteData(0, 123456);
                    using (var answer = main.Call(0x1234567812345678, 0x3333, args))
                    {
                        Assert.IsTrue(mock.WhenCalled.Wait(MediumNonDbgTimeout));
                        (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result;
                        Assert.AreEqual <ulong>(0x1234567812345678, interfaceId);
                        Assert.AreEqual <ushort>(0x3333, methodId);
                        Assert.AreEqual(ObjectKind.Struct, inargs.Kind);
                        Assert.AreEqual(123456, inargs.ReadDataInt(0));

                        mock.Return.SetException(new MyTestException());

                        var exTask = Assert.ThrowsExceptionAsync <RpcException>(async() => await answer.WhenReturned);
                        Assert.IsTrue(exTask.Wait(MediumNonDbgTimeout));
                        Assert.IsTrue(exTask.Result.Message.Contains(new MyTestException().Message));
                    }
                }
        }
Exemplo n.º 4
0
        internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args)
        {
            var cc = new CallContext(this, interfaceId, methodId, args);

            Policy.OnCallFromAlice(cc);
            return(cc.Answer);
        }
        internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args)
        {
            var call = SetupMessage(args, interfaceId, methodId);

            Debug.Assert(call.Target.which != MessageTarget.WHICH.undefined);
            return(_ep.BeginQuestion(this, args));
        }
Exemplo n.º 6
0
        public void StructWithLists()
        {
            var mb    = MessageBuilder.Create(8);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            {
                ds.SetStruct(0, 2);
                ds.WriteText(0, "Lorem ipsum");
                var los = ds.BuildPointer(1);
                los.SetListOfStructs(3, 1, 1);
                var e0 = los.ListBuildStruct(0);
                e0.WriteData(0, long.MinValue);
                e0.WriteText(0, long.MinValue.ToString());
                var e1 = los.ListBuildStruct(1);
                e1.WriteData(0, 0L);
                e1.WriteText(0, 0L.ToString());
                var e2 = los.ListBuildStruct(2);
                e2.WriteData(0, long.MaxValue);
                e2.WriteText(0, long.MaxValue.ToString());
            }

            {
                DeserializerState d = ds;
                Assert.AreEqual(ObjectKind.Struct, d.Kind);
                Assert.AreEqual("Lorem ipsum", d.ReadText(0));
                var los = d.ReadListOfStructs(1, _ => _);
                Assert.AreEqual(3, los.Count);
                Assert.AreEqual(long.MinValue, los[0].ReadDataLong(0));
                Assert.AreEqual(long.MinValue.ToString(), los[0].ReadText(0));
                Assert.AreEqual(0L, los[1].ReadDataLong(0));
                Assert.AreEqual(0L.ToString(), los[1].ReadText(0));
                Assert.AreEqual(long.MaxValue, los[2].ReadDataLong(0));
                Assert.AreEqual(long.MaxValue.ToString(), los[2].ReadText(0));
            }
        }
Exemplo n.º 7
0
        public void ListOfBytesAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(8, 10);
            ds.ListWriteValue(1, (byte)0x11);
            ds.ListWriteValue(2, (byte)0x22);
            ds.ListWriteValue(3, (byte)0x33);
            ds.ListWriteValue(4, (byte)0x44);
            ds.ListWriteValue(5, (byte)0x55);
            ds.ListWriteValue(6, (byte)0x66);
            ds.ListWriteValue(7, (byte)0x77);
            ds.ListWriteValue(8, (byte)0x88);
            ds.ListWriteValue(9, (byte)0x99);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(10, asListOfStructs.Count);
            Assert.AreEqual(ObjectKind.Value, asListOfStructs[0].Kind);
            Assert.AreEqual((byte)0x00, asListOfStructs[0].ReadDataByte(0));
            Assert.AreEqual((byte)0x11, asListOfStructs[1].ReadDataByte(0));
            Assert.AreEqual((byte)0x22, asListOfStructs[2].ReadDataByte(0));
            Assert.AreEqual((byte)0x33, asListOfStructs[3].ReadDataByte(0));
            Assert.AreEqual((byte)0x44, asListOfStructs[4].ReadDataByte(0));
            Assert.AreEqual((byte)0x55, asListOfStructs[5].ReadDataByte(0));
            Assert.AreEqual((byte)0x66, asListOfStructs[6].ReadDataByte(0));
            Assert.AreEqual((byte)0x77, asListOfStructs[7].ReadDataByte(0));
            Assert.AreEqual((byte)0x88, asListOfStructs[8].ReadDataByte(0));
            Assert.AreEqual((byte)0x99, asListOfStructs[9].ReadDataByte(0));
        }
Exemplo n.º 8
0
        public void List2D()
        {
            var mb    = MessageBuilder.Create(128);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int w     = 4;
            int h     = 5;

            ds.SetListOfPointers(w);
            for (int i = 0; i < w; i++)
            {
                var p = ds.BuildPointer(i);
                p.SetListOfValues(32, h);
                for (int j = 0; j < h; j++)
                {
                    p.ListWriteValue(j, i - j);
                }
            }

            DeserializerState d = ds;
            var matrix          = d.RequireList().Cast2D <int>();

            Assert.AreEqual(matrix.Count, w);
            for (int i = 0; i < w; i++)
            {
                var v = matrix[i];
                Assert.AreEqual(h, v.Count);
                for (int j = 0; j < h; j++)
                {
                    Assert.AreEqual(i - j, v[j]);
                }
            }
        }
Exemplo n.º 9
0
        public void ListOfULongs()
        {
            var mb    = MessageBuilder.Create(1);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int count = 345;

            ds.SetListOfValues(64, count);
            for (int i = 0; i < count; i++)
            {
                ds.ListWriteValue(i, (ulong)i);
            }

            DeserializerState d = ds;

            Assert.AreEqual(count, d.ListElementCount);
            var ulongs = d.RequireList().CastULong();

            for (int i = 0; i < count; i++)
            {
                Assert.AreEqual((ulong)i, ulongs[i]);
            }
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = ulongs[-1];
            });
            Assert.ThrowsException <IndexOutOfRangeException>(() =>
            {
                var dummy = ulongs[count];
            });
        }
Exemplo n.º 10
0
        public void ListOfSBytesAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(8, 10);
            ds.ListWriteValue(1, (sbyte)-1);
            ds.ListWriteValue(2, (sbyte)-2);
            ds.ListWriteValue(3, (sbyte)-3);
            ds.ListWriteValue(4, (sbyte)-4);
            ds.ListWriteValue(5, (sbyte)-5);
            ds.ListWriteValue(6, (sbyte)-6);
            ds.ListWriteValue(7, (sbyte)-7);
            ds.ListWriteValue(8, (sbyte)-8);
            ds.ListWriteValue(9, (sbyte)-9);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(10, asListOfStructs.Count);
            Assert.AreEqual(ObjectKind.Value, asListOfStructs[0].Kind);
            Assert.AreEqual((sbyte)0, asListOfStructs[0].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-1, asListOfStructs[1].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-2, asListOfStructs[2].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-3, asListOfStructs[3].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-4, asListOfStructs[4].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-5, asListOfStructs[5].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-6, asListOfStructs[6].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-7, asListOfStructs[7].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-8, asListOfStructs[8].ReadDataSByte(0));
            Assert.AreEqual((sbyte)-9, asListOfStructs[9].ReadDataSByte(0));
        }
Exemplo n.º 11
0
        public void DeserializerStateBadConv()
        {
            SerializerState s = null;

            Assert.ThrowsException <ArgumentNullException>(() => (DeserializerState)s);
            s = new DynamicSerializerState();
            Assert.ThrowsException <InvalidOperationException>(() => (DeserializerState)s);
        }
        internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool pipeline)
        {
            lock (_question.ReentrancyBlocker)
            {
                if (_question.StateFlags.HasFlag(PendingQuestion.State.Returned) &&
                    !_question.StateFlags.HasFlag(PendingQuestion.State.TailCall))
                {
                    if (ResolvedCap == null)
                    {
                        throw new RpcException("Answer did not resolve to expected capability");
                    }

                    return(CallOnResolution(interfaceId, methodId, args, pipeline));
                }
                else
                {
#if DebugEmbargos
                    Logger.LogDebug("Call by proxy");
#endif
                    if (_question.StateFlags.HasFlag(PendingQuestion.State.Disposed))
                    {
                        throw new ObjectDisposedException(nameof(PendingQuestion));
                    }

                    if (_question.StateFlags.HasFlag(PendingQuestion.State.FinishRequested))
                    {
                        throw new InvalidOperationException("Finish request was already sent");
                    }

                    _question.DisallowFinish();
                    ++_pendingCallsOnPromise;
                    var promisedAnswer = base.DoCall(interfaceId, methodId, args, pipeline);
                    ReAllowFinishWhenDone(promisedAnswer.WhenReturned);

                    async void DecrementPendingCallsOnPromiseWhenReturned()
                    {
                        try
                        {
                            await promisedAnswer.WhenReturned;
                        }
                        catch
                        {
                        }
                        finally
                        {
                            lock (_question.ReentrancyBlocker)
                            {
                                --_pendingCallsOnPromise;
                            }
                        }
                    }

                    DecrementPendingCallsOnPromiseWhenReturned();
                    return(promisedAnswer);
                }
            }
        }
Exemplo n.º 13
0
        public void RequireCap1()
        {
            var dss = DynamicSerializerState.CreateForRpc();

            dss.SetStruct(1, 1);
            var d = (DeserializerState)dss;

            Assert.ThrowsException <DeserializationException>(() => d.RequireCap <ITestInterface>());
        }
Exemplo n.º 14
0
        protected override Call.WRITER SetupMessage(DynamicSerializerState args, ulong interfaceId, ushort methodId)
        {
            var call = base.SetupMessage(args, interfaceId, methodId);

            call.Target.which       = MessageTarget.WHICH.ImportedCap;
            call.Target.ImportedCap = _remoteId;

            return(call);
        }
Exemplo n.º 15
0
        public void PipelineCallDuringDisposal()
        {
            (var server, var client) = SetupClientServerPair();

            using (server)
                using (client)
                {
                    Assert.IsTrue(client.WhenConnected.Wait(MediumNonDbgTimeout));
                    SpinWait.SpinUntil(() => server.ConnectionCount > 0, MediumNonDbgTimeout);
                    Assert.AreEqual(1, server.ConnectionCount);

                    var mock = new ProvidedCapabilityMock();
                    server.Main = mock;
                    var main = client.GetMain <BareProxy>();
                    Assert.IsTrue(main.WhenResolved.WrappedTask.Wait(MediumNonDbgTimeout));
                    var args = DynamicSerializerState.CreateForRpc();
                    args.SetStruct(1, 0);
                    args.WriteData(0, 123456);
                    IPromisedAnswer answer2;
                    using (var answer = main.Call(0x1234567812345678, 0x3333, args))
                    {
                        Assert.IsTrue(mock.WhenCalled.Wait(MediumNonDbgTimeout));

                        var pipelined = (BareProxy)CapabilityReflection.CreateProxy <BareProxy>(answer.Access(new MemberAccessPath(new MemberAccessPath.MemberAccess[] { new MemberAccessPath.StructMemberAccess(1) })));

                        var args2 = DynamicSerializerState.CreateForRpc();
                        args2.SetStruct(1, 0);
                        args2.WriteData(0, 654321);

                        answer2 = pipelined.Call(0x8765432187654321, 0x4444, args2);
                    }

                    using (answer2)
                    {
                        (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result;

                        var tcs = new TaskCompletionSource <int>();
                        using (ct.Register(() => tcs.SetResult(0)))
                        {
                            Assert.IsTrue(tcs.Task.Wait(MediumNonDbgTimeout));
                        }

                        var mock2 = new ProvidedCapabilityMock();

                        var result = DynamicSerializerState.CreateForRpc();
                        result.SetStruct(1, 2);
                        result.WriteData(0, 654321);
                        uint id = result.ProvideCapability(mock2).Value;
                        result.LinkToCapability(1, id);

                        mock.Return.SetResult(result);

                        Assert.IsTrue(Assert.ThrowsExceptionAsync <TaskCanceledException>(
                                          async() => await answer2.WhenReturned).Wait(MediumNonDbgTimeout));
                    }
                }
        }
Exemplo n.º 16
0
        public void List4D()
        {
            var mb    = MessageBuilder.Create(128);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);
            int d0    = 3;
            int d1    = 2;
            int d2    = 4;
            int d3    = 5;

            ds.SetListOfPointers(d0);
            for (int i = 0; i < d0; i++)
            {
                var p = ds.BuildPointer(i);
                p.SetListOfPointers(d1);
                for (int j = 0; j < d1; j++)
                {
                    var q = p.BuildPointer(j);
                    q.SetListOfPointers(d2);
                    for (int k = 0; k < d2; k++)
                    {
                        var r = q.BuildPointer(k);
                        r.SetListOfValues(32, d3);
                        for (int l = 0; l < d3; l++)
                        {
                            r.ListWriteValue(l, (float)(i * j + k * l));
                        }
                    }
                }
            }

            DeserializerState d = ds;

            var hqube = (IReadOnlyList <object>)d.RequireList().CastND <float>(4);

            Assert.AreEqual(hqube.Count, d0);
            for (int i = 0; i < d0; i++)
            {
                var qube = (IReadOnlyList <object>)hqube[i];
                Assert.AreEqual(d1, qube.Count);
                for (int j = 0; j < d1; j++)
                {
                    var matrix = (IReadOnlyList <object>)qube[j];
                    Assert.AreEqual(d2, matrix.Count);
                    for (int k = 0; k < d2; k++)
                    {
                        var vector = (IReadOnlyList <float>)matrix[k];
                        Assert.AreEqual(d3, vector.Count);
                        for (int l = 0; l < d3; l++)
                        {
                            Assert.AreEqual((float)(i * j + k * l), vector[l]);
                        }
                    }
                }
            }
        }
        protected override Call.WRITER SetupMessage(DynamicSerializerState args, ulong interfaceId, ushort methodId)
        {
            var call = base.SetupMessage(args, interfaceId, methodId);

            call.Target.which = MessageTarget.WHICH.PromisedAnswer;
            call.Target.PromisedAnswer.QuestionId = _question.QuestionId;
            _access.Serialize(call.Target.PromisedAnswer);

            return(call);
        }
Exemplo n.º 18
0
        public void CallReturnAfterClientSideCancel()
        {
            ExpectingLogOutput       = false;
            (var server, var client) = SetupClientServerPair();

            using (server)
                using (client)
                {
                    try
                    {
                        Assert.IsTrue(client.WhenConnected.Wait(MediumNonDbgTimeout));
                        SpinWait.SpinUntil(() => server.ConnectionCount > 0, MediumNonDbgTimeout);
                        Assert.AreEqual(1, server.ConnectionCount);

                        var mock = new ProvidedCapabilityMock();
                        server.Main = mock;
                        var main = client.GetMain <BareProxy>();
                        Assert.IsTrue(main.WhenResolved.WrappedTask.Wait(MediumNonDbgTimeout));
                        var args = DynamicSerializerState.CreateForRpc();
                        args.SetStruct(1, 0);
                        args.WriteData(0, 123456);
                        CancellationToken ctx;
                        IPromisedAnswer   answer;
                        using (answer = main.Call(0x1234567812345678, 0x3333, args))
                        {
                            Assert.IsTrue(mock.WhenCalled.Wait(MediumNonDbgTimeout));
                            (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result;
                            Assert.AreEqual <ulong>(0x1234567812345678, interfaceId);
                            Assert.AreEqual <ushort>(0x3333, methodId);
                            Assert.AreEqual(ObjectKind.Struct, inargs.Kind);
                            Assert.AreEqual(123456, inargs.ReadDataInt(0));
                            ctx = ct;
                        }

                        Assert.IsTrue(SpinWait.SpinUntil(() => ctx.IsCancellationRequested, MediumNonDbgTimeout));

                        var mbr = MessageBuilder.Create();
                        mbr.InitCapTable();
                        var result = new DynamicSerializerState(mbr);
                        result.SetStruct(1, 0);
                        result.WriteData(0, 654321);
                        mock.Return.SetResult(result);

                        // Even after the client cancelled the call, the server must still send
                        // a response.
                        async Task AwaitWhenReturned() => await answer.WhenReturned;

                        Assert.IsTrue(AwaitWhenReturned().ContinueWith(t => { }).Wait(MediumNonDbgTimeout));
                    }
                    finally
                    {
                        ExpectingLogOutput = true;
                    }
                }
        }
Exemplo n.º 19
0
        public void ReadCap()
        {
            var dss = DynamicSerializerState.CreateForRpc();

            dss.SetStruct(0, 1);
            dss.LinkObject <ITestInterface>(0, new TestInterfaceImpl2());
            var d = (DeserializerState)dss;

            Assert.IsNotNull(d.ReadCap(0));
            Assert.IsNotNull(d.ReadCap <ITestInterface>(0));
        }
        public void ListOfULongsAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(64, 2);
            ds.ListWriteValue(1, ulong.MaxValue);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(2, asListOfStructs.Count);
            Assert.AreEqual(0ul, asListOfStructs[0].ReadDataULong(0));
            Assert.AreEqual(ulong.MaxValue, asListOfStructs[1].ReadDataULong(0));
        }
Exemplo n.º 21
0
        public void ListOfStructsAsListOfSBytes()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(2, 1, 0);
            ds.ListBuildStruct(1).WriteData(0, sbyte.MinValue);

            DeserializerState d = ds;
            var asListOfSBytes  = d.RequireList().CastSByte();

            Assert.AreEqual(2, asListOfSBytes.Count);
            Assert.AreEqual((sbyte)0, asListOfSBytes[0]);
            Assert.AreEqual(sbyte.MinValue, asListOfSBytes[1]);
        }
Exemplo n.º 22
0
        public void ListOfStructsAsListOfULongs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(2, 1, 0);
            ds.ListBuildStruct(1).WriteData(0, ulong.MaxValue);

            DeserializerState d = ds;
            var asListOfULongs  = d.RequireList().CastULong();

            Assert.AreEqual(2, asListOfULongs.Count);
            Assert.AreEqual(0ul, asListOfULongs[0]);
            Assert.AreEqual(ulong.MaxValue, asListOfULongs[1]);
        }
Exemplo n.º 23
0
        internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args)
        {
            lock (_question.ReentrancyBlocker)
            {
                if (!_question.StateFlags.HasFlag(PendingQuestion.State.TailCall) &&
                    _question.StateFlags.HasFlag(PendingQuestion.State.Returned))
                {
                    return(CallOnResolution(interfaceId, methodId, args));
                }
                else
                {
#if DebugEmbargos
                    Logger.LogDebug("Call by proxy");
#endif
                    if (_question.StateFlags.HasFlag(PendingQuestion.State.CanceledByDispose) ||
                        _question.StateFlags.HasFlag(PendingQuestion.State.FinishRequested))
                    {
                        args.Dispose();
                        throw new ObjectDisposedException(nameof(PendingQuestion));
                    }

                    _question.DisallowFinish();
                    ++_pendingCallsOnPromise;
                    var promisedAnswer = base.DoCall(interfaceId, methodId, args);
                    ReAllowFinishWhenDone(promisedAnswer.WhenReturned);

                    async void DecrementPendingCallsOnPromiseWhenReturned()
                    {
                        try
                        {
                            await promisedAnswer.WhenReturned;
                        }
                        catch
                        {
                        }
                        finally
                        {
                            lock (_question.ReentrancyBlocker)
                            {
                                --_pendingCallsOnPromise;
                            }
                        }
                    }

                    DecrementPendingCallsOnPromiseWhenReturned();
                    return(promisedAnswer);
                }
            }
        }
Exemplo n.º 24
0
        public void ListOfEmpty()
        {
            var mb    = MessageBuilder.Create(1);
            var alloc = mb.Allocator;
            var ds    = new DynamicSerializerState(mb);

            ds.SetListOfValues(0, int.MaxValue);
            Assert.ThrowsException <InvalidOperationException>(
                () => ds.ListWriteValue(0, 1, 0));

            DeserializerState d = ds;

            Assert.AreEqual(ObjectKind.ListOfEmpty, d.Kind);
            Assert.AreEqual(int.MaxValue, d.ListElementCount);
        }
Exemplo n.º 25
0
        public void ListOfUIntsAsListOfStructs()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfValues(32, 2);
            ds.ListWriteValue(1, uint.MaxValue);

            DeserializerState d = ds;
            var asListOfStructs = d.RequireList().Cast(_ => _);

            Assert.AreEqual(2, asListOfStructs.Count);
            Assert.AreEqual(ObjectKind.Value, asListOfStructs[0].Kind);
            Assert.AreEqual(0u, asListOfStructs[0].ReadDataUInt(0));
            Assert.AreEqual(uint.MaxValue, asListOfStructs[1].ReadDataUInt(0));
        }
        protected virtual Call.WRITER SetupMessage(DynamicSerializerState args, ulong interfaceId, ushort methodId)
        {
            var callMsg = args.MsgBuilder.BuildRoot <Message.WRITER>();

            callMsg.which = Message.WHICH.Call;

            var call = callMsg.Call;

            call.AllowThirdPartyTailCall = false;
            call.InterfaceId             = interfaceId;
            call.MethodId       = methodId;
            call.Params.Content = args;

            return(call);
        }
Exemplo n.º 27
0
        public void ListOfStructsAsListOfDoubles()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(2, 1, 0);
            ds.ListBuildStruct(0).WriteData(0, double.NegativeInfinity);
            ds.ListBuildStruct(1).WriteData(0, double.MaxValue);

            DeserializerState d = ds;
            var asListOfDoubles = d.RequireList().CastDouble();

            Assert.AreEqual(2, asListOfDoubles.Count);
            Assert.AreEqual(double.NegativeInfinity, asListOfDoubles[0]);
            Assert.AreEqual(double.MaxValue, asListOfDoubles[1]);
        }
Exemplo n.º 28
0
        public void ListOfStructsAsListOfFloats()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(2, 1, 0);
            ds.ListBuildStruct(0).WriteData(0, float.NaN);
            ds.ListBuildStruct(1).WriteData(0, float.PositiveInfinity);

            DeserializerState d = ds;
            var asListOfFloats  = d.RequireList().CastFloat();

            Assert.AreEqual(2, asListOfFloats.Count);
            Assert.AreEqual(float.NaN, asListOfFloats[0]);
            Assert.AreEqual(float.PositiveInfinity, asListOfFloats[1]);
        }
Exemplo n.º 29
0
        public void ListOfStructsAsListOfBools()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(3, 1, 0);
            ds.ListBuildStruct(1).WriteData(0, false);
            ds.ListBuildStruct(2).WriteData(0, true);

            DeserializerState d = ds;
            var asListOfBools   = d.RequireList().CastBool();

            Assert.AreEqual(3, asListOfBools.Count);
            Assert.AreEqual(false, asListOfBools[0]);
            Assert.AreEqual(false, asListOfBools[1]);
            Assert.AreEqual(true, asListOfBools[2]);
        }
Exemplo n.º 30
0
        public void ListOfStructsAsListOfBytes()
        {
            var ds = new DynamicSerializerState(MessageBuilder.Create(128));

            ds.SetListOfStructs(3, 1, 0);
            ds.ListBuildStruct(1).WriteData(0, (byte)0x11);
            ds.ListBuildStruct(2).WriteData(0, (byte)0x22);

            DeserializerState d = ds;
            var asListOfBytes   = d.RequireList().CastByte();

            Assert.AreEqual(3, asListOfBytes.Count);
            Assert.AreEqual(0, asListOfBytes[0]);
            Assert.AreEqual((byte)0x11, asListOfBytes[1]);
            Assert.AreEqual((byte)0x22, asListOfBytes[2]);
        }