Exemplo n.º 1
0
        public Result <T> RunSteps(TransferTask task, Step <T>[] steps, UpdateProgressHandler update)
        {
            var ctx    = CreateContext(task);
            var result = Fail("unknown", WorkerStatus.UNKNOWN);

            for (var i = 0; i < steps.Length; i++)
            {
                var step   = steps[i];
                var stepNo = i + 1;
                var info   = StepInfo.From <T>(step);
                update(stepNo, info.Desc, WorkerStatus.IN_PROCESS);
                result = Retry(ctx, task, step, info);

                //???
                try
                {
                    result.Status.CurrentStep = stepNo;
                }
                catch (Exception)
                {
                    //skip
                }

                if (!result.IsSuccess)
                {
                    break;
                }
            }

            Dispose(ctx, result);

            return(result);
        }
Exemplo n.º 2
0
        /**
         * Simulate transfer task on provided storages.
         */
        private bool Transfer(TransferTask transferTask, Dictionary <VehicleUnit, StorageState> storages, ref TaskTransfers taskTransfers, ref TaskTransfers[] taskTransfersPerUnit, bool calculateTransfer = false, bool calculateTransferPerUnit = false)
        {
            ImmutableUniqueList <VehicleUnit> targetUnits = transferTask.GetTargetUnits();
            int targetUnitsCount = targetUnits.Count;

            Dictionary <VehicleUnit, int> loadingLimits = Manager <AdvancedTransferTaskAdapter> .Current?.GetCapacityLimits(transferTask, storages);

            for (int k = 0; k < targetUnitsCount; k++)
            {
                VehicleUnit targetUnit = targetUnits[k];
                if (storages.TryGetValue(targetUnit, out StorageState storage))
                {
                    if (storage.storage == null)
                    {
                        //autorefitable storage = cannot determine transfer
                        return(false);
                    }

                    int newCount;
                    if (loadingLimits != null && loadingLimits.TryGetValue(targetUnit, out int limit))
                    {
                        newCount = transferTask is LoadTask
                            ? Math.Max(storage.count, limit)
                            : Math.Min(storage.count, limit);
                    }
                    else
                    {
                        newCount = transferTask is LoadTask ? storage.storage.Capacity : 0;
                    }

                    if (storage.count != newCount)
                    {
                        if (calculateTransfer)
                        {
                            if (taskTransfers == null)
                            {
                                taskTransfers = new TaskTransfers();
                            }
                            taskTransfers.Add(storage.storage.Item, newCount - storage.count);
                        }
                        if (calculateTransferPerUnit)
                        {
                            int unitIndex = targetUnit.Vehicle.Units.IndexOf(targetUnit);
                            if (taskTransfersPerUnit == null)
                            {
                                taskTransfersPerUnit = new TaskTransfers[targetUnit.Vehicle.Units.Count];
                            }
                            if (taskTransfersPerUnit[unitIndex] == null)
                            {
                                taskTransfersPerUnit[unitIndex] = new TaskTransfers();
                            }
                            taskTransfersPerUnit[unitIndex].Add(storage.storage.Item, newCount - storage.count);
                        }
                        storage.count        = newCount;
                        storages[targetUnit] = storage;
                    }
                }
            }
            return(true);
        }
Exemplo n.º 3
0
        public ChinaRailwayApp(ulong id, string key, string gateway_url)
        {
            this.app_id = id;

            {
                var data_serializer = new DataSerializer(new JsonSerializerSettings()
                {
                    DateFormatString  = "yyyy-MM-dd HH:mm:ss.fff",
                    NullValueHandling = NullValueHandling.Ignore,
                    ContractResolver  = new Smartunicom.Runtime.Serialization.ContractResolver.JsonSnakeCasePropertyNamesContractResolver()
                });

                var data_signer = new RS256();
                data_signer.SetPrivateKey(key);

                var data_signer_all = new DataSignature(data_signer, data_verifier, data_hs256);

                {
                    this.order_task    = new ChargeTask(this.app_id, data_serializer, data_signer_all, gateway_url);
                    this.payment_task  = new PayTask(this.app_id, data_serializer, data_signer_all, gateway_url);
                    this.transfer_task = new TransferTask(this.app_id, data_serializer, data_signer_all, gateway_url);
                    this.webhook_task  = new WebHookTask(this.app_id, data_serializer, data_signer_all, gateway_url);
                    this.serializer    = new Serializer(data_serializer);
                }
            }
        }
Exemplo n.º 4
0
 public void RemoveObserver(Action <IStorageTaskSnapshot> observer)
 {
     if (_observerDict.ContainsKey(observer))
     {
         TransferTask.RemoveObserver(_observerDict[observer]);
         _observerDict.Remove(observer);
     }
 }
Exemplo n.º 5
0
        public async Task <ProtectedTaskflow <TransferTask> > CommitTransfer(TokenStore source, TokenStore destination, decimal transferAmount, string reference = null)
        {
            Trace($"Transfer {transferAmount} from {source} to {destination}");

            // Prepare
            var task = new TransferTask
            {
                SourceID               = source.AccountID,
                DestinationID          = destination.AccountID,
                SourceManagerPublicKey = source.Manager.PublicKey.ToString(),
                NetworkFee             = DefaultOperationFee,
                TransferAmount         = transferAmount,

                Reference = reference,
            };

            var flow = new ProtectedTaskflow <TransferTask>(task);

            try
            {
                Trace("Prepare Transfer");
                flow.Task = task = await Connection.PrepareTransfer(task);
            }
            catch
            {
                flow.Update(TaskProgress.Failed);
            }

            if (flow.IsFailed)
            {
                return(flow);
            }

            // External Signing
            if (await Sign(task, source.Manager))
            {
                try
                {
                    // Submit
                    Trace("Execute CreateContract");
                    flow.Task = await Connection.Transfer(task);

                    flow.SetPending(this);
                }
                catch (Exception e)
                {
                    Trace(e);
                    flow.Update(TaskProgress.Failed);
                }
            }
            else
            {
                Trace("Sign cancelled");
                flow.Update(TaskProgress.Cancelled);
            }

            return(flow);
        }
Exemplo n.º 6
0
        public void AddObserver(StorageTaskStatus status, Action <IStorageTaskSnapshot> observer)
        {
            if (TransferTask == null)
            {
                throw new ArgumentException($"You have to set the {nameof(TransferTask)} property before calling this method");
            }

            var handle = TransferTask.ObserveStatus(status.ToNative(), x => observer.Invoke(x.ToAbstract()));

            _observerDict[observer] = handle;
        }
Exemplo n.º 7
0
 private void UpdateStatus(int currStep, int totalStep, TransferTask task, string desc, int code, TransferResult result)
 {
     logger.Info("TaskID-{0} Step'{1}/{2}' Desc'{3}' Code'{4}'", task.ID, currStep, totalStep, desc, code);
     //hub.Tell(new UpdateWorkerStatusMessage(new WorkerStatus {
     //    TaskID = task.ID,
     //    CurrentStep = currStep,
     //    TotalSteps = totalStep,
     //    Description = desc,
     //    Code = code,
     //    Result = result ?? null
     //}));
 }
Exemplo n.º 8
0
        public void AddDownloadTask(TransferTask task)
        {
            downloadTasks.Add(task);
            string         taskInfo    = string.Format("{0}#{1}#{2}#{3}#{4}#{5}", new string[] { task.ID.ToString(), task.SourceFileName, task.DestFileName, task.Type.ToString(), task.RenameMode.ToString(), task.Category.ToString() }).Replace(' ', '$');
            Int32          id          = 1;
            Int32          WM_COPYDATA = 0x004A;
            COPYDATASTRUCT cd          = new COPYDATASTRUCT();

            cd.dwData = (IntPtr)id;
            cd.lpData = taskInfo;
            cd.cbData = taskInfo.Length;
            SendMessage((int)FindWindow(null, "Transfer"), WM_COPYDATA, 0, ref cd);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 上传矢量数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void barButtonItem44_ItemClick(object sender, ItemClickEventArgs e)
        {
            ImportToGDB itg = new ImportToGDB((int)enumDataType.vector);

            itg.Text = "导入矢量数据";
            if (itg.ShowDialog() == DialogResult.OK)
            {
                Guid taskID = Guid.NewGuid();
                MetaDts.Add(taskID, new TemplateMetaData(itg.vctLayer, EnumMetaDataType.Features, TaskType.Upload));

                TransferTask transferTask = new TransferTask(taskID, itg.InputPath, itg.OutputPath, TaskType.Upload, itg.RenameMode, TaskCategory.Features);
                transferTaskListControl1.AddTask(transferTask);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// 上传其他数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void barButtonItem48_ItemClick(object sender, ItemClickEventArgs e)
        {
            ImportToGDB itg = new ImportToGDB((int)enumDataType.other);

            itg.Text = "导入其他数据";
            if (itg.ShowDialog() == DialogResult.OK)
            {
                Guid taskID = Guid.NewGuid();
                MetaDts.Add(taskID, new TemplateMetaData(itg.fleLayer, EnumMetaDataType.Files, TaskType.Upload));

                TransferTask transferTask = new TransferTask(taskID, itg.InputPath, itg.OutputPath, TaskType.Upload, itg.RenameMode, TaskCategory.Files);
                transferTaskListControl1.AddTask(transferTask);

                //TransferProcess.TransferTask transferTask = new TransferProcess.TransferTask(taskID, itg.InputPath, itg.OutputPath, TransferProcess.TaskType.Upload, TransferProcess.RenameMode.Accumulate, TransferProcess.TaskCategory.Files);
                //transferManagerControl1.AddDownloadTask(transferTask);
            }
        }
Exemplo n.º 11
0
        public void Run(TransferTask task)
        {
            var steps = AllSteps();
            var total = steps.Length;
            var r     = RunSteps(task, steps, (step, desc, code) => UpdateStatus(step, total, task, desc, code, null));

            if (r.IsSuccess)
            {
                UpdateStatus(total, total, task, "Tansfer succeeded", WorkerStatus.SUCCESS, r.Status.Result);
                //hub.Tell(new TaskSucceededMessage(task));
            }
            else
            {
                UpdateStatus(r.Status.CurrentStep, total, task, r.Status.Description, r.Status.Code, null);
                //hub.Tell(new TaskFailedMessage(task));
            }
        }
Exemplo n.º 12
0
        public Result <T> Retry(T ctx, TransferTask task, Step <T> step, StepInfo info)
        {
            var result = Fail(info.Desc, WorkerStatus.UNKNOWN);
            var times  = info.Retry;

            while (times > 0)
            {
                times--;
                logger.Info("TaskID-{0} try operation {1} at {2} times", task.ID, info.Desc, info.Retry - times);
                try {
                    result = step.Invoke(ctx);
                    break;
                } catch (AggregateException err) {
                    result = Fail(err.ToString(), info.DefaultError);
                } catch (Exception err) {
                    result = Fail(err.ToString(), info.AfterSubmitTransfer ? WorkerStatus.UNKNOWN_ERROR_AFTER_OTP : WorkerStatus.UNKNOWN_ERROR_BEFORE_OTP);
                }
            }
            return(result);
        }
Exemplo n.º 13
0
 public BackupResult TransferPortal(TransferRequest request)
 {
     lock (tasks.SynchRoot)
     {
         var task = tasks.GetItems().OfType <TransferTask>().FirstOrDefault(x => (int)x.Id == request.TenantId);
         if (task != null && task.IsCompleted)
         {
             tasks.Remove(task);
             task = null;
         }
         if (task == null)
         {
             if (request.TargetRegion == BackupConfigurationSection.GetSection().RegionConfigs.CurrentRegion)
             {
                 throw new FaultException("Current and target regions are the same!");
             }
             task = new TransferTask(request);
             tasks.Add(task);
         }
         return(ToResult(task));
     }
 }
Exemplo n.º 14
0
        /// <summary>
        /// 导出到本地
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode.Parent.Tag.ToString().Equals("RASTER_LAYERS"))
            {
                FolderBrowserDialog fbd = new FolderBrowserDialog();
                if (fbd.ShowDialog() == DialogResult.OK)
                {
                    Demo.Entities.RasterLayer rstLyr = Demo.Entities.RasterLayer.GetRasterIndexById(treeView1.SelectedNode.Tag.ToString());
                    URI    uri              = new URI();
                    string sourceFileName   = uri.GetServerTruePath(rstLyr.URI);
                    string destFileNickName = fbd.SelectedPath + "\\" + System.IO.Path.GetFileName(sourceFileName);
                    Transfer.RasterReadHelper destRstInfo = new Transfer.RasterReadHelper(destFileNickName);
                    string destFileName = fbd.SelectedPath + "\\" + destRstInfo.NameWithoutExtension + destRstInfo.Extension;

                    Guid         taskID       = Guid.NewGuid();
                    TransferTask transferTask = new TransferTask(taskID, sourceFileName, destFileName, TaskType.Download, RenameMode.Accumulate, TaskCategory.Raster, (int)rstLyr.LAYERSIZE);
                    transferTaskListControl1.AddTask(transferTask);
                }
            }
            else if (treeView1.SelectedNode.Parent.Tag.ToString().Equals("VECTOR_LAYERS"))
            {
                FolderBrowserDialog fbd = new FolderBrowserDialog();
                if (fbd.ShowDialog() == DialogResult.OK)
                {
                    VectorLayer vctLyr                      = VectorLayer.GetVectorIndexById(treeView1.SelectedNode.Tag.ToString());
                    URI         uri                         = new URI();
                    string      sourceFileName              = uri.GetServerTruePath(vctLyr.URI);
                    string      destFileNickName            = fbd.SelectedPath + "\\" + System.IO.Path.GetFileName(sourceFileName);
                    Transfer.FeatureReadHelper destFeatInfo = new Transfer.FeatureReadHelper(destFileNickName);
                    string destFileName                     = fbd.SelectedPath + "\\" + destFeatInfo.NameWithoutExtension;

                    Guid         taskID       = Guid.NewGuid();
                    TransferTask transferTask = new TransferTask(taskID, sourceFileName, destFileName, TaskType.Download, RenameMode.Accumulate, TaskCategory.Features, (int)vctLyr.LAYERSIZE);
                    transferTaskListControl1.AddTask(transferTask);
                }
            }
        }
Exemplo n.º 15
0
 public void Enquire(TransferTask task)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 16
0
 private void OnAdvancedTaskPercentChange(TransferTask task)
 {
     OnSubtaskChanged(task, true, false);
 }
Exemplo n.º 17
0
 public BackupResult TransferPortal(TransferRequest request)
 {
     lock (tasks.SynchRoot)
     {
         var task = tasks.GetItems().OfType<TransferTask>().FirstOrDefault(x => (int)x.Id == request.TenantId);
         if (task != null && task.IsCompleted)
         {
             tasks.Remove(task);
             task = null;
         }
         if (task == null)
         {
             if (request.TargetRegion == BackupConfigurationSection.GetSection().RegionConfigs.CurrentRegion)
             {
                 throw new FaultException("Current and target regions are the same!");
             }
             task = new TransferTask(request);
             tasks.Add(task);
         }
         return ToResult(task);
     }
 }
Exemplo n.º 18
0
        protected override void DefWndProc(ref System.Windows.Forms.Message m)
        {
            switch (m.Msg)
            {
            case WM_COPYDATA:
            {
                COPYDATASTRUCT mystr  = new COPYDATASTRUCT();
                Type           mytype = mystr.GetType();
                mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
                TransferTask currentTask = transferTaskListControl1.GetTaskByID(new Guid(mystr.lpData.Substring(0, mystr.cbData)));
                if (currentTask != null)
                {
                    transferTaskListControl1.CompleteTask(currentTask);

                    //写入元数据
                    TemplateMetaData metaData;
                    MetaDts.TryGetValue(currentTask.ID, out metaData);

                    if (currentTask.Type == TaskType.Upload)
                    {
                        switch (metaData.MetaDataType)
                        {
                        case EnumMetaDataType.Raster:
                        {
                            Demo.Entities.RasterLayer rstLyr = metaData.LayerData as Demo.Entities.RasterLayer;
                            rstLyr.LAYERSIZE = (long)currentTask.Size;
                            if (Demo.Entities.RasterLayer.ImportRasterIndex(rstLyr) == 1)
                            {
                                //MessageBox.Show("元数据保存成功!");
                            }
                            else
                            {
                                MessageBox.Show("元数据保存失败!");
                            }
                            break;
                        }

                        case EnumMetaDataType.Features:
                        {
                            VectorLayer vecLyr = metaData.LayerData as VectorLayer;
                            vecLyr.LAYERSIZE = (long)currentTask.Size;
                            if (VectorLayer.ImportVectorIndex(vecLyr) == 1)
                            {
                                //MessageBox.Show("元数据保存成功!");
                            }
                            else
                            {
                                MessageBox.Show("元数据保存失败!");
                            }
                            break;
                        }

                        case EnumMetaDataType.Files:
                        {
                            FileLayer fileLyr = metaData.LayerData as FileLayer;
                            fileLyr.LAYERSIZE = (long)currentTask.Size;
                            if (FileLayer.ImportFileIndex(fileLyr) == 1)
                            {
                                //MessageBox.Show("元数据保存成功!");
                            }
                            else
                            {
                                MessageBox.Show("元数据保存失败!");
                            }
                            break;
                        }
                        }
                    }
                    else
                    {
                    }
                }
                break;
            }

            default:
                base.DefWndProc(ref m);
                break;
            }
        }
Exemplo n.º 19
0
 public void Resume()
 {
     TransferTask.Resume();
 }
Exemplo n.º 20
0
 public void Cancel()
 {
     TransferTask.Cancel();
 }
Exemplo n.º 21
0
 public void Pause()
 {
     TransferTask.Pause();
 }
Exemplo n.º 22
0
 public abstract T CreateContext(TransferTask task);
Exemplo n.º 23
0
        private static void TemplateMethodPatternSection()
        {
            var task = new TransferTask();

            task.Execute();
        }
Exemplo n.º 24
0
        public async Task <TransferTask> Transfer(TransferTask task)
        {
            await CallService();

            return(simulation.CommitTransfer(PrepareTask(task)));
        }
Exemplo n.º 25
0
 public Task <TransferTask> Transfer(TransferTask task)
 {
     throw new NotImplementedException();
 }