예제 #1
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="task"></param>
        public async void DoTask(IHttpTask task)
        {
            if (task is GetTask)
            {
                var t     = task as GetTask;
                var bytes = await client.DownloadDataTaskAsync(new Uri(t.Url));

                t.CallBack(bytes);
            }
            else if (task is GetFileTask)
            {
                var t = task as GetFileTask;
                await client.DownloadFileTaskAsync(t.Url, t.FileSavePath);

                t.CallBack(new byte[0]);
            }
            else if (task is PostFileTask)
            {
            }
            else if (task is PostTask)
            {
                var t = task as PostTask;
                await client.UploadDataTaskAsync(new Uri(t.Url), System.Text.Encoding.UTF8.GetBytes(t.UpLoadData));
            }

            DoNext();
        }
예제 #2
0
 /// <summary>
 /// 通过队列回调方式执行
 /// </summary>
 /// <param name="task"></param>
 public void DoTaskByCallBack(IHttpTask task)
 {
     httpTaskQue.Enqueue(task);
     if (curTask == null)
     {
         DoNext();
     }
 }
 protected virtual void Remove(IHttpTask task)
 {
     lock (this.syncLock)
     {
         task.PropertyChanged -= this.OnTaskPropertyChanged;
         this.currentTasks.Remove(task.Identifier);
         this.OnChange(task, TaskListChange.Remove);
     }
 }
 protected virtual void Add(IHttpTask task)
 {
     lock (this.syncLock)
     {
         task.PropertyChanged += this.OnTaskPropertyChanged;
         this.currentTasks.Add(task.Identifier, task);
         this.OnChange(task, TaskListChange.Add);
     }
 }
        protected override void Add(IHttpTask task)
        {
            if (!(task is IIosHttpTask ios))
            {
                throw new ArgumentException("You must inherit from IIosHttpTask");
            }

            this.sessionDelegate.AddTask(ios);
            base.Add(task);
        }
예제 #6
0
 /// <summary>
 /// 执行任务
 /// </summary>
 /// <param name="task"></param>
 public void DoTask(IHttpTask task)
 {
     if (task is GetTask)
     {
     }
     else if (task is PostTask)
     {
         var data = task as PostTask;
         client.PostData(data.Url, data.UpLoadData);
     }
 }
예제 #7
0
        private void DoNext()
        {
            //判断什么时候退出
            if (httpTaskQue.Count == 0)
            {
                curTask = null;
                return;
            }

            curTask = httpTaskQue.Dequeue();
            DoTask(curTask);
        }
예제 #8
0
 public HttpTaskViewModel(IHttpTask task)
 {
     this.task     = task;
     this.Cancel   = new Acr.Command(task.Cancel);
     this.MoreInfo = new Acr.Command(() =>
     {
         if (task.Status == TaskStatus.Error)
         {
             UserDialogs.Instance.Alert(task.Exception.ToString(), "Error");
         }
     });
 }
예제 #9
0
        /// <summary>
        /// 异步堵塞
        /// </summary>
        /// <param name="task"></param>
        /// <returns></returns>
        public string DoTaskAsync(IHttpTask task)
        {
            if (task is GetTask)
            {
                var data   = task as GetTask;
                var result = client.GetAsync(data.Url);
                return(result);
            }
            else if (task is PostTask)
            {
                var data   = task as PostTask;
                var result = client.PostDataAsync(data.Url, data.UpLoadData);
                return(result);
            }

            return("error");
        }
        public HttpTaskViewModel(IHttpTask task)
        {
            this.task     = task;
            this.Cancel   = new Command(task.Cancel);
            this.MoreInfo = new Command(() =>
            {
                if (task.Status == TaskStatus.Error)
                {
                    UserDialogs.Instance.Alert(task.Exception.ToString(), "Error");
                }
            });

            this.taskSub = Observable
                           .Create <IHttpTask>(ob =>
            {
                var handler = new PropertyChangedEventHandler((sender, args) => ob.OnNext(this.task));
                this.task.PropertyChanged += handler;
                return(() => this.task.PropertyChanged -= handler);
            })
                           .Sample(TimeSpan.FromSeconds(1))
                           .Subscribe(x => Device.BeginInvokeOnMainThread(() => this.OnPropertyChanged(String.Empty)));
        }
 public TaskListEventArgs(IHttpTask task, TaskListChange change)
 {
     this.Task   = task;
     this.Change = change;
 }
 protected virtual void OnChange(IHttpTask task, TaskListChange change)
 => this.CurrentTasksChanged?.Invoke(this, new TaskListEventArgs(task, change));