示例#1
0
        public override bool TryGetIndex(
            GetIndexBinder binder, object[] indexes, out object result)
        {
            result = null;
            if (Connector.ServerIsClosed)
            {
                return(false);
            }

            var ms = new MemoryStream();
            var bw = new BinaryWriter(ms);

            bw.Write((byte)CallMethod.GetIndex);
            bw.Write(Target);
            bw.Write(indexes.Length);
            foreach (var arg in indexes)
            {
                WorkVariants.WriteObject(arg, bw);
            }

            bw.Flush();

            var res = Connector.SendMessage(ms);

            return(GetResult(res, ref result, Connector));
        }
示例#2
0
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = null;
            if (Connector.ServerIsClosed)
            {
                return(false);
            }

            var memberName = binder.Name;

            if (memberName == "async")
            {
                result = new AsyncAutoWrapClient(Target, Connector);
                return(true);
            }

            var ms = new MemoryStream();
            var bw = new BinaryWriter(ms);

            bw.Write((byte)CallMethod.GetMember);
            bw.Write(Target);
            bw.Write(memberName);
            var res = Connector.SendMessage(ms);

            return(GetResult(res, ref result, Connector));
        }
示例#3
0
        public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
        {
            result = null;
            if (Connector.ServerIsClosed)
            {
                return(false);
            }

            if (args.Length == 1 && ReferenceEquals(args[0], FlagDeleteObject))
            {
                Dispose(true);
                return(true);
            }

            var ms = new MemoryStream();
            var bw = new BinaryWriter(ms);

            bw.Write((byte)CallMethod.CallDelegate);
            bw.Write(Target);

            bw.Write(args.Length);
            foreach (var arg in args)
            {
                WorkVariants.WriteObject(arg, bw);
            }

            bw.Flush();

            var res = Connector.SendMessage(ms);

            return(GetResult(res, ref result, Connector));
        }
示例#4
0
        public override bool TryUnaryOperation(UnaryOperationBinder binder, out object result)
        {
            result = null;

            var ms = new MemoryStream();
            var bw = new BinaryWriter(ms);

            bw.Write((byte)CallMethod.CallUnaryOperation);
            bw.Write(Target);
            bw.Write((byte)binder.Operation);

            bw.Flush();
            var res = Connector.SendMessage(ms);

            return(GetResult(res, ref result, Connector));
        }
示例#5
0
        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            if (Connector.ServerIsClosed)
            {
                return(false);
            }

            var ms = new MemoryStream();
            var bw = new BinaryWriter(ms);

            bw.Write((byte)CallMethod.SetMember);
            bw.Write(Target);
            bw.Write(binder.Name);
            WorkVariants.WriteObject(value, bw);

            var    res    = Connector.SendMessage(ms);
            object result = null;

            return(GetResult(res, ref result, Connector));
        }