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)); }
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)); }
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)); }
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)); }
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)); }