예제 #1
0
        internal RedisMessageBus(IDependencyResolver resolver, RedisScaleoutConfiguration configuration, IRedisConnection connection, bool connectAutomatically)
            : base(resolver, configuration)
        {
            if (configuration == null)
            {
                throw new ArgumentNullException(nameof(configuration));
            }

            _connection = connection;
            _connection.ConnectionFailed   += OnConnectionFailed;
            _connection.ConnectionRestored += OnConnectionRestored;
            _connection.ErrorMessage       += OnConnectionError;

            _connectionString = configuration.ConnectionString;
            _db  = configuration.Database;
            _key = configuration.EventKey;

            _traceManager     = resolver.Resolve <ITraceManager>();
            _messageEncryptor = resolver.Resolve <IMessageEncryptor>();

            _trace = _traceManager["SignalR." + nameof(RedisMessageBus)];

            ReconnectDelay = TimeSpan.FromSeconds(2);

            if (connectAutomatically)
            {
                ThreadPool.QueueUserWorkItem(_ =>
                {
                    var ignore = ConnectWithRetry();
                });
            }
        }
예제 #2
0
 public HomeController(IMessageEncryptor encryptor, IMessageRepository repository,
                       IMessageValidator validator, IMessageMapper mapper)
 {
     this.encryptor  = encryptor;
     this.repository = repository;
     this.validator  = validator;
     this.mapper     = mapper;
 }
예제 #3
0
        public static RedisMessage FromBytes(IMessageEncryptor encryptor, byte[] data, TraceSource trace)
        {
            using (var stream = new MemoryStream(data))
            {
                var message = new RedisMessage();

                // read message id from memory stream until SPACE character
                var messageIdBuilder = new StringBuilder(20);
                do
                {
                    // it is safe to read digits as bytes because they encoded by single byte in UTF-8
                    int charCode = stream.ReadByte();
                    if (charCode == -1)
                    {
                        trace.TraceVerbose("Received Message could not be parsed.");
                        throw new EndOfStreamException(Resources.Error_EndOfStreamRedis);
                    }

                    char c = (char)charCode;

                    if (c == ' ')
                    {
                        message.Id       = ulong.Parse(messageIdBuilder.ToString(), CultureInfo.InvariantCulture);
                        messageIdBuilder = null;
                    }
                    else
                    {
                        messageIdBuilder.Append(c);
                    }
                }while (messageIdBuilder != null);


                var encryptedBinaryReader = new BinaryReader(stream);
                var encryptedData         = encryptedBinaryReader.ReadBytes((int)(stream.Length - stream.Position));
                var decryptedData         = encryptor.Decrypt(encryptedData);

                using (var dataStream = new MemoryStream(decryptedData))
                    using (var decryptedReader = new BinaryReader(dataStream))
                    {
                        int    count  = decryptedReader.ReadInt32();
                        byte[] buffer = decryptedReader.ReadBytes(count);

                        message.ScaleoutMessage = ScaleoutMessage.FromBytes(buffer);
                    }

                return(message);
            }
        }
예제 #4
0
        public static byte[] ToBytes(IMessageEncryptor encryptor, IList <Message> messages)
        {
            if (messages == null)
            {
                throw new ArgumentNullException(nameof(messages));
            }

            using (var ms = new MemoryStream())
            {
                var binaryWriter = new BinaryWriter(ms);

                var scaleoutMessage = new ScaleoutMessage(messages);
                var buffer          = scaleoutMessage.ToBytes();

                binaryWriter.Write(buffer.Length);
                binaryWriter.Write(buffer);

                return(encryptor.Encrypt(ms.ToArray()));
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageEncryptingForwardingAppender"/> class.
 /// </summary>
 /// <remarks>
 /// Allows the class dependencies to be injected into the class
 /// </remarks>
 /// <param name="messageEncryption">The message encryption engine to use.</param>
 public MessageEncryptingForwardingAppender(IMessageEncryptor messageEncryption, ILoggingEventFactory logEventFactory)
 {
     this.MessageEncryption = messageEncryption;
     this.LogEventFactory   = logEventFactory;
 }
예제 #6
0
 public RedisConnection(IDependencyResolver resolver, bool webFarmSupport)
 {
     _messageEncryptor = resolver.Resolve <IMessageEncryptor>();
     _webFarmSupport   = webFarmSupport;
 }
예제 #7
0
 public RedisConnection(IDependencyResolver resolver)
 {
     _messageEncryptor = resolver.Resolve <IMessageEncryptor>();
 }
예제 #8
0
 public UserController(IMessageRepository repository, UserManager <ApplicationUser> userManager, IMessageEncryptor encryptor)
 {
     this.repository  = repository;
     this.userManager = userManager;
     this.encryptor   = encryptor;
 }