コード例 #1
0
 public void UnSubscribeFromSettingsReceiver()
 {
     try
     {
         _receiverQueueController.UnSubscribeFromQueueAsync().Wait();
         _receiverQueueController = null;
     }
     catch
     {
         //log
     }
 }
コード例 #2
0
        public FileFormatterCentralService(IFileAssembler fileAssembler, IServiceBusConfiguration fileQueueConfig, IServiceBusConfiguration statusQueueConfig, IServiceBusConfiguration controlQueueConfig)
        {
#if DEBUG
            var appDir = AppDomain.CurrentDomain.BaseDirectory;
            OutputPath            = Path.GetFullPath(Path.Combine(appDir, "..\\..\\..\\", OutputFolderName));
            SystemFilesPath       = Path.GetFullPath(Path.Combine(appDir, "..\\..\\..\\", SystemFilesFolderName));
            DefaultNewPageTimeout = 10;
#endif

            _statusQueueConfig   = statusQueueConfig;
            _controlQueueConfig  = controlQueueConfig;
            _fileQueueController = new AzureMessagesQueueController(fileQueueConfig);
            _fileAssembler       = fileAssembler;
            _settingsExchanger   = new FileFormatterSettingsExchanger();
        }
コード例 #3
0
        public async Task SubscribeToSettingsReceiver(Func <FileFormatterSettings, Task> onReceiveSettings, IServiceBusConfiguration configuration)
        {
            _receiverQueueController = new AzureMessagesTopicController(configuration);
            if (!await _receiverQueueController.QueueExist())
            {
                throw new InvalidOperationException($"Wrong configuration '{configuration.ConfigurationName}' or queue doesn't exist.");
            }

            await Task.Run(async() => await _receiverQueueController.SubscribeToQueueAsync <SettingsMessageItem>(x => onReceiveSettings(new FileFormatterSettings
            {
                NewPageTimeOut = x.NewPageTimeout,
                ServiceStatus  = x.ServiceStatus != null
                    ? (ServiceControllerStatus?)Enum.Parse(typeof(ServiceControllerStatus), x.ServiceStatus)
                    : null,
                NodeName = x.NodeName,
                Date     = x.Date
            })));
        }
コード例 #4
0
        public void StartAssembling(string savePath, IMessagesController messageController)
        {
            _cts = new CancellationTokenSource();
            Task.Run(async() =>
            {
                while (!_cts.IsCancellationRequested)
                {
                    try
                    {
                        var message = await messageController.RecieveMessageAsync <FileMessageItem>();
                        if (message != null)
                        {
                            if (_messagesContainer.TryGetValue(message.SequenceId, out var messages))
                            {
                                messages?.Messages.Add(message);
                            }
                            else
                            {
                                _messagesContainer.Add(message.SequenceId, new FileMessageSequence(messageController.MessageTtl, DateTime.Now, message));
                            }
                        }

                        if (!_messagesContainer.Any())
                        {
                            continue;
                        }

                        foreach (var assembledSequence in _messagesContainer.Values.Where(x => x.IsAssembled))
                        {
                            var orderedSequence = assembledSequence.Messages
                                                  .OrderBy(y => y.Id)
                                                  .ToList();
                            using (var fs = new FileStream(Path.Combine(savePath, assembledSequence.FileName), FileMode.Create))
                            {
                                var offset = 0;
                                foreach (var item in orderedSequence)
                                {
                                    await fs.WriteAsync(item.Body, offset, item.Body.Length);
                                }

                                var bodyChecksum = Helper.ComputeChecksum(fs);
                                if (!string.Equals(assembledSequence.FileChecksum, bodyChecksum, StringComparison.Ordinal))
                                {
                                    continue;
                                }

                                await fs.FlushAsync();
                            }
                        }
                        _messagesContainer.RemoveAll(x => x.IsExpired || x.IsAssembled);


                        Thread.Sleep(2000);
                    }
                    catch
                    {
                        //to log
                    }
                }
            }, _cts.Token);
        }
コード例 #5
0
 public static void SetUpClass()
 {
     controller = GetClient().Messages;
 }
コード例 #6
0
 public MessageController(IMessagesController messagesController)
 {
     _messagesController = messagesController;
 }
コード例 #7
0
 public void StopAssembling()
 {
     _messageController.UnSubscribeFromQueueAsync().Wait();
     _messageController = null;
 }
コード例 #8
0
 public void StartAssembling(string savePath, IMessagesController messageController)
 {
     _messageController = messageController;
     _savePath          = savePath;
     Task.Run(async() => { await _messageController.SubscribeToQueueAsync(MessageHandler()); });
 }