Esempio n. 1
0
        /// <summary>
        /// Called when [fetch request].
        /// </summary>
        /// <param name="package">The package.</param>
        /// <returns></returns>
        private async Task <WebPackage> OnFetchRequest(WebPackage package)
        {
            WebPackage webPackage = new WebPackage();

            webPackage.Id          = package.Id;
            webPackage.PackageType = PackageType.FetchResult;
            try
            {
                if (package.FetchData.Type == typeof(AssassinImage).AssemblyQualifiedName)
                {
                    package.EntityData.LoadImages();
                    webPackage.FetchData.Result_Images = new List <AssassinImage>()
                    {
                        package.EntityData.GetImage() ?? new AssassinImage()
                    };
                }
                else
                {
                    if (package.FetchData.IdList)
                    {
                        webPackage.FetchData.Result_IdList = new DataRepository().GetIdList(package.FetchData.Type, package.FetchData.Query, package.FetchData.TakeCount).ToList();
                    }
                    else if (package.FetchData.TakeCount > 0)
                    {
                        IList result = new DataRepository().GetFirst(webPackage.FetchData.Type, webPackage.FetchData.TakeCount, webPackage.FetchData.Skip, webPackage.FetchData.Query, webPackage.FetchData.IncludeAll);
                        webPackage.FetchData.Result_Entities = result.Cast <BaseModel>().ToList();
                    }
                    else if (!string.IsNullOrEmpty(webPackage.FetchData.Query))
                    {
                        IList result = new DataRepository().GetListByQuery(webPackage.FetchData.Type, webPackage.FetchData.Query, webPackage.FetchData.IncludeAll);
                        AssassinDataService.OnNotify?.Invoke(this, "returning " + result.Count + " items", LogLevel.Debug);
                        webPackage.FetchData.Result_Entities = result.Cast <BaseModel>().ToList();
                    }
                }

                return(webPackage);
            }
            catch (Exception ex)
            {
                webPackage.FetchData.Result_Exception = ex;
                AssassinDataService.OnNotify.Invoke(this, ex.ToText("Fetch error"), LogLevel.Error);
            }

            await Task.Delay(1);

            return(webPackage);
        }
Esempio n. 2
0
 /// <summary>
 /// Called when a streaming package was received
 /// </summary>
 /// <param name="package">The package.</param>
 /// <param name="stream">The stream.</param>
 /// <returns>a task</returns>
 private async Task OnStreaming(WebPackage package, IStream stream)
 {
     try
     {
         AssassinDataService.OnNotify?.Invoke(this, "Package received: " + package.Method, LogLevel.Debug);
         if (package.Method == PackageMethod.Insert)
         {
             if (package.AssassinImage != null)
             {
                 package.AssassinImage.Save();
             }
             else
             {
                 await DataHandler.Insert(package.EntityData);
             }
         }
         else if (package.Method == PackageMethod.Update)
         {
             if (package.AssassinImage != null)
             {
                 package.AssassinImage.Save();
             }
             else
             {
                 await DataHandler.Update(package.EntityData);
             }
         }
         else if (package.Method == PackageMethod.Delete)
         {
             if (package.AssassinImage != null)
             {
                 package.AssassinImage.Delete();
             }
             else
             {
                 package.EntityData.Archived = true;
                 await DataHandler.Update(package.EntityData);
             }
         }
     }
     catch (Exception ex)
     {
         AssassinDataService.OnNotify?.Invoke(this, ex.ToText("Package error"), LogLevel.Error);
     }
 }
Esempio n. 3
0
 /// <summary>
 /// Adds the specific data model on the server.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="data">The <see cref="object" /></param>
 /// <returns>a task</returns>
 public async Task Insert <T>(T data) where T : BaseModel
 {
     try
     {
         WebPackage package = new WebPackage()
         {
             PackageType = PackageType.Command,
             EntityData  = data,
             Method      = PackageMethod.Insert
         };
         this.webservice.Send(package);
         await Task.Delay(1);
     }
     catch (Exception ex)
     {
         AssassinDataService.OnNotify?.Invoke(this, ex.ToText("Error sending data to server - method Insert failed."), LogLevel.Error);
     }
 }
Esempio n. 4
0
 /// <summary>
 /// Deletes a image from the server.
 /// </summary>
 /// <param name="image">The image.</param>
 /// <returns>a task</returns>
 internal async Task DeleteImage(AssassinImage image)
 {
     try
     {
         WebPackage package = new WebPackage()
         {
             PackageType   = PackageType.Command,
             AssassinImage = image,
             Method        = PackageMethod.Delete
         };
         this.webservice.Send(package);
         image.Synced = true;
         await Task.Delay(1);
     }
     catch (Exception ex)
     {
         AssassinDataService.OnNotify?.Invoke(this, ex.ToText("Error sending data to server - method Delete failed."), LogLevel.Error);
     }
 }
Esempio n. 5
0
        /// <summary>
        /// Requests the images for a specific entity from the server.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="BaseModel">The BaseModel.</param>
        /// <returns>a task</returns>
        internal async Task <T> GetImage <T>(T data) where T : BaseModel
        {
            WebPackage package = new WebPackage()
            {
                PackageType = PackageType.Fetch,
                EntityData  = data
            };

            try
            {
                List <T> result = new List <T>();

                package.FetchData = new FetchData()
                {
                    Type = typeof(AssassinImage).AssemblyQualifiedName
                };

                var fetchResult = await this.webservice.Fetch(package);

                if (fetchResult.FetchData.Result_Exception != null)
                {
                    throw fetchResult.FetchData.Result_Exception;
                }

                if (fetchResult.FetchData.Result_Images != null)
                {
                    data.SetImage(fetchResult.FetchData.Result_Images.FirstOrDefault());
                    fetchResult.FetchData.Result_Images.FirstOrDefault().Save();
                }

                return(data);
            }
            catch (Exception ex)
            {
                AssassinDataService.OnNotify?.Invoke(this, ex.ToText("Error fetching data from server - method GetAll failed."), LogLevel.Error);
            }
            return(null);
        }
Esempio n. 6
0
 private async Task <WebPackage> OnAuthenticate(WebPackage package)
 {
     return(await AuthenticateUser?.Invoke(package));
 }
Esempio n. 7
0
        /// <summary>
        /// The GetPackage
        /// </summary>
        /// <returns>The <see cref="Task{SocketMessage}"/></returns>
        public async Task <WebPackage> GetPackage()
        {
            while (SocketStream.Connected && !(SocketStream.MainStream as NetworkStream).DataAvailable)
            {
                await Task.Delay(1);
            }

            WebPackage package = null;

            try
            {
                if (SocketStream.Connected)
                {
                    int         packageSize  = 0;
                    List <byte> totalPackage = new List <byte>();
                    DateTime    lastReceive  = DateTime.MinValue;
                    while (package == null)
                    {
                        // Receive header
                        if (SocketStream.Client.Available >= 32)
                        {
                            byte[] sizeBuffer = new byte[32];
                            await SocketStream.MainStream.ReadAsync(sizeBuffer, 0, 32);

                            packageSize = BitConverter.ToInt32(sizeBuffer, 0);
                        }

                        // Receive package
                        while (totalPackage.Count < packageSize)
                        {
                            if (SocketStream.Client.Available > 0)
                            {
                                lastReceive = DateTime.Now;
                                int    missing    = packageSize - totalPackage.Count;
                                int    readBuffer = SocketStream.Client.Available - missing > 0 ? missing : SocketStream.Client.Available;
                                byte[] buffer     = new byte[readBuffer];
                                await SocketStream.MainStream.ReadAsync(buffer, 0, readBuffer);

                                totalPackage.AddRange(buffer);
                            }

                            // TIMEOUT CHECK
                            if (lastReceive != DateTime.MinValue && lastReceive.AddSeconds(30) < DateTime.Now)
                            {
                                throw new Exception("Stream Timeout");
                            }
                        }

                        if (totalPackage.Count > 0)
                        {
                            package = totalPackage.ToArray().FromBytes(typeof(WebPackage)) as WebPackage;
                            Debug.WriteLine("received package of size: " + (packageSize / 1000) + " kbytes");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Package receiving error: " + ex.Message);
            }

            return(package);
        }