Пример #1
0
        public void ShallCallReturnValue(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    Assert.IsFalse(hostedObject.TwoWayCalled);

                    //Act
                    var result = remoteObject.CallTwoWayWithReturnValue(1, true, "qwerty", 123.123);

                    //Assert
                    Assert.IsTrue(hostedObject.TwoWayWithReturnValueCalled);
                    AssertComplexParameter(new ComplexParameter
                    {
                        A = 1,
                        B = true,
                        S = "qwerty",
                        D = 123.123
                    }, result);
                }
        }
Пример #2
0
        public void ShallHideExceptionForOneWaySetters(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);
                    hostedObject.Value  = 0;
                    hostedObject.Action = () => throw new InvalidOperationException("qwerty");

                    //Act
                    remoteObject.OneWaySet = 5;
                    //Assert
                    Assert.AreEqual(0, hostedObject.Value);

                    //Act
                    remoteObject.OneWayGetSet = 5;
                    //Assert
                    Assert.AreEqual(0, hostedObject.Value);
                }
        }
Пример #3
0
        public void ShallKeepReferenceIfSubscribed(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
            {
                server.Add <IContract>(objectId, hostedObject);

                WeakReference weakRef;

                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    var remoteObject = client.Connect <IContract>(objectId);
                    remoteObject.ValueChanged += RemoteObjectOnValueChanged;

                    weakRef = new WeakReference(remoteObject);

                    Assert.IsTrue(weakRef.IsAlive);

                    //Act
                    remoteObject = null;
                    GC.Collect();

                    Assert.IsNull(remoteObject);
                    Assert.IsTrue(weakRef.IsAlive);
                }

                GC.Collect();

                Assert.IsFalse(weakRef.IsAlive);
            }
        }
Пример #4
0
        public void ShallReleaseIfNotUsed(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
            {
                server.Add <IContract>(objectId, hostedObject);

                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    var remoteObject = client.Connect <IContract>(objectId);
                    remoteObject.Value = 5;
                    Assert.AreEqual(5, remoteObject.Value);

                    var weakRef = new WeakReference(remoteObject);

                    Assert.IsTrue(weakRef.IsAlive);

                    //Act
                    remoteObject = null;
                    GC.Collect();

                    //Assert
                    Assert.IsNull(remoteObject);
                    Assert.IsFalse(weakRef.IsAlive);
                }
            }
        }
Пример #5
0
        public void ShallUseDefaultParametersIfAny(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    Assert.IsFalse(hostedObject.TwoWayCalled);

                    //Act
                    remoteObject.CallTwoWayWithDefaultParameter();

                    //Assert
                    Assert.AreEqual(new[] { 5 }, hostedObject.Parameters);

                    //Act
                    remoteObject.CallTwoWayWithDefaultParameter(6);

                    //Assert
                    Assert.AreEqual(new[] { 6 }, hostedObject.Parameters);
                }
        }
Пример #6
0
        public void ShallRethrowExceptionWhenCalledRemoteMethodsTwoWay(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    Assert.IsFalse(hostedObject.TwoWayWithExceptionCalled);

                    //Act
                    var e = Assert.Catch <FaultException>(() => { remoteObject.CallTwoWayWithException("qwerty"); });

                    //Assert
                    Assert.IsTrue(hostedObject.TwoWayWithExceptionCalled);
                    Assert.IsInstanceOf <FaultException>(e);
                    Assert.AreEqual("qwerty", e.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, e.ExceptionType);
                }
        }
Пример #7
0
        public void ShallGetValuesForProperties(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    //Act
                    hostedObject.Value        = 5;
                    hostedObject.ComplexValue = new ComplexParameter
                    {
                        A = 1,
                        B = true,
                        D = 123.123,
                        S = "qwerty"
                    };

                    //Assert
                    Assert.AreEqual(5, remoteObject.Get);
                    Assert.AreEqual(5, remoteObject.GetSet);
                    Assert.AreEqual(5, remoteObject.OneWayGetSet);
                    AssertComplexParameter(new ComplexParameter
                    {
                        A = 1,
                        B = true,
                        D = 123.123,
                        S = "qwerty"
                    }, remoteObject.ComplexGetSet);

                    //Act
                    hostedObject.Value        = 7;
                    hostedObject.ComplexValue = new ComplexParameter
                    {
                        A = 2,
                        B = false,
                        D = 234.234,
                        S = "asd"
                    };

                    //Assert
                    Assert.AreEqual(7, remoteObject.Get);
                    Assert.AreEqual(7, remoteObject.GetSet);
                    Assert.AreEqual(7, remoteObject.OneWayGetSet);
                    AssertComplexParameter(new ComplexParameter
                    {
                        A = 2,
                        B = false,
                        D = 234.234,
                        S = "asd"
                    }, remoteObject.ComplexGetSet);
                }
        }
Пример #8
0
        public void ShallRaiseExceptionForTwoWaySetters(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);
                    hostedObject.Value  = 0;
                    hostedObject.Action = () => throw new InvalidOperationException("qwerty");

                    //Act
                    var exception = Assert.Catch <FaultException>(() => { remoteObject.Set = 5; });
                    //Assert
                    Assert.AreEqual(0, hostedObject.Value);
                    Assert.AreEqual("qwerty", exception.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, exception.ExceptionType);

                    //Act
                    exception = Assert.Catch <FaultException>(() => { remoteObject.GetSet = 5; });
                    //Assert
                    Assert.AreEqual(0, hostedObject.Value);
                    Assert.AreEqual("qwerty", exception.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, exception.ExceptionType);

                    //Act
                    exception = Assert.Catch <FaultException>(() =>
                    {
                        remoteObject.ComplexGetSet = new ComplexParameter {
                            A = 5
                        };
                    });
                    //Assert
                    Assert.AreEqual(0, hostedObject.Value);
                    Assert.AreEqual("qwerty", exception.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, exception.ExceptionType);

                    //Act
                    ComplexParameter complex = null;
                    exception = Assert.Catch <FaultException>(() => { complex = remoteObject.ComplexGetSet; });
                    //Assert
                    Assert.AreEqual(null, complex);
                    Assert.AreEqual("qwerty", exception.Message);
                    Assert.AreEqual(typeof(InvalidOperationException).FullName, exception.ExceptionType);
                }
        }
        internal static ASBinCode.rtData.rtObjectBase createPureHostdOrLinkObject(Player player,Class cls)
        {
            if (cls.isLink_System)
            {
                ASBinCode.rtData.rtObjectBase rb; ASBinCode.rtData.rtObjectBase lr; string err;
                ASBinCode.rtti.Object         obj = createObject(player.swc,cls,null,out rb,out lr,out err);
                ASBinCode.rtData.rtObjectBase rtObj;
                if (lr != null)
                {
                    rtObj = lr;
                }
                else
                {
                    rtObj = new ASBinCode.rtData.rtObject(obj,null);
                }

                RunTimeScope scope = new RunTimeScope(
                    null
                    //player.genHeapFromCodeBlock(player.swc.blocks[cls.blockid])
                    ,cls.blockid,null,rtObj,
                    RunTimeScopeType.objectinstance);
                rtObj.objScope = scope;

                return(rtObj);
            }
            else if (cls.isUnmanaged)
            {
                ASBinCode.rtti.Object obj;
                if (cls.dynamic)
                {
                    obj = new HostedDynamicObject(cls);
                }
                else
                {
                    obj = new HostedObject(cls);
                }

                ASBinCode.rtData.rtObject rtObj = new ASBinCode.rtData.rtObject(obj,null);
                RunTimeScope scope = new RunTimeScope(
                    player.genHeapFromCodeBlock(player.swc.blocks[cls.blockid]),
                    cls.blockid,null,rtObj,RunTimeScopeType.objectinstance);
                rtObj.objScope = scope;


                return(rtObj);
            }
            else
            {
                throw new EngineException();
            }
        }
Пример #10
0
        public void ShallReleaseParentIfNotUsed(string serverAddress, string clientAddress)
        {
            //Arrange
            var parentObjectId = "1";
            var childObjectId  = "2";

            var parent = new HostedObject();

            parent.Child = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
            {
                server.Add <IContract>(parentObjectId, parent);
                server.Add(childObjectId, parent.Child);

                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    var parentRemoteObject = client.Connect <IContract>(parentObjectId);

                    var childRemoteObject = parentRemoteObject.Child;
                    childRemoteObject.Value = 5;
                    Assert.AreEqual(5, childRemoteObject.Value);

                    var parentWeakRef = new WeakReference(parentRemoteObject);
                    var childWeakRef  = new WeakReference(childRemoteObject);

                    Assert.IsTrue(parentWeakRef.IsAlive);
                    Assert.IsTrue(childWeakRef.IsAlive);

                    //Act
                    parentRemoteObject = null;
                    GC.Collect();

                    //Assert
                    Assert.AreEqual(5, childRemoteObject.Value);
                    Assert.IsNull(parentRemoteObject);
                    Assert.IsFalse(parentWeakRef.IsAlive);
                    Assert.IsTrue(childWeakRef.IsAlive);

                    //Act
                    childRemoteObject = null;
                    GC.Collect();

                    //Assert
                    Assert.IsNull(childRemoteObject);
                    Assert.IsFalse(parentWeakRef.IsAlive);
                    Assert.IsFalse(childWeakRef.IsAlive);
                }
            }
        }
Пример #11
0
        public void ShallRaiseEventWithoutParameters(string serverAddress, string client1Address, string client2Address)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client1 = new EloquentClient(serverAddress, client1Address))
                    using (var client2 = new EloquentClient(serverAddress, client2Address))
                    {
                        server.Add <IContract>(objectId, hostedObject);

                        var remoteObject1 = client1.Connect <IContract>(objectId);
                        var remoteObject2 = client2.Connect <IContract>(objectId);

                        var noParameterEvent1Called = false;
                        var noParameterEvent2Called = false;

                        var autoResetEvent1 = new AutoResetEvent(false);
                        var autoResetEvent2 = new AutoResetEvent(false);

                        remoteObject1.NoParameterEvent += () =>
                        {
                            noParameterEvent1Called = true;
                            autoResetEvent1.Set();
                        };
                        remoteObject2.NoParameterEvent += () =>
                        {
                            noParameterEvent2Called = true;
                            autoResetEvent2.Set();
                        };

                        //Act
                        Assert.IsFalse(noParameterEvent1Called);
                        Assert.IsFalse(noParameterEvent2Called);
                        hostedObject.SendNoParametersEvent();

                        autoResetEvent1.WaitOne(2000);
                        autoResetEvent2.WaitOne(2000);

                        //Assert
                        Assert.IsTrue(noParameterEvent1Called);

                        //TODO: Failed during long run
                        Assert.IsTrue(noParameterEvent2Called);
                    }
        }
Пример #12
0
        public void ShallHostAgain(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
            {
                server.Add <IContract>(objectId, hostedObject);

                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    var remoteObject = client.Connect <IContract>(objectId);

                    //Act
                    remoteObject.Value = 5;

                    //Assert
                    Assert.AreEqual(5, remoteObject.Value);
                }
            }

            using (var server = new EloquentServer(serverAddress))
            {
                server.Add <IContract>(objectId, hostedObject);

                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    var remoteObject = client.Connect <IContract>(objectId);

                    //Assert
                    Assert.AreEqual(5, remoteObject.Value);

                    //Act
                    remoteObject.Value = 6;

                    //Assert
                    Assert.AreEqual(6, remoteObject.Value);
                }
            }
        }
Пример #13
0
        public void ShallCallRemoteMethodsTwoWay(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    Assert.IsFalse(hostedObject.TwoWayCalled);

                    //Act
                    remoteObject.CallTwoWay();

                    //Assert
                    Assert.IsTrue(hostedObject.TwoWayCalled);
                }
        }
Пример #14
0
        public void ShallHideExceptionWhenCalledRemoteMethodsOneWay(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    Assert.IsFalse(hostedObject.OneWayWithExceptionCalled);

                    //Act
                    remoteObject.CallOneWayWithException();
                    hostedObject.WaitCallCompleted();

                    //Assert
                    Assert.IsTrue(hostedObject.OneWayWithExceptionCalled);
                }
        }
        private static ASBinCode.rtti.Object createObject(CSWC swc,Class cls,InstanceCreator creator,
                                                          out ASBinCode.rtData.rtObjectBase rtObjectBase,
                                                          out ASBinCode.rtData.rtObjectBase linkrtobj,
                                                          out string errinfo
                                                          )
        {
            ASBinCode.rtti.Object obj = null;// = new ASBinCode.rtti.Object(cls);
            rtObjectBase = null; linkrtobj = null; errinfo = null;
            if (cls.isLink_System)
            {
                if (creator != null)
                {
                    StackSlot stackSlot = creator.objectStoreToSlot as StackSlot;
                    if (stackSlot != null)
                    {
                        rtObjectBase = stackSlot.getStackCacheObject(cls);
                        return(rtObjectBase.value);
                    }
                }


                var func = (NativeFunctionBase)swc.class_Creator[cls];

                string err; int no;
                ASBinCode.rtData.rtObjectBase rtObj =
                    func.execute(null,null,cls,out err,out no) as ASBinCode.rtData.rtObjectBase;
                linkrtobj = rtObj;
                if (rtObj == null)
                {
                    errinfo = cls.ToString() + " create linksystem object failed";
                    return(null);
                }
                else
                {
                    return(rtObj.value);
                }
            }
            else if (cls.isCrossExtend)
            {
                var scls = cls.super;
                while (!scls.isLink_System)
                {
                    scls = scls.super;
                }

                var cextend = scls.staticClass.linkObjCreator;
                var func    = swc.getNativeFunction(((ClassMethodGetter)cextend.bindField).functionId);

                if (func == null)
                {
                    errinfo = cls.ToString() + " create crossextend object failed, creator function not found";
                    return(null);
                }

                string err; int no;
                ASBinCode.rtData.rtObjectBase rtObj =
                    func.execute(null,null,cls,out err,out no) as ASBinCode.rtData.rtObjectBase;
                linkrtobj = rtObj;
                if (rtObj == null)
                {
                    errinfo = cls.ToString() + " create crossextend object failed";
                    return(null);
                }
                else
                {
                    LinkSystemObject lo = (LinkSystemObject)rtObj.value;
                    return(lo);
                }
            }
            else if (
                swc.DictionaryClass != null
                &&
                ClassMemberFinder.isInherits(cls,swc.DictionaryClass))
            {
                obj = new DictionaryObject(cls);
            }
            else if (cls.dynamic)
            {
                if (cls.isUnmanaged)
                {
                    obj = new HostedDynamicObject(cls);
                }
                else
                {
                    obj = new DynamicObject(cls);
                }
            }
            else if (cls.isUnmanaged)
            {
                obj = new HostedObject(cls);
            }
            else
            {
                obj = new ASBinCode.rtti.Object(cls);
            }

            return(obj);
        }
Пример #16
0
        public void ShallCallRemoteMethodsOneWayWithParameters(string serverAddress, string clientAddress)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client = new EloquentClient(serverAddress, clientAddress))
                {
                    server.Add <IContract>(objectId, hostedObject);

                    var remoteObject = client.Connect <IContract>(objectId);

                    Assert.IsFalse(hostedObject.OneWayWithParameterCalled);

                    //Act
                    var complexParameter1 = new ComplexParameter
                    {
                        A = 5,
                        B = true,
                        D = 543.543,
                        S = "asd"
                    };
                    var complexParameter2 = new ComplexParameter
                    {
                        A = 6,
                        B = false,
                        D = 345.345,
                        S = "zxc"
                    };
                    var complexParameter3 = new ComplexParameter
                    {
                        A = 5,
                        B = true,
                        D = 543.543,
                        S = "123"
                    };

                    remoteObject.CallOneWayWithParameters(
                        1,
                        false,
                        "qwerty",
                        123.123,
                        complexParameter1,
                        new[] { 1, 2, 3 },
                        new[] { false, true, false },
                        new[] { "123", "qwe", "zxc" },
                        new[] { 1.123, 2.234, 3.345 },
                        new[]
                    {
                        complexParameter2,
                        complexParameter3,
                    });
                    hostedObject.WaitCallCompleted();

                    //Assert
                    Assert.IsTrue(hostedObject.OneWayWithParameterCalled);

                    Assert.AreEqual(1, hostedObject.Parameters[0]);
                    Assert.AreEqual(false, hostedObject.Parameters[1]);
                    Assert.AreEqual("qwerty", hostedObject.Parameters[2]);
                    Assert.AreEqual(123.123, hostedObject.Parameters[3]);
                    AssertComplexParameter(complexParameter1, (ComplexParameter)hostedObject.Parameters[4]);
                    Assert.AreEqual(new[] { 1, 2, 3 }, hostedObject.Parameters[5]);
                    Assert.AreEqual(new[] { false, true, false }, hostedObject.Parameters[6]);
                    Assert.AreEqual(new[] { "123", "qwe", "zxc" }, hostedObject.Parameters[7]);
                    Assert.AreEqual(new[] { 1.123, 2.234, 3.345 }, hostedObject.Parameters[8]);
                    Assert.AreEqual(2, ((ComplexParameter[])hostedObject.Parameters[9]).Length);
                    AssertComplexParameter(complexParameter2, ((ComplexParameter[])hostedObject.Parameters[9])[0]);
                    AssertComplexParameter(complexParameter3, ((ComplexParameter[])hostedObject.Parameters[9])[1]);

                    //Act
                    hostedObject.OneWayWithParameterCalled = false;
                    hostedObject.Parameters = null;

                    Assert.IsFalse(hostedObject.OneWayWithParameterCalled);

                    remoteObject.CallOneWayWithParameters(
                        2,
                        true,
                        null,
                        234.234,
                        null,
                        null,
                        null,
                        null,
                        null,
                        null);
                    hostedObject.WaitCallCompleted();

                    //Assert
                    Assert.IsTrue(hostedObject.OneWayWithParameterCalled);

                    Assert.AreEqual(2, hostedObject.Parameters[0]);
                    Assert.AreEqual(true, hostedObject.Parameters[1]);
                    Assert.AreEqual(null, hostedObject.Parameters[2]);
                    Assert.AreEqual(234.234, hostedObject.Parameters[3]);
                    Assert.AreEqual(null, hostedObject.Parameters[4]);
                    Assert.AreEqual(null, hostedObject.Parameters[5]);
                    Assert.AreEqual(null, hostedObject.Parameters[6]);
                    Assert.AreEqual(null, hostedObject.Parameters[7]);
                }
        }
Пример #17
0
        public override void execute3(RunTimeValueBase thisObj, FunctionDefine functionDefine, SLOT returnSlot,SourceToken token,StackFrame stackframe,out bool success)
        {
//
            //((rtObject)thisObj).value.memberData[0].directSet(newvalue);

            string pattern = TypeConverter.ConvertToString(argements[0],stackframe,token);
            string options = TypeConverter.ConvertToString(argements[1],stackframe,token);

            string pv = "/";

            if (pattern != null)
            {
                pv = pv + pattern;
            }

            pv = pv + "/";



            var Options = System.Text.RegularExpressions.RegexOptions.None;

            if (options != null)
            {
                pv = pv + options;

                if (options.IndexOf('s') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[1].directSet(rtBoolean.True);
                    Options |= System.Text.RegularExpressions.RegexOptions.Singleline;
                }

                if (options.IndexOf('x') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[2].directSet(rtBoolean.True);
                    Options |= System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace;
                }

                if (options.IndexOf('g') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[3].directSet(rtBoolean.True);
                }

                if (options.IndexOf('i') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[4].directSet(rtBoolean.True);
                    Options |= System.Text.RegularExpressions.RegexOptions.IgnoreCase;
                }

                if (options.IndexOf('m') >= 0)
                {
                    ((rtObjectBase)thisObj).value.memberData[5].directSet(rtBoolean.True);
                    Options |= System.Text.RegularExpressions.RegexOptions.Multiline;
                }
            }

            ((rtObjectBase)thisObj).value.memberData[0].directSet(new rtString(pv));

            if (pattern != null)
            {
                ((rtObjectBase)thisObj).value.memberData[6].directSet(new rtString(pattern));
            }
            else
            {
                ((rtObjectBase)thisObj).value.memberData[6].directSet(rtNull.nullptr);
            }

            ((rtObjectBase)thisObj).value.memberData[7].directSet(new rtNumber(0));

            try
            {
                System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pattern, Options);
                HostedObject hobj = new HostedObject(stackframe.player.swc.ObjectClass);
                hobj.hosted_object = regex;
                rtObject rtobj = new rtObject(hobj, null);

                ((rtObjectBase)thisObj).value.memberData[8].directSet(rtobj);


                success = true;
                returnSlot.directSet(rtUndefined.undefined);
            }
            catch (ArgumentException ex)
            {
                success = false;
                stackframe.throwArgementException(token, ex.Message);
            }

            //((HostedObject)((rtObject)thisObj).value).hosted_object = regex;
        }
Пример #18
0
        public void ShallRaiseEventWithParameters(string serverAddress, string client1Address, string client2Address)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client1 = new EloquentClient(serverAddress, client1Address))
                    using (var client2 = new EloquentClient(serverAddress, client2Address))
                    {
                        server.Add <IContract>(objectId, hostedObject);

                        var remoteObject1 = client1.Connect <IContract>(objectId);
                        var remoteObject2 = client2.Connect <IContract>(objectId);

                        object[] parameters1 = null;
                        object[] parameters2 = null;

                        var autoResetEvent1 = new AutoResetEvent(false);
                        var autoResetEvent2 = new AutoResetEvent(false);

                        remoteObject1.EventWithParameters += (i, b, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) =>
                        {
                            parameters1 = new object[]
                            {
                                i, b, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10
                            };

                            autoResetEvent1.Set();
                        };

                        remoteObject2.EventWithParameters += (i, b, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) =>
                        {
                            parameters2 = new object[]
                            {
                                i, b, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10
                            };

                            autoResetEvent2.Set();
                        };

                        //Act
                        Assert.IsNull(parameters1);
                        Assert.IsNull(parameters2);

                        //Act
                        var complexParameter1 = new ComplexParameter
                        {
                            A = 5,
                            B = true,
                            D = 543.543,
                            S = "asd"
                        };
                        var complexParameter2 = new ComplexParameter
                        {
                            A = 6,
                            B = false,
                            D = 345.345,
                            S = "zxc"
                        };
                        var complexParameter3 = new ComplexParameter
                        {
                            A = 5,
                            B = true,
                            D = 543.543,
                            S = "123"
                        };

                        hostedObject.SendEventWithParameters(
                            1,
                            false,
                            "qwerty",
                            123.123,
                            complexParameter1,
                            new[] { 1, 2, 3 },
                            new[] { false, true, false },
                            new[] { "123", "qwe", "zxc" },
                            new[] { 1.123, 2.234, 3.345 },
                            new[]
                        {
                            complexParameter2,
                            complexParameter3,
                        });

                        autoResetEvent1.WaitOne(2000);
                        autoResetEvent2.WaitOne(2000);

                        Assert.NotNull(parameters1);
                        Assert.NotNull(parameters2);

                        Assert.AreEqual(1, parameters1[0]);
                        Assert.AreEqual(false, parameters1[1]);
                        Assert.AreEqual("qwerty", parameters1[2]);
                        Assert.AreEqual(123.123, parameters1[3]);
                        AssertComplexParameter(complexParameter1, (ComplexParameter)parameters1[4]);
                        Assert.AreEqual(new[] { 1, 2, 3 }, parameters1[5]);
                        Assert.AreEqual(new[] { false, true, false }, parameters1[6]);
                        Assert.AreEqual(new[] { "123", "qwe", "zxc" }, parameters1[7]);
                        Assert.AreEqual(new[] { 1.123, 2.234, 3.345 }, parameters1[8]);
                        Assert.AreEqual(2, ((ComplexParameter[])parameters1[9]).Length);
                        AssertComplexParameter(complexParameter2, ((ComplexParameter[])parameters1[9])[0]);
                        AssertComplexParameter(complexParameter3, ((ComplexParameter[])parameters1[9])[1]);


                        Assert.AreEqual(1, parameters2[0]);
                        Assert.AreEqual(false, parameters2[1]);
                        Assert.AreEqual("qwerty", parameters2[2]);
                        Assert.AreEqual(123.123, parameters2[3]);
                        AssertComplexParameter(complexParameter1, (ComplexParameter)parameters2[4]);
                        Assert.AreEqual(new[] { 1, 2, 3 }, parameters2[5]);
                        Assert.AreEqual(new[] { false, true, false }, parameters2[6]);
                        Assert.AreEqual(new[] { "123", "qwe", "zxc" }, parameters2[7]);
                        Assert.AreEqual(new[] { 1.123, 2.234, 3.345 }, parameters2[8]);
                        Assert.AreEqual(2, ((ComplexParameter[])parameters2[9]).Length);
                        AssertComplexParameter(complexParameter2, ((ComplexParameter[])parameters2[9])[0]);
                        AssertComplexParameter(complexParameter3, ((ComplexParameter[])parameters2[9])[1]);
                    }
        }
Пример #19
0
        public void ShallRaiseRegularEventWithClientAsSender(string serverAddress, string client1Address,
                                                             string client2Address)
        {
            //Arrange
            var objectId = "obj";

            var hostedObject = new HostedObject();

            using (var server = new EloquentServer(serverAddress))
                using (var client1 = new EloquentClient(serverAddress, client1Address))
                    using (var client2 = new EloquentClient(serverAddress, client2Address))
                    {
                        server.Add <IContract>(objectId, hostedObject);

                        var remoteObject1 = client1.Connect <IContract>(objectId);
                        var remoteObject2 = client2.Connect <IContract>(objectId);
                        var remoteObject3 = client2.Connect <IContract>(objectId);
                        Assert.AreNotSame(remoteObject1, remoteObject2);
                        Assert.AreNotSame(remoteObject2, remoteObject3);

                        object           sender1 = null;
                        object           sender2 = null;
                        object           sender3 = null;
                        object           sender4 = null;
                        ComplexParameter args1   = null;
                        ComplexParameter args2   = null;
                        ComplexParameter args3   = null;
                        ComplexParameter args4   = null;

                        var autoResetEvent1 = new AutoResetEvent(false);
                        var autoResetEvent2 = new AutoResetEvent(false);
                        var autoResetEvent3 = new AutoResetEvent(false);
                        var autoResetEvent4 = new AutoResetEvent(false);

                        remoteObject1.RegularEvent += (s, args) =>
                        {
                            sender1 = s;
                            args1   = args;
                            autoResetEvent1.Set();
                        };
                        remoteObject2.RegularEvent += (s, args) =>
                        {
                            sender2 = s;
                            args2   = args;
                            autoResetEvent2.Set();
                        };
                        remoteObject3.RegularEvent += (s, args) =>
                        {
                            sender3 = s;
                            args3   = args;
                            autoResetEvent3.Set();
                        };
                        remoteObject3.RegularEvent += (s, args) =>
                        {
                            sender4 = s;
                            args4   = args;
                            autoResetEvent4.Set();
                        };

                        var complexParameter1 = new ComplexParameter
                        {
                            A = 5,
                            B = true,
                            D = 543.543,
                            S = "asd"
                        };

                        Assert.IsNull(sender1);
                        Assert.IsNull(sender2);
                        Assert.IsNull(sender3);
                        Assert.IsNull(sender4);
                        Assert.IsNull(args1);
                        Assert.IsNull(args2);
                        Assert.IsNull(args3);
                        Assert.IsNull(args4);

                        //Act
                        hostedObject.SendRegularEvent(complexParameter1);

                        autoResetEvent1.WaitOne(2000);
                        autoResetEvent2.WaitOne(2000);
                        autoResetEvent3.WaitOne(2000);
                        autoResetEvent4.WaitOne(2000);

                        //Assert
                        Assert.AreSame(remoteObject1, sender1);
                        Assert.AreSame(remoteObject2, sender2);
                        Assert.AreSame(remoteObject3, sender3);
                        Assert.AreSame(remoteObject3, sender4);
                        AssertComplexParameter(complexParameter1, args1);
                        AssertComplexParameter(complexParameter1, args2);
                        AssertComplexParameter(complexParameter1, args3);
                        AssertComplexParameter(complexParameter1, args4);
                    }
        }