Example #1
0
        public override void Execute()
        {
            base.Execute();
            var remote = new RemoteRDMP(Activator.RepositoryLocator.CatalogueRepository);

            Publish(remote);
            Emphasise(remote);
            Activate(remote);
        }
Example #2
0
        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);
        }
Example #3
0
        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();
            }
        }