public RedisHubLifetimeManager(ILogger <RedisHubLifetimeManager <THub> > logger,
                                       IOptions <RedisOptions> options,
                                       IHubProtocolResolver hubProtocolResolver)
        {
            _logger     = logger;
            _options    = options.Value;
            _ackHandler = new AckHandler();
            _channels   = new RedisChannels(typeof(THub).FullName);
            _protocol   = new RedisProtocol(hubProtocolResolver.AllProtocols);

            var writer = new LoggerTextWriter(logger);

            RedisLog.ConnectingToEndpoints(_logger, options.Value.Options.EndPoints, _serverName);
            _redisServerConnection = _options.Connect(writer);

            _redisServerConnection.ConnectionRestored += (_, e) =>
            {
                // We use the subscription connection type
                // Ignore messages from the interactive connection (avoids duplicates)
                if (e.ConnectionType == ConnectionType.Interactive)
                {
                    return;
                }

                RedisLog.ConnectionRestored(_logger);
            };

            _redisServerConnection.ConnectionFailed += (_, e) =>
            {
                // We use the subscription connection type
                // Ignore messages from the interactive connection (avoids duplicates)
                if (e.ConnectionType == ConnectionType.Interactive)
                {
                    return;
                }

                RedisLog.ConnectionFailed(_logger, e.Exception);
            };

            if (_redisServerConnection.IsConnected)
            {
                RedisLog.Connected(_logger);
            }
            else
            {
                RedisLog.NotConnected(_logger);
            }
            _bus = _redisServerConnection.GetSubscriber();

            SubscribeToAll();
            SubscribeToGroupManagementChannel();
            SubscribeToAckChannel();
        }
        public RedisHubLifetimeManager(ILogger <RedisHubLifetimeManager <THub> > logger,
                                       IOptions <RedisOptions> options,
                                       IHubProtocolResolver hubProtocolResolver)
        {
            _logger     = logger;
            _options    = options.Value;
            _ackHandler = new AckHandler();
            _channels   = new RedisChannels(typeof(THub).FullName);
            _protocol   = new RedisProtocol(hubProtocolResolver.AllProtocols);

            RedisLog.ConnectingToEndpoints(_logger, options.Value.Options.EndPoints, _serverName);
        }
        public ShardingRedisHubLifetimeManager(ILogger <RedisHubLifetimeManager <THub> > logger,
                                               IOptions <ShardingRedisOptions> options,
                                               IHubProtocolResolver hubProtocolResolver)
        {
            _logger     = logger;
            _options    = options.Value;
            _ackHandler = new AckHandler();
            _channels   = new RedisChannels(typeof(THub).FullName);
            _protocol   = new RedisProtocol(hubProtocolResolver.AllProtocols);

            _ = EnsureRedisServerConnection();
        }
Example #4
0
        public void SendMessage(RedisChannels channel, RedisMessage message = null)
        {
            message = message ?? new DefaultRedisMessage();


#if log
            Console.WriteLine("Sending Message: " + channel + "    " + str);
            Console.WriteLine();
#endif

            database.ListLeftPush($"{channel}-bl", ObjectToByteArray(message));
            subscriber.Publish(channel.ToString(), "");
        }
Example #5
0
        public Task <RedisMessage> AskQuestion(RedisChannels channelEnum, RedisMessage message = null)
        {
            var channel = channelEnum.ToString();

            message = message ?? new DefaultRedisMessage();


#if log
            Console.WriteLine("Asking Question: " + channel + "    " + str);
            Console.WriteLine();
#endif
            database.ListLeftPush($"{channel}-bl", ObjectToByteArray(message));
            subscriber.Publish(channel, "");

            return(lateTaskManager.Build(message.Guid));
        }
Example #6
0
        public void SendMessage(RedisChannels channel, RedisMessage message = null)
        {
            message = message ?? new DefaultRedisMessage();

            string str = JsonConvert.SerializeObject(message, new JsonSerializerSettings()
            {
                TypeNameHandling = TypeNameHandling.Objects
            });
            #if log

            Console.WriteLine("Sending Message: " + channel + "    " + str);
            Console.WriteLine();
            #endif

            database.ListLeftPush($"{channel}-bl", str);
            subscriber.Publish(channel.ToString(), "");
        }
Example #7
0
        public Task<RedisMessage> AskQuestion(RedisChannels channelEnum, RedisMessage message = null)
        {
            var channel = channelEnum.ToString();

            message = message ?? new DefaultRedisMessage();

            string str = JsonConvert.SerializeObject(message, new JsonSerializerSettings()
            {
                TypeNameHandling = TypeNameHandling.Objects
            });
            #if log

            Console.WriteLine("Asking Question: " + channel + "    " + str);
            Console.WriteLine();
            #endif
            database.ListLeftPush($"{channel}-bl", str);
            subscriber.Publish(channel, "");

            return lateTaskManager.Build(message.Guid);
        }
Example #8
0
        /// <summary>
        /// Constructs the <see cref="RedisHubLifetimeManager{THub}"/> with types from Dependency Injection.
        /// </summary>
        /// <param name="logger">The logger to write information about what the class is doing.</param>
        /// <param name="options">The <see cref="RedisOptions"/> that influence behavior of the Redis connection.</param>
        /// <param name="hubProtocolResolver">The <see cref="IHubProtocolResolver"/> to get an <see cref="IHubProtocol"/> instance when writing to connections.</param>
        /// <param name="globalHubOptions">The global <see cref="HubOptions"/>.</param>
        /// <param name="hubOptions">The <typeparamref name="THub"/> specific options.</param>
        public RedisHubLifetimeManager(ILogger <RedisHubLifetimeManager <THub> > logger,
                                       IOptions <RedisOptions> options,
                                       IHubProtocolResolver hubProtocolResolver,
                                       IOptions <HubOptions>?globalHubOptions,
                                       IOptions <HubOptions <THub> >?hubOptions)
        {
            _logger     = logger;
            _options    = options.Value;
            _ackHandler = new AckHandler();
            _channels   = new RedisChannels(typeof(THub).FullName !);
            if (globalHubOptions != null && hubOptions != null)
            {
                _protocol = new RedisProtocol(new DefaultHubMessageSerializer(hubProtocolResolver, globalHubOptions.Value.SupportedProtocols, hubOptions.Value.SupportedProtocols));
            }
            else
            {
                var supportedProtocols = hubProtocolResolver.AllProtocols.Select(p => p.Name).ToList();
                _protocol = new RedisProtocol(new DefaultHubMessageSerializer(hubProtocolResolver, supportedProtocols, null));
            }

            RedisLog.ConnectingToEndpoints(_logger, options.Value.Configuration.EndPoints, _serverName);
            _ = EnsureRedisServerConnection();
        }
Example #9
0
 public void SubscribeToAnswers(RedisChannels channel)
 {
     subscriber.Subscribe(channel.ToString(), onReceiveMessage);
 }
Example #10
0
 public void Subscribe(RedisChannels channel, Action <RedisMessage> resolve)
 {
     subscriptions.Add(channel.ToString(), resolve);
     subscriber.Subscribe(channel.ToString(), onReceiveMessage);
 }
Example #11
0
 public void SubscribeToAnswers(RedisChannels channel)
 {
     subscriber.Subscribe(channel.ToString(), onReceiveMessage);
 }
Example #12
0
 public void Subscribe(RedisChannels channel, Action<RedisMessage> resolve)
 {
     subscriptions.Add(channel.ToString(), resolve);
     subscriber.Subscribe(channel.ToString(), onReceiveMessage);
 }