public async Task <StreamUploadResponse> UpdateWorkers(StreamUploadRequest request) { var memoryStream = new MemoryStream(); try { await request.Stream.CopyToAsync(memoryStream); var workers = NetHelper.DeserializeFromStream <Workers>(memoryStream); ViewModel.Instance.WorkersPropertyEventsRemove(); ViewModel.Instance.Workers = workers.Clone(); ViewModel.Instance.WorkersPropertyEventsAdd(); Workers.SaveWorkers(workers); var date = Workers.GetWorkersLastUpdateTime(); return(new StreamUploadResponse { ResponseFlag = true, Date = date }); } catch (Exception ex) { throw new FaultException(ex.Message); } finally { memoryStream.Dispose(); } }
private void MassUpdateWorkersCommand(object obj) { var massUpdateWindow = new MassUpdate(); var vm = new MassUpdateVM(Workers.GetComputers(Computer.OperationStatus.OperationInProgress)); vm.Header = $"Update Workers"; vm.WindowTitle = $"Mass Update"; vm.ColumnHeader = "Workers Date"; vm.SubHeader = $"{Environment.MachineName}: {Workers.GetWorkersLastUpdateTime()}"; massUpdateWindow.DataContext = vm; var dialogResult = massUpdateWindow.ShowDialog(); }
public async Task ScanLan() { ScanIsInProgress = true; UpdateCancelSource = new CancellationTokenSource(); var token = UpdateCancelSource.Token; var tasks = new List <Task>(); var appVersion = new Version(Helpers.ApplicationVersion()); var workersDate = Workers.GetWorkersLastUpdateTime(); var wtmSettingsDate = WtmSettingsObject.GetWtmSettingsLastUpdateTime(); foreach (var pc in Computers) { Task task = null; switch (ColumnHeader) { case "Version": task = Task.Run(async() => await QueryRemoteVersion(pc, token, appVersion)); break; case "Workers Date": task = Task.Run(async() => await QueryRemoteWorkersDate(pc, token, workersDate)); break; case "Settings Date": task = Task.Run(async() => await QueryRemoteWtmSettingsDate(pc, token, wtmSettingsDate)); break; } tasks.Add(task); } await Task.WhenAll(tasks); ScanIsInProgress = false; }
private async Task UpdateWorkersFromServer(StreamWriter logFile) { bool addressOk = ValidateServerAddress(logFile); if (!addressOk) { return; } var serverAddress = BuildServerAddress(WtmSettings.ServerName, Constants.AccessPoint); var channel = Service.NewChannel(serverAddress); DateTime remoteWorkersDate = default(DateTime); string errorMessage = "Failed to update Workers from local server."; try { remoteWorkersDate = await channel.GetWorkersDateAsync(); } catch (Exception ex) { logFile?.WriteLine(errorMessage + " " + ex.Message); NetHelper.CloseChannel(channel); return; } if (remoteWorkersDate == default(DateTime)) { NetHelper.CloseChannel(channel); logFile?.WriteLine(errorMessage); return; } var localWorkersDate = Workers.GetWorkersLastUpdateTime(); if (localWorkersDate >= remoteWorkersDate) { logFile?.WriteLine($"{Constants.WorkersFile} is up to date."); NetHelper.CloseChannel(channel); return; } NetHelper.CloseChannel(channel); // Open stream channel for workers download serverAddress = BuildServerAddress(WtmSettings.ServerName, Constants.StreamServer); var streamChannel = Service.NewStreamChannel(serverAddress); Workers workers = null; try { var response = await streamChannel.GetWorkersAsync().ConfigureAwait(false); if (response != null) { var memoryStream = new MemoryStream(); await response.Stream.CopyToAsync(memoryStream); workers = NetHelper.DeserializeFromStream <Workers>(memoryStream); } if (workers == null) { throw new NullReferenceException("The received data are null."); } } catch (Exception ex) { logFile?.WriteLine(errorMessage + " " + ex.Message); NetHelper.CloseChannel(streamChannel); return; } bool wResult = Workers.SaveWorkers(workers); if (!wResult) { logFile?.WriteLine("Workers have been received from local server but could not be saved."); NetHelper.CloseChannel(streamChannel); return; } IsInitializingWtm = true; Workers.PropertyChanging -= Workers_PropertyChanging; Workers.PropertyChanged -= Workers_PropertyChanged; Workers = new Workers(workers.WorkerList, workers.PowerCost, workers.CoinType, workers.DisplayCoinAs, workers.NetworkScanMethod); Workers.PropertyChanging += Workers_PropertyChanging; Workers.PropertyChanged += Workers_PropertyChanged; IsInitializingWtm = false; logFile?.WriteLine("Workers have been received from local server and successfully updated."); NetHelper.CloseChannel(streamChannel); }
public Task <DateTime> GetWorkersDateAsync() { DateTime updateTime = Workers.GetWorkersLastUpdateTime(); return(Task.FromResult(updateTime)); }
private async void UpdateCommand(object obj) { UpdateIsInProgress = true; var workersDate = Workers.GetWorkersLastUpdateTime(); var wtmSettingsDate = WtmSettingsObject.GetWtmSettingsLastUpdateTime(); UpdateCancelSource = new CancellationTokenSource(); var token = UpdateCancelSource.Token; var taskList = new List <Task>(); var failList = new List <ProfitTable>(); FlowDocument report = new FlowDocument(); int errorCount = 0; string appVersion = Helpers.ApplicationVersion(); var jobCount = Computers.Count; ReportTitle = $"Progress: 0 of {jobCount}."; for (int i = 0; i < jobCount; i++) { var pc = Computers[i]; if (!pc.Switch) { continue; } Task task = null; switch (ColumnHeader) { case "Version": task = Task.Run(async() => { errorCount = await UpdateVersion(pc, token, errorCount, i, jobCount, appVersion); }); break; case "Workers Date": task = Task.Run(async() => { errorCount = await UpdateWorkers(pc, token, errorCount, i, jobCount, workersDate); }); break; case "Settings Date": task = Task.Run(async() => { errorCount = await UpdateWtmSettings(pc, token, errorCount, i, jobCount, wtmSettingsDate); }); break; } taskList.Add(task); } await Task.WhenAll(taskList); if (errorCount == 0) { ReportTitle = "Report:"; var paragraph = new Paragraph(); paragraph.Inlines.Add(new Run("Operation has finished successfully.")); NewParagraph = paragraph; } else { ReportTitle = "Error report:"; } UpdateIsInProgress = false; UpdateIsFinished = true; }