public override void Execute() { base.Execute(); var remote = new RemoteRDMP(Activator.RepositoryLocator.CatalogueRepository); Publish(remote); Emphasise(remote); Activate(remote); }
protected override void SetBindings(BinderWithErrorProviderFactory rules, RemoteRDMP databaseObject) { base.SetBindings(rules, databaseObject); Bind(tbID, "Text", "ID", r => r.ID); Bind(tbName, "Text", "Name", r => r.Name); Bind(tbBaseUrl, "Text", "URL", r => r.URL); Bind(tbUsername, "Text", "Username", r => r.Username); Bind(tbPassword, "Text", "Password", r => r.Password); }
public async void SendToAllRemotes <T>(T[] toSendAll, Action callback = null) where T : IMapsDirectlyToDatabaseTable { listener.OnNotify(this, new NotifyEventArgs(ProgressEventType.Information, "Ready to send " + toSendAll.Length + " " + typeof(T).Name + " items to all remotes.")); var done = new Dictionary <string, int>(); foreach (var remoteRDMP in remotes) { listener.OnProgress(this, new ProgressEventArgs(remoteRDMP.Name, new ProgressMeasurement(0, ProgressType.Records, toSendAll.Length), new TimeSpan())); } var tasks = new List <Task>(); foreach (var remote in remotes) { done.Add(remote.Name, 0); foreach (var toSend in toSendAll) { if (!_gatherer.CanGatherDependencies(toSend)) { throw new Exception("Type " + typeof(T) + " is not supported yet by Gatherer and therefore cannot be shared"); } var share = _gatherer.GatherDependencies(toSend).ToShareDefinitionWithChildren(_shareManager); var json = JsonConvertExtensions.SerializeObject(share, _repositoryLocator); var handler = new HttpClientHandler() { Credentials = new NetworkCredential(remote.Username, remote.GetDecryptedPassword()) }; HttpResponseMessage result; var apiUrl = remote.GetUrlFor <T>(); RemoteRDMP remote1 = remote; T toSend1 = toSend; var sender = new Task(() => { using (var client = new HttpClient(handler)) { try { result = client.PostAsync(new Uri(apiUrl), new StringContent(json, Encoding.UTF8, "text/plain")).Result; if (result.IsSuccessStatusCode) { listener.OnNotify(this, new NotifyEventArgs(ProgressEventType.Information, "Sending " + toSend1 + " to " + remote1.Name + " completed.")); } else { listener.OnNotify(this, new NotifyEventArgs(ProgressEventType.Error, "Error sending " + toSend1 + " to " + remote1.Name + ": " + result.ReasonPhrase + " - " + result.Content.ReadAsStringAsync().Result)); } lock (done) { listener.OnProgress(this, new ProgressEventArgs(remote1.Name, new ProgressMeasurement(++done[remote1.Name], ProgressType.Records, toSendAll.Length), new TimeSpan())); } } catch (Exception ex) { listener.OnNotify(this, new NotifyEventArgs(ProgressEventType.Error, "Error sending " + toSend1 + " to " + remote1.Name, ex)); listener.OnProgress(this, new ProgressEventArgs(remote1.Name, new ProgressMeasurement(1, ProgressType.Records, 1), new TimeSpan())); } } }); sender.Start(); tasks.Add(sender); } } await Task.WhenAll(tasks); if (callback != null) { callback(); } }