public void UnSubscribeFromSettingsReceiver() { try { _receiverQueueController.UnSubscribeFromQueueAsync().Wait(); _receiverQueueController = null; } catch { //log } }
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(); }
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 }))); }
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); }
public static void SetUpClass() { controller = GetClient().Messages; }
public MessageController(IMessagesController messagesController) { _messagesController = messagesController; }
public void StopAssembling() { _messageController.UnSubscribeFromQueueAsync().Wait(); _messageController = null; }
public void StartAssembling(string savePath, IMessagesController messageController) { _messageController = messageController; _savePath = savePath; Task.Run(async() => { await _messageController.SubscribeToQueueAsync(MessageHandler()); }); }