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); }
/** * 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); }
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); } } }
public void RemoveObserver(Action <IStorageTaskSnapshot> observer) { if (_observerDict.ContainsKey(observer)) { TransferTask.RemoveObserver(_observerDict[observer]); _observerDict.Remove(observer); } }
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); }
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; }
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 //})); }
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); }
/// <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); } }
/// <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); } }
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)); } }
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); }
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)); } }
/// <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); } } }
public void Enquire(TransferTask task) { throw new NotImplementedException(); }
private void OnAdvancedTaskPercentChange(TransferTask task) { OnSubtaskChanged(task, true, false); }
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); } }
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; } }
public void Resume() { TransferTask.Resume(); }
public void Cancel() { TransferTask.Cancel(); }
public void Pause() { TransferTask.Pause(); }
public abstract T CreateContext(TransferTask task);
private static void TemplateMethodPatternSection() { var task = new TransferTask(); task.Execute(); }
public async Task <TransferTask> Transfer(TransferTask task) { await CallService(); return(simulation.CommitTransfer(PrepareTask(task))); }
public Task <TransferTask> Transfer(TransferTask task) { throw new NotImplementedException(); }