public Task Init(Func<PushContext, Task> pipe, CriticalError criticalError, PushSettings settings)
 {
     pipeline = pipe;
     path = BaseDirectoryBuilder.BuildBasePath(settings.InputQueue);
     purgeOnStartup = settings.PurgeOnStartup;
     return TaskEx.CompletedTask;
 }
 public Task Init(Func <PushContext, Task> pipe, CriticalError criticalError, PushSettings settings)
 {
     pipeline       = pipe;
     path           = BaseDirectoryBuilder.BuildBasePath(settings.InputQueue);
     purgeOnStartup = settings.PurgeOnStartup;
     return(TaskEx.CompletedTask);
 }
示例#3
0
        public async Task <bool> NotificationDeleteAsync(Ekreta.Mobile.Core.Models.Profile profile, bool useGlobalMobileApiV1 = false)
        {
            if (profile == null)
            {
                throw new ArgumentNullException(nameof(profile));
            }
            PushSettings pushSettings;

            try
            {
                pushSettings = await this._globalMobileApi.NotificationDeleteAsync(profile?.PushSettings?.RegistrationId, NotificationMessageSource.Kreta, useGlobalMobileApiV1);
            }
            catch (KeyNotFoundException ex)
            {
                profile.PushSettings = (PushSettings)null;
                this._profileRepository.AddOrUpdate(profile);
                pushSettings = new PushSettings();
            }
            if (pushSettings != null)
            {
                pushSettings.FirstTimePushRun  = true;
                pushSettings.UpdateEugyintezes = true;
                profile.PushSettings           = pushSettings;
                this._profileRepository.AddOrUpdate(profile);
            }
            return(pushSettings != null);
        }
示例#4
0
        void AddReceivers(IBuilder builder, RecoverabilityExecutorFactory recoverabilityExecutorFactory)
        {
            var requiredTransactionSupport = configuration.TransactionMode;

            var recoverabilityExecutor = recoverabilityExecutorFactory.CreateDefault(eventAggregator, configuration.LocalAddress);
            var pushSettings           = new PushSettings(configuration.LocalAddress, errorQueue, configuration.PurgeOnStartup, requiredTransactionSupport);
            var dequeueLimitations     = configuration.PushRuntimeSettings;

            receivers.Add(new TransportReceiver(MainReceiverId, BuildMessagePump(), pushSettings, dequeueLimitations, mainPipelineExecutor, recoverabilityExecutor, criticalError));

            if (configuration.InstanceSpecificQueue != null)
            {
                var instanceSpecificQueue = configuration.InstanceSpecificQueue;
                var instanceSpecificRecoverabilityExecutor = recoverabilityExecutorFactory.CreateDefault(eventAggregator, instanceSpecificQueue);
                var sharedReceiverPushSettings             = new PushSettings(instanceSpecificQueue, errorQueue, configuration.PurgeOnStartup, requiredTransactionSupport);

                receivers.Add(new TransportReceiver(MainReceiverId, BuildMessagePump(), sharedReceiverPushSettings, dequeueLimitations, mainPipelineExecutor, instanceSpecificRecoverabilityExecutor, criticalError));
            }

            foreach (var satellitePipeline in configuration.SatelliteDefinitions)
            {
                var satelliteRecoverabilityExecutor = recoverabilityExecutorFactory.Create(satellitePipeline.RecoverabilityPolicy, eventAggregator, satellitePipeline.ReceiveAddress);
                var satellitePushSettings           = new PushSettings(satellitePipeline.ReceiveAddress, errorQueue, configuration.PurgeOnStartup, satellitePipeline.RequiredTransportTransactionMode);

                receivers.Add(new TransportReceiver(satellitePipeline.Name, BuildMessagePump(), satellitePushSettings, satellitePipeline.RuntimeSettings, new SatellitePipelineExecutor(builder, satellitePipeline), satelliteRecoverabilityExecutor, criticalError));
            }
        }
		private async void InitializeNotificationChannel()
		{
			#region UI logic
			this.InitializePushButton.IsEnabled = false;
			this.PushStatusTextBlock.Text = "initializing...";
			this.PushStatusTextBlock.Foreground = new SolidColorBrush(Colors.Orange);
			this.ShowProgress();
			#endregion

			try
			{
				//initialize push functionality
				var pushSettings = new PushSettings()
				{
					AutoBindToShellTile = true,
					AutoBindToShellToast = true,
					ServiceName = ConnectionSettings.PushServiceName
				};
				this.initializationResult = await this.app.WorkWith().Push().CurrentDevice.Initialize(pushSettings).ExecuteAsync();

				this.OnPushTokenAvailable();
			}
			catch (Exception ex)
			{
				MessageBox.Show("There was an error initializing the push functionality.");
				this.InitializePushButton.IsEnabled = true;

				this.PushStatusTextBlock.Text = "error";
				this.PushStatusTextBlock.Foreground = new SolidColorBrush(Colors.Red);
			}

		}
示例#6
0
        List <TransportReceiver> BuildMainReceivers(string errorQueue, bool purgeOnStartup, TransportTransactionMode requiredTransactionSupport, RecoverabilityExecutorFactory recoverabilityExecutorFactory, IPipeline <ITransportReceiveContext> mainPipeline)
        {
            var localAddress       = settings.LocalAddress();
            var distributorAddress = settings.GetOrDefault <string>("LegacyDistributor.Address");

            var recoverabilityExecutor = recoverabilityExecutorFactory.CreateDefault(eventAggregator, distributorAddress ?? localAddress);
            var pushSettings           = new PushSettings(settings.LocalAddress(), errorQueue, purgeOnStartup, requiredTransactionSupport);
            var mainPipelineExecutor   = new MainPipelineExecutor(builder, eventAggregator, pipelineCache, mainPipeline);
            var dequeueLimitations     = GetDequeueLimitationsForReceivePipeline();

            var receivers = new List <TransportReceiver>();

            receivers.Add(new TransportReceiver(MainReceiverId, builder.Build <IPushMessages>(), pushSettings, dequeueLimitations, mainPipelineExecutor, recoverabilityExecutor, criticalError));

            if (settings.InstanceSpecificQueue() != null)
            {
                var instanceSpecificQueue = settings.InstanceSpecificQueue();
                var instanceSpecificRecoverabilityExecutor = recoverabilityExecutorFactory.CreateDefault(eventAggregator, instanceSpecificQueue);
                var sharedReceiverPushSettings             = new PushSettings(settings.InstanceSpecificQueue(), errorQueue, purgeOnStartup, requiredTransactionSupport);

                receivers.Add(new TransportReceiver(MainReceiverId, builder.Build <IPushMessages>(), sharedReceiverPushSettings, dequeueLimitations, mainPipelineExecutor, instanceSpecificRecoverabilityExecutor, criticalError));
            }

            return(receivers);
        }
示例#7
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            var realmSettings = new RealmSettings();

            Configuration.Bind("RealmOptions", realmSettings);

            var tweetSettings = new TweetSettings();

            Configuration.Bind("TweetOptions", tweetSettings);

            var pushSettings = new PushSettings();

            Configuration.Bind("PushOptions", pushSettings);

            services.AddSingleton(realmSettings);
            services.AddSingleton(tweetSettings);
            services.AddSingleton(pushSettings);

            services.AddScoped <PushNotificationsManager>();

            services
            .AddControllers()
            .AddNewtonsoftJson();

            services.AddOpenApiDocument(document => document.DocumentName = "DotNetRu App API");
        }
示例#8
0
        public Task Init(Func<MessageContext, Task> onMessage, Func<ErrorContext, Task<ErrorHandleResult>> onError, CriticalError criticalError, PushSettings settings)
        {
            peekCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("MsmqPeek", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to peek " + settings.InputQueue, ex));
            receiveCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("MsmqReceive", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to receive from " + settings.InputQueue, ex));

            var inputAddress = MsmqAddress.Parse(settings.InputQueue);
            var errorAddress = MsmqAddress.Parse(settings.ErrorQueue);

            if (!string.Equals(inputAddress.Machine, RuntimeEnvironment.MachineName, StringComparison.OrdinalIgnoreCase))
            {
                throw new Exception($"MSMQ Dequeuing can only run against the local machine. Invalid inputQueue name '{settings.InputQueue}'.");
            }

            inputQueue = new MessageQueue(inputAddress.FullPath, false, true, QueueAccessMode.Receive);
            errorQueue = new MessageQueue(errorAddress.FullPath, false, true, QueueAccessMode.Send);

            if (settings.RequiredTransactionMode != TransportTransactionMode.None && !QueueIsTransactional())
            {
                throw new ArgumentException($"Queue must be transactional if you configure the endpoint to be transactional ({settings.InputQueue}).");
            }

            inputQueue.MessageReadPropertyFilter = DefaultReadPropertyFilter;

            if (settings.PurgeOnStartup)
            {
                inputQueue.Purge();
            }

            receiveStrategy = receiveStrategyFactory(settings.RequiredTransactionMode);

            receiveStrategy.Init(inputQueue, errorQueue, onMessage, onError, criticalError);

            return TaskEx.CompletedTask;
        }
        protected async Task StartPump(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, TransportTransactionMode transactionMode, Action <string, Exception> onCriticalError = null)
        {
            InputQueueName = GetTestName() + transactionMode;
            ErrorQueueName = $"{InputQueueName}.error";

            transportSettings.Set("NServiceBus.Routing.EndpointName", InputQueueName);

            var queueBindings = new QueueBindings();

            queueBindings.BindReceiving(InputQueueName);
            queueBindings.BindSending(ErrorQueueName);
            transportSettings.Set(ErrorQueueSettings.SettingsKey, ErrorQueueName);
            transportSettings.Set <QueueBindings>(queueBindings);

            transportSettings.Set <EndpointInstances>(new EndpointInstances());

            Configurer = CreateConfigurer();

            var configuration = Configurer.Configure(transportSettings, transactionMode);

            TransportInfrastructure = configuration.TransportInfrastructure;

            IgnoreUnsupportedTransactionModes(transactionMode);
            IgnoreUnsupportedDeliveryConstraints();

            ReceiveInfrastructure = TransportInfrastructure.ConfigureReceiveInfrastructure();
            SendInfrastructure    = TransportInfrastructure.ConfigureSendInfrastructure();

            lazyDispatcher = new Lazy <IDispatchMessages>(() => SendInfrastructure.DispatcherFactory());

            MessagePump = ReceiveInfrastructure.MessagePumpFactory();

            var queueCreator = ReceiveInfrastructure.QueueCreatorFactory();
            await queueCreator.CreateQueueIfNecessary(queueBindings, WindowsIdentity.GetCurrent().Name);

            var pushSettings = new PushSettings(InputQueueName, ErrorQueueName, configuration.PurgeInputQueueOnStartup, transactionMode);
            await MessagePump.Init(
                context =>
            {
                if (context.Headers.ContainsKey(TestIdHeaderName) && context.Headers[TestIdHeaderName] == testId)
                {
                    return(onMessage(context));
                }

                return(Task.FromResult(0));
            },
                context =>
            {
                if (context.Message.Headers.ContainsKey(TestIdHeaderName) && context.Message.Headers[TestIdHeaderName] == testId)
                {
                    return(onError(context));
                }

                return(Task.FromResult(ErrorHandleResult.Handled));
            },
                new FakeCriticalError(onCriticalError),
                pushSettings);

            MessagePump.Start(configuration.PushRuntimeSettings);
        }
示例#10
0
        private void MigratePushSettingsFromOldSettings()
        {
            PushSettings pushSettings = new PushSettings();

            pushSettings.msg              = pushSettings.chat = this.MessageNotificationsEnabled;
            pushSettings.msg_no_text      = pushSettings.chat_no_text = !this.MessageTextInNotification;
            pushSettings.friend           = this.FriendsNotificationsEnabled;
            pushSettings.mention          = this.MentionsNotificationsEnabled;
            pushSettings.reply            = this.ReplyNotificationsEnabled;
            this.PushSettings             = pushSettings;
            this.PushNotificationsEnabled = pushSettings.msg || pushSettings.chat || (pushSettings.friend || pushSettings.mention) || pushSettings.reply;
            if (!this.PushNotificationsEnabled)
            {
                return;
            }
            pushSettings.comment         = true;
            pushSettings.event_soon      = true;
            pushSettings.event_soon      = true;
            pushSettings.friend_accepted = true;
            pushSettings.friend_found    = true;
            pushSettings.group_accepted  = true;
            pushSettings.group_invite    = true;
            pushSettings.like            = true;
            pushSettings.new_post        = true;
            pushSettings.reply           = true;
            pushSettings.repost          = true;
            pushSettings.wall_post       = true;
            pushSettings.wall_publish    = true;
        }
        List <TransportReceiver> CreateReceivers(IPipeline <ITransportReceiveContext> mainPipeline)
        {
            if (settings.GetOrDefault <bool>("Endpoint.SendOnly"))
            {
                return(new List <TransportReceiver>());
            }

            var purgeOnStartup                = settings.GetOrDefault <bool>("Transport.PurgeOnStartup");
            var errorQueue                    = settings.ErrorQueueAddress();
            var dequeueLimitations            = GeDequeueLimitationsForReceivePipeline();
            var requiredTransactionSupport    = settings.GetRequiredTransactionModeForReceives();
            var recoverabilityExecutorFactory = builder.Build <RecoverabilityExecutorFactory>();

            var receivers = BuildMainReceivers(errorQueue, purgeOnStartup, requiredTransactionSupport, dequeueLimitations, recoverabilityExecutorFactory, mainPipeline);

            foreach (var satellitePipeline in settings.Get <SatelliteDefinitions>().Definitions)
            {
                var satelliteRecoverabilityExecutor = recoverabilityExecutorFactory.Create(satellitePipeline.RecoverabilityPolicy, eventAggregator, satellitePipeline.ReceiveAddress);
                var satellitePushSettings           = new PushSettings(satellitePipeline.ReceiveAddress, errorQueue, purgeOnStartup, satellitePipeline.RequiredTransportTransactionMode);

                receivers.Add(new TransportReceiver(satellitePipeline.Name, builder.Build <IPushMessages>(), satellitePushSettings, dequeueLimitations, new SatellitePipelineExecutor(builder, satellitePipeline), satelliteRecoverabilityExecutor, criticalError));
            }

            return(receivers);
        }
        public ConsumerHolder(string connectionString, string endpointName, PushSettings settings, SettingsHolder settingsHolder, Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, bool doNotSubscribeToEndPointQueue = false)
        {
            this.onMessage = onMessage;
            this.onError   = onError;

            this.settings         = settings;
            this.settingsHolder   = settingsHolder;
            this.connectionString = connectionString;
            this.endpointName     = endpointName;
            this.doNotSubscribeToEndPointQueue = doNotSubscribeToEndPointQueue;

            circuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("kafka circuit breaker", new TimeSpan(30), ex => criticalError.Raise("Failed to receive message from Kafka.", ex));


            if (consumer == null)
            {
                lock (o)
                {
                    if (consumer == null)
                    {
                        CreateConsumer();
                    }
                }
            }
        }
示例#13
0
        public async Task <bool> NotificationRegistrationAsync(Ekreta.Mobile.Core.Models.Profile profile)
        {
            try
            {
                if (!this._pushNotificationPlatformSpecificService.IsPushNotificationEnabledByDevice())
                {
                    throw new DisabledPushByDeviceException().SetErrorCode <DisabledPushByDeviceException>("/Users/admin/myagent/macMiniBlack3/_work/2/s/eKreta.Mobile/eKreta.Mobile.Core.Standard/Repository/DataServices/ProfileDataService.cs", 123);
                }
                string platform = this._pushNotificationHandler.Platform.ToString();
                NotificationMessageType notificationType = NotificationMessageType.All;
                string handle = this._pushNotificationHandler.Token;
                NotificationMessageSource notificationSource = NotificationMessageSource.Kreta;
                TokenData tokenData = this._secureStore.GetTokenData(profile.Id);
                if (tokenData.ExpiresAt <= DateTime.Now)
                {
                    tokenData = await((IAuthDataService)Mvx.get_IoCProvider().Resolve <IAuthDataService>()).RefreshToken(profile);
                }
                if (tokenData == null)
                {
                    return(false);
                }
                profile.TokenInfo = (TokenInfo)JsonConvert.DeserializeObject <TokenInfo>(TokenDecoder.Decode(tokenData.AccessToken));
                PushSettings pushSettings = await this._globalMobileApi.NotificationRegistrationAsync(profile.TokenInfo.InstituteCode, profile.TokenInfo.InstituteUserId, profile.TokenInfo.TutelaryId, platform, handle, profile.TokenInfo.Role, notificationSource, (int)notificationType, profile.Id);

                if (pushSettings != null)
                {
                    pushSettings.NotificationTypes = notificationType;
                    pushSettings.FirstTimePushRun  = true;
                    pushSettings.UpdateEugyintezes = true;
                    pushSettings.Token             = handle;
                    profile.PushSettings           = pushSettings;
                }
                else if (profile.PushSettings != null)
                {
                    profile.PushSettings.FirstTimePushRun = true;
                }
                else
                {
                    profile.PushSettings = new PushSettings()
                    {
                        FirstTimePushRun = true
                    }
                };
                this.AddOrUpdate(profile);
                return(pushSettings != null);
            }
            catch (DisabledPushByDeviceException ex)
            {
                ex.SetErrorCode <DisabledPushByDeviceException>("/Users/admin/myagent/macMiniBlack3/_work/2/s/eKreta.Mobile/eKreta.Mobile.Core.Standard/Repository/DataServices/ProfileDataService.cs", 180);
                throw;
            }
            catch (Exception ex)
            {
                CrossMobileAnalytics.Current.TrackException(ex, (IDictionary <string, string>)null, "ProfileDataService.NotificationRegistrationAsync", "/Users/admin/myagent/macMiniBlack3/_work/2/s/eKreta.Mobile/eKreta.Mobile.Core.Standard/Repository/DataServices/ProfileDataService.cs", 75);
                return(false);
            }
        }
示例#14
0
        RawTransportReceiver BuildMainReceiver(string poisonMessageQueue, bool purgeOnStartup, TransportTransactionMode requiredTransactionSupport)
        {
            var pushSettings        = new PushSettings(localAddress, poisonMessageQueue, purgeOnStartup, requiredTransactionSupport);
            var dequeueLimitations  = GetDequeueLimitationsForReceivePipeline();
            var errorHandlingPolicy = settings.Get <IErrorHandlingPolicy>();
            var receiver            = new RawTransportReceiver(messagePump, dispatcher, onMessage, pushSettings, dequeueLimitations, criticalError,
                                                               new RawEndpointErrorHandlingPolicy(settings.EndpointName(), localAddress, dispatcher, errorHandlingPolicy));

            return(receiver);
        }
示例#15
0
        //--------------------| Метод account.account.setPushSettings |----
        /// <summary>
        /// Изменяет настройку Push-уведомлений
        /// </summary>
        /// <param name="device_id">уникальный идентификатор устройства</param>
        /// <param name="settings">объект, описывающий настройки уведомлений</param>
        /// <param name="key">ключ уведомления</param>
        /// <param name="value">новое значение уведомления</param>
        public void setPushSettings(string device_id,
                                    PushSettings settings, string key, PushSettings value)
        {
            Dictionary <string, string> d = VkAPI.Account.setPushSettings(AccessToken, device_id, settings, key, value);

            if (d.ContainsKey("error_code"))
            {
                data.SetData("data", 1, d);
            }
        }
示例#16
0
        void IInitializeSystem.Initialize()
        {
            // слушаем изменение позиции
            _context.input.inputPositionEntity.AddInputPositionListener(this);

            _randomService = _context.game.services.ProvideRandomService();

            CharacterSettings = _context.game.services.ProvideConfigService().GetCharacterSettings();
            PushSettings      = _context.game.services.ProvideConfigService().GetPushSettings();
        }
        public void ShouldThrowIfConfiguredToReceiveFromRemoteQueue()
        {
            var messagePump = new MessagePump(mode => null);
            var pushSettings = new PushSettings("queue@remote", "error", false, TransportTransactionMode.None);

            var exception = Assert.Throws<Exception>(() =>
            {
                messagePump.Init(context => null, context => null, null, pushSettings);
            });

            Assert.That(exception.Message, Does.Contain($"MSMQ Dequeuing can only run against the local machine. Invalid inputQueue name '{pushSettings.InputQueue}'."));
        }
        public void ShouldThrowIfConfiguredToReceiveFromRemoteQueue()
        {
            var messagePump  = new MessagePump(mode => null);
            var pushSettings = new PushSettings("queue@remote", "error", false, TransportTransactionMode.None);

            var exception = Assert.Throws <Exception>(() =>
            {
                messagePump.Init(context => null, context => null, null, pushSettings);
            });

            Assert.That(exception.Message, Does.Contain($"MSMQ Dequeuing can only run against the local machine. Invalid inputQueue name '{pushSettings.InputQueue}'."));
        }
示例#19
0
        /// <summary>
        /// Изменяет настройку Push-уведомлений.
        /// </summary>
        /// <param name="deviceId">
        /// Уникальный идентификатор устройства. строка, обязательный параметр (Строка,
        /// обязательный
        /// параметр).
        /// </param>
        /// <param name="settings">
        /// Сериализованный JSON-объект, описывающий настройки уведомлений в специальном
        /// формате данные в
        /// формате JSON (Данные в формате JSON).
        /// </param>
        /// <param name="key"> Ключ уведомления. строка (Строка). </param>
        /// <param name="value">
        /// Новое значение уведомления в специальном формате. список слов, разделенных
        /// через запятую (Список
        /// слов, разделенных через запятую).
        /// </param>
        /// <returns>
        /// Возвращает 1 в случае успешного выполнения метода.
        /// </returns>
        /// <remarks>
        /// Страница документации ВКонтакте http://vk.com/dev/account.setPushSettings
        /// </remarks>
        public bool SetPushSettings(string deviceId, PushSettings settings, string key, List <string> value)
        {
            var parameters = new VkParameters
            {
                { "device_id", deviceId }
                , { "settings", settings }
                , { "key", key }
                , { "value", value }
            };

            return(_vk.Call(methodName: "account.setPushSettings", parameters: parameters));
        }
        public Task Init(
            Func <MessageContext, Task> onMessage,
            Func <ErrorContext, Task <ErrorHandleResult> > onError,
            CriticalError criticalError,
            PushSettings settings)
        {
            this.passMessageToNsb       = onMessage;
            this.letNsbKnowAboutAnError = onError;
            this.criticalError          = criticalError;
            this.nsbSettings            = settings;
            this.messagePumpName        = $"MessagePump-{this.nsbSettings.InputQueue}";

            return(Task.CompletedTask);
        }
        public Task Init(
            Func <MessageContext, Task> onMessage,
            Func <ErrorContext, Task <ErrorHandleResult> > onError,
            CriticalError criticalError,
            PushSettings settings)
        {
            pushSettings       = settings;
            this.criticalError = criticalError;
            this.onError       = onError;
            this.onMessage     = onMessage;

            inputQueue = settings.InputQueue;

            return(Task.CompletedTask);
        }
示例#22
0
        public Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings)
        {
            if (settings.PurgeOnStartup)
            {
                throw new Exception("Azure Service Bus transport doesn't support PurgeOnStartup behavior");
            }

            this.onMessage = onMessage;
            this.onError   = onError;
            pushSettings   = settings;

            circuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker($"'{settings.InputQueue}'", timeToWaitBeforeTriggeringCircuitBreaker, criticalError);

            return(Task.CompletedTask);
        }
示例#23
0
        public Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings)
        {
            this.onMessage     = onMessage;
            this.onError       = onError;
            this.settings      = settings;
            this.criticalError = criticalError;

            circuitBreaker = new MessagePumpConnectionFailedCircuitBreaker($"'{settings.InputQueue} MessagePump'", timeToWaitBeforeTriggeringCircuitBreaker, criticalError);

            if (settings.PurgeOnStartup)
            {
                queuePurger.Purge(settings.InputQueue);
            }

            return(Task.CompletedTask);
        }
示例#24
0
        IEnumerable <TransportReceiver> BuildPipelines()
        {
            var errorQueue = ErrorQueueSettings.GetConfiguredErrorQueue(settings);

            var dequeueLimitations         = GeDequeueLimitationsForReceivePipeline();
            var requiredTransactionSupport = settings.GetRequiredTransactionModeForReceives();

            var pushSettings = new PushSettings(settings.LocalAddress(), errorQueue, settings.GetOrDefault <bool>("Transport.PurgeOnStartup"), requiredTransactionSupport);

            yield return(BuildPipelineInstance(pipelineConfiguration.MainPipeline, "Main", pushSettings, dequeueLimitations));

            foreach (var satellitePipeline in pipelineConfiguration.SatellitePipelines)
            {
                var satellitePushSettings = new PushSettings(satellitePipeline.ReceiveAddress, errorQueue, settings.GetOrDefault <bool>("Transport.PurgeOnStartup"), satellitePipeline.RequiredTransportTransactionMode);

                yield return(BuildPipelineInstance(satellitePipeline, satellitePipeline.Name, satellitePushSettings, satellitePipeline.RuntimeSettings));
            }
        }
示例#25
0
        public TransportReceiver(
            string id,
            IPushMessages pushMessages,
            PushSettings pushSettings,
            PushRuntimeSettings pushRuntimeSettings,
            IPipelineExecutor pipelineExecutor,
            RecoverabilityExecutor recoverabilityExecutor,
            CriticalError criticalError)
        {
            this.criticalError = criticalError;
            Id = id;
            this.pushRuntimeSettings    = pushRuntimeSettings;
            this.pipelineExecutor       = pipelineExecutor;
            this.recoverabilityExecutor = recoverabilityExecutor;
            this.pushSettings           = pushSettings;

            receiver = pushMessages;
        }
示例#26
0
        public TransportReceiver(
            string id,
            IPushMessages pushMessages,
            PushSettings pushSettings,
            PushRuntimeSettings pushRuntimeSettings,
            IPipelineExecutor pipelineExecutor,
            RecoverabilityExecutor recoverabilityExecutor,
            CriticalError criticalError)
        {
            this.criticalError = criticalError;
            Id = id;
            this.pushRuntimeSettings = pushRuntimeSettings;
            this.pipelineExecutor = pipelineExecutor;
            this.recoverabilityExecutor = recoverabilityExecutor;
            this.pushSettings = pushSettings;

            receiver = pushMessages;
        }
示例#27
0
        protected override void OnCreate(Bundle bundle)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource   = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);
            LoadApplication(new App());

            //RegisterReceiver(new NotificationDemo.Droid.NotifyMessageReceiver(), new IntentFilter(""));
            PushManager.StartWork(ApplicationContext, PushConstants.LoginTypeApiKey, ConfigurationSettings.API_KEY);
            PushSettings.EnableDebugMode(ApplicationContext, true);
            //JPushInterface.SetDebugMode(true);
            //JPushInterface.Init(this);

            //var name = typeof(MainActivity).Assembly.ToString();
        }
        private void NotificationChange(object sender, EventArgs e)
        {
            if (!(sender is UISwitch switcher))
            {
                return;
            }

            var subscription = PushSettings.None;

            if (Equals(sender, _notificationUpvotesSwitch))
            {
                subscription = PushSettings.Upvote;
            }
            else if (Equals(sender, _notificationCommentsUpvotesSwitch))
            {
                subscription = PushSettings.UpvoteComment;
            }
            else if (Equals(sender, _notificationFollowingSwitch))
            {
                subscription = PushSettings.Follow;
            }
            else if (Equals(sender, _notificationCommentsSwitch))
            {
                subscription = PushSettings.Comment;
            }
            else if (Equals(sender, _notificationPostingSwitch))
            {
                subscription = PushSettings.User;
            }
            else if (Equals(sender, _notificationTranfserSwitch))
            {
                subscription = PushSettings.Transfer;
            }

            if (switcher.On)
            {
                PushSettings |= subscription;
            }
            else
            {
                PushSettings ^= subscription;
            }
        }
        private void NotificationChange(object sender, CompoundButton.CheckedChangeEventArgs e)
        {
            if (!(sender is SwitchCompat))
            {
                return;
            }

            var subscription = PushSettings.None;

            if (Equals(sender, _notificationUpvotesSwitch))
            {
                subscription = PushSettings.Upvote;
            }
            else if (Equals(sender, _notificationCommentsUpvotesSwitch))
            {
                subscription = PushSettings.UpvoteComment;
            }
            else if (Equals(sender, _notificationFollowingSwitch))
            {
                subscription = PushSettings.Follow;
            }
            else if (Equals(sender, _notificationCommentsSwitch))
            {
                subscription = PushSettings.Comment;
            }
            else if (Equals(sender, _notificationPostingSwitch))
            {
                subscription = PushSettings.User;
            }
            else if (Equals(sender, _notificationTransferSwitch))
            {
                subscription = PushSettings.Transfer;
            }

            if (e.IsChecked)
            {
                PushSettings |= subscription;
            }
            else
            {
                PushSettings ^= subscription;
            }
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            SetBackButton();
            CreateView();

            PushSettings = AppSettings.User.PushSettings;
            _notificationUpvotesSwitch.On         = PushSettings.HasFlag(PushSettings.Upvote);
            _notificationCommentsUpvotesSwitch.On = PushSettings.HasFlag(PushSettings.UpvoteComment);
            _notificationFollowingSwitch.On       = PushSettings.HasFlag(PushSettings.Follow);
            _notificationCommentsSwitch.On        = PushSettings.HasFlag(PushSettings.Comment);
            _notificationPostingSwitch.On         = PushSettings.HasFlag(PushSettings.User);

            _notificationUpvotesSwitch.ValueChanged         += NotificationChange;
            _notificationCommentsUpvotesSwitch.ValueChanged += NotificationChange;
            _notificationFollowingSwitch.ValueChanged       += NotificationChange;
            _notificationCommentsSwitch.ValueChanged        += NotificationChange;
            _notificationPostingSwitch.ValueChanged         += NotificationChange;
        }
示例#31
0
        public async Task <bool> InitNotificationHubAsync(string hubName, string hubConnectionString, string[] marks)
        {
            isRegisted = null;
            userMarks  = marks;


            //Java.Lang.JavaSystem.LoadLibrary("libbdpush_V2_7");

            NotifyMessageReceiver.Binded += BaiduBinded;
            PushSettings.EnableDebugMode(Xamarin.Forms.Forms.Context, true);
            PushManager.StartWork(Xamarin.Forms.Forms.Context, PushConstants.LoginTypeApiKey, BiaduConfigurationSettings.API_KEY);



            while (isRegisted == null)
            {
                await Task.Delay(50);
            }
            return(isRegisted.Value);
        }
示例#32
0
        public async Task <bool> NotificationUpdateAsync(
            Ekreta.Mobile.Core.Models.Profile profile,
            NotificationMessageType notificationType,
            string token)
        {
            try
            {
                PushSettings pushSettings = await this._globalMobileApi.NotificationUpdateAsync(profile.PushSettings.RegistrationId, (int)notificationType, NotificationMessageSource.Kreta, token);

                profile.PushSettings.NotificationTypes = notificationType;
                profile.PushSettings.Token             = token;
                this.AddOrUpdate(profile);
                return(true);
            }
            catch (Exception ex)
            {
                CrossMobileAnalytics.Current.TrackException(ex, (IDictionary <string, string>)null, nameof(NotificationUpdateAsync), "/Users/admin/myagent/macMiniBlack3/_work/2/s/eKreta.Mobile/eKreta.Mobile.Core.Standard/Repository/DataServices/ProfileDataService.cs", 206);
                return(false);
            }
        }
示例#33
0
        List<TransportReceiver> CreateReceivers(IPipeline<ITransportReceiveContext> mainPipeline)
        {
            if (settings.GetOrDefault<bool>("Endpoint.SendOnly"))
            {
                return new List<TransportReceiver>();
            }

            var purgeOnStartup = settings.GetOrDefault<bool>("Transport.PurgeOnStartup");
            var errorQueue = settings.ErrorQueueAddress();
            var requiredTransactionSupport = settings.GetRequiredTransactionModeForReceives();
            var recoverabilityExecutorFactory = builder.Build<RecoverabilityExecutorFactory>();

            var receivers = BuildMainReceivers(errorQueue, purgeOnStartup, requiredTransactionSupport, recoverabilityExecutorFactory, mainPipeline);

            foreach (var satellitePipeline in settings.Get<SatelliteDefinitions>().Definitions)
            {
                var satelliteRecoverabilityExecutor = recoverabilityExecutorFactory.Create(satellitePipeline.RecoverabilityPolicy, eventAggregator, satellitePipeline.ReceiveAddress);
                var satellitePushSettings = new PushSettings(satellitePipeline.ReceiveAddress, errorQueue, purgeOnStartup, satellitePipeline.RequiredTransportTransactionMode);

                receivers.Add(new TransportReceiver(satellitePipeline.Name, builder.Build<IPushMessages>(), satellitePushSettings, satellitePipeline.RuntimeSettings, new SatellitePipelineExecutor(builder, satellitePipeline), satelliteRecoverabilityExecutor, criticalError));
            }

            return receivers;
        }
示例#34
0
 public Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings)
 {
     this.onError   = onError;
     pipeline       = onMessage;
     path           = BaseDirectoryBuilder.BuildBasePath(settings.InputQueue);
     purgeOnStartup = settings.PurgeOnStartup;
     return(Task.CompletedTask);
 }
        public async Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings)
        {
            pipeline              = onMessage;
            this.onError          = onError;
            inputQueue            = settings.InputQueue;
            receiveCircuitBreaker = new RepeatedFailuresOverTimeCircuitBreaker("EventStoreReceive", TimeSpan.FromSeconds(30), ex => criticalError.Raise("Failed to receive from " + settings.InputQueue, ex));
            this.criticalError    = criticalError;
            if (settings.PurgeOnStartup)
            {
                //inputQueue.Purge();
            }
            await connection.ConnectAsync().ConfigureAwait(false);

            await onStart(criticalError).ConfigureAwait(false);
        }
示例#36
0
 public Task Init(Func <MessageContext, Task> onMessage, Func <ErrorContext, Task <ErrorHandleResult> > onError, CriticalError criticalError, PushSettings settings)
 {
     throw new NotImplementedException();
 }
 public Task Init(Func<MessageContext, Task> onMessage, Func<ErrorContext, Task<ErrorHandleResult>> onError, CriticalError criticalError, PushSettings settings)
 {
     throw new NotImplementedException();
 }
示例#38
0
 /// <summary>
 /// Изменяет настройку Push-уведомлений.
 /// </summary>
 /// <param name="deviceId">Уникальный идентификатор устройства. строка, обязательный параметр (Строка, обязательный параметр).</param>
 /// <param name="settings">Сериализованный JSON-объект, описывающий настройки уведомлений в специальном формате данные в формате JSON (Данные в формате JSON).</param>
 /// <param name="key">Ключ уведомления. строка (Строка).</param>
 /// <param name="value">Новое значение уведомления в специальном формате. список слов, разделенных через запятую (Список слов, разделенных через запятую).</param>
 /// <returns>
 /// Возвращает 1 в случае успешного выполнения метода.
 /// </returns>
 /// <remarks>
 /// Страница документации ВКонтакте <see href="http://vk.com/dev/account.setPushSettings" />.
 /// </remarks>
 public bool SetPushSettings(string deviceId, PushSettings settings, string key, List<string> value)
 {
     var parameters = new VkParameters
     {
         { "device_id", deviceId },
         { "settings", settings },
         { "key", key },
         { "value", value }
     };
     return _vk.Call("account.setPushSettings", parameters);
 }
示例#39
0
        List<TransportReceiver> BuildMainReceivers(string errorQueue, bool purgeOnStartup, TransportTransactionMode requiredTransactionSupport, RecoverabilityExecutorFactory recoverabilityExecutorFactory, IPipeline<ITransportReceiveContext> mainPipeline)
        {
            var localAddress = settings.LocalAddress();
            var distributorAddress = settings.GetOrDefault<string>("LegacyDistributor.Address");

            var recoverabilityExecutor = recoverabilityExecutorFactory.CreateDefault(eventAggregator, distributorAddress ?? localAddress);
            var pushSettings = new PushSettings(settings.LocalAddress(), errorQueue, purgeOnStartup, requiredTransactionSupport);
            var mainPipelineExecutor = new MainPipelineExecutor(builder, eventAggregator, pipelineCache, mainPipeline);
            var dequeueLimitations = GetDequeueLimitationsForReceivePipeline();

            var receivers = new List<TransportReceiver>();

            receivers.Add(new TransportReceiver(MainReceiverId, builder.Build<IPushMessages>(), pushSettings, dequeueLimitations, mainPipelineExecutor, recoverabilityExecutor, criticalError));

            if (settings.InstanceSpecificQueue() != null)
            {
                var instanceSpecificQueue = settings.InstanceSpecificQueue();
                var instanceSpecificRecoverabilityExecutor = recoverabilityExecutorFactory.CreateDefault(eventAggregator, instanceSpecificQueue);
                var sharedReceiverPushSettings = new PushSettings(settings.InstanceSpecificQueue(), errorQueue, purgeOnStartup, requiredTransactionSupport);

                receivers.Add(new TransportReceiver(MainReceiverId, builder.Build<IPushMessages>(), sharedReceiverPushSettings, dequeueLimitations, mainPipelineExecutor, instanceSpecificRecoverabilityExecutor, criticalError));
            }

            return receivers;
        }
 public Task Init(Func<PushContext, Task> pipe, CriticalError criticalError, PushSettings settings)
 {
     throw new NotImplementedException();
 }
示例#41
0
 public Task Init(Func<MessageContext, Task> onMessage, Func<ErrorContext, Task<ErrorHandleResult>> onError, NServiceBus.CriticalError criticalError, PushSettings settings)
 {
     this.criticalError = criticalError;
     return Task.FromResult(0);
 }
 public Task Init(Func<MessageContext, Task> onMessage, Func<ErrorContext, Task<ErrorHandleResult>> onError, CriticalError criticalError, PushSettings settings)
 {
     pushSettings = settings;
     return Task.FromResult(0);
 }