Example #1
0
        protected override void ExecuteCore()
        {
            ClientState.Current.Messages.Errors.Clear();

            if (ChannelsManager.Channels.Count == 0)
            {
                return;
            }

            var channels = ListOrSingle <ChannelInstance> .Get(channel, ChannelsManager.Channels);

            var gate = new ConcurrencyGate(2);

            foreach (var channelInstance in channels.Where(c => !c.Configuration.IsConnected))
            {
                var inputChannel = channelInstance.InputChannel;
                var config       = channelInstance.Configuration;

                var foldersTask = new ReceiveFoldersTask(channelInstance.Configuration, inputChannel.Clone());

                foldersTask.FinishedSuccess += ((sender, e) =>
                                                ReceiveFoldersTask_FinishedSuccess((ReceiveFoldersTask)sender, config, inputChannel));

                gate.Add(foldersTask);
            }

            // Wait for all receive tasks to complete, keeping the queue filled for the ReceiveTask.
            // This prevents any new receive task from getting enqueued.
            gate.Execute();

            // Clean up connection scavangers
            ConnectionPoolScavenger.Shutdown();

            GC.Collect(GC.MaxGeneration);
        }
Example #2
0
        protected override void ExecuteCore()
        {
            ClientState.Current.Messages.Errors.Clear();

            if (ChannelsManager.Channels.Count == 0)
            {
                return;
            }

            var gate     = new ConcurrencyGate(2);
            var channels = ListOrSingle <ChannelInstance> .Get(channel, ChannelsManager.Channels);

            foreach (var instance in channels.Where(c => !c.Configuration.IsConnected))
            {
                if (instance.ContactsChannel != null)
                {
                    gate.Add(new SyncContactsTask(instance.Configuration, instance.ContactsChannel.Clone())
                    {
                        OverrideCanExecute = OverrideCanExecute
                    });
                }

                if (instance.StatusUpdatesChannel != null)
                {
                    gate.Add(new SyncStatusUpdatesTask(instance.Configuration, instance.StatusUpdatesChannel.Clone())
                    {
                        OverrideCanExecute = OverrideCanExecute
                    });
                }

                //if (instance.CalendarChannel != null)
                //    new SyncCalendarTask(instance.Configuration, instance.CalendarChannel) { OverrideCanExecute = OverrideCanExecute }.ExecuteAsync();
            }

            if (channel == null)
            {
                gate.Add(new SyncSearchStreamTask {
                    OverrideCanExecute = OverrideCanExecute
                });
            }

            gate.Execute();

            EventBroker.Publish(AppEvents.SyncFinished);
        }