Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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()));
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }