public IEnumerable <IDataObject> GetListOf(IZetboxContext ctx, InterfaceType ifType, int ID, string property, out List <IStreamable> auxObjects) { List <IStreamable> tmpAuxObjects = null; int resultCount = 0; var _ifType = ifType.ToSerializableType(); var ticks = _perfCounter.IncrementGetListOf(ifType); try { byte[] bytes = null; MakeRequest(() => { bytes = _service.GetListOf(ZetboxGeneratedVersionAttribute.Current, _ifType, ID, property); }); IEnumerable <IDataObject> result = null; using (var sr = _readerFactory(new BinaryReader(new MemoryStream(bytes)))) { result = ReceiveObjects(ctx, sr, out tmpAuxObjects).Cast <IDataObject>(); } resultCount = result.Count(); auxObjects = tmpAuxObjects; return(result); } finally { _perfCounter.DecrementGetListOf(ifType, resultCount, ticks); } }
public static string ToJSON(this InterfaceType ifType) { DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(SerializableType)); using (var ms = new MemoryStream()) { s.WriteObject(ms, ifType.ToSerializableType()); return(GetEncoder().GetString(ms.ToArray())); } }
public IEnumerable <IDataObject> GetList(IZetboxContext ctx, InterfaceType ifType, int maxListCount, bool eagerLoadLists, IEnumerable <Expression> filter, IEnumerable <OrderBy> orderBy, out List <IStreamable> auxObjects) { int resultCount = 0; List <IStreamable> tmpAuxObjects = null; var _ifType = ifType.ToSerializableType(); var ticks = _perfCounter.IncrementGetList(ifType); try { var _filter = filter != null?filter.Select(f => SerializableExpression.FromExpression(f, _iftFactory)).ToArray() : null; var _orderBy = orderBy != null?orderBy.Select(o => new OrderByContract() { Type = o.Type, Expression = SerializableExpression.FromExpression(o.Expression, _iftFactory) }).ToArray() : null; byte[] bytes = null; MakeRequest(() => { bytes = _service.GetList( ZetboxGeneratedVersionAttribute.Current, _ifType, maxListCount, eagerLoadLists, _filter, _orderBy); }); Logging.Facade.DebugFormat("GetList retrieved: {0:n0} bytes", bytes.Length); IEnumerable <IDataObject> result = null; using (var sr = _readerFactory(new BinaryReader(new MemoryStream(bytes)))) { result = ReceiveObjects(ctx, sr, out tmpAuxObjects).Cast <IDataObject>(); } resultCount = result.Count(); auxObjects = tmpAuxObjects; return(result); } finally { _perfCounter.DecrementGetList(ifType, resultCount, ticks); } }
public object InvokeServerMethod(IZetboxContext ctx, InterfaceType ifType, int ID, string method, Type retValType, IEnumerable <Type> parameterTypes, IEnumerable <object> parameter, IEnumerable <IPersistenceObject> objects, IEnumerable <ObjectNotificationRequest> notificationRequests, out IEnumerable <IPersistenceObject> changedObjects, out List <IStreamable> auxObjects) { _perfCounter.IncrementServerMethodInvocation(); object result = null; auxObjects = null; byte[] retChangedObjectsArray = null; byte[] bytes = null; using (var parameterStream = new MemoryStream()) using (var parameterWriter = _writerFactory(new BinaryWriter(parameterStream))) { foreach (var paramVal in parameter) { parameterWriter.Write(paramVal); } using (var changedObjectsStream = new MemoryStream()) using (var sw = _writerFactory(new BinaryWriter(changedObjectsStream))) { SendObjects(objects, sw); var _ifType = ifType.ToSerializableType(); var _parameterTypes = parameterTypes.Select(t => _iftFactory(t).ToSerializableType()).ToArray(); var _parameterStream = parameterStream.ToArray(); var _changedObjStream = changedObjectsStream.ToArray(); var _nReq = notificationRequests.ToArray(); MakeRequest(() => { bytes = _service.InvokeServerMethod( out retChangedObjectsArray, ZetboxGeneratedVersionAttribute.Current, _ifType, ID, method, _parameterTypes, _parameterStream, _changedObjStream, _nReq); }); } } IEnumerable <IPersistenceObject> tmpChangedObjects = null; using (var resultStream = new MemoryStream(bytes)) { using (var retChangedObjects = new MemoryStream(retChangedObjectsArray)) using (var br = _readerFactory(new BinaryReader(retChangedObjects))) { tmpChangedObjects = ReceiveObjectList(ctx, br).Cast <IPersistenceObject>(); } resultStream.Seek(0, SeekOrigin.Begin); if (retValType.IsIStreamable()) { var br = _readerFactory(new BinaryReader(resultStream)); result = ReceiveObjects(ctx, br, out auxObjects).Cast <IPersistenceObject>().FirstOrDefault(); } else if (retValType.IsIEnumerable() && retValType.FindElementTypes().Any(t => t.IsIPersistenceObject())) { var br = _readerFactory(new BinaryReader(resultStream)); IList lst = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(retValType.FindElementTypes().Single(t => t.IsIPersistenceObject()))); foreach (object resultObj in ReceiveObjects(ctx, br, out auxObjects)) { lst.Add(resultObj); } result = lst; } else if (resultStream.Length > 0) { result = new BinaryFormatter().Deserialize(resultStream); } else { result = null; } changedObjects = tmpChangedObjects; return(result); } }