public StateManager( WaitingQueueRepo waitingQueueRepo, ConnectionRepo connectionRepo) { WaitingQueueRepo = waitingQueueRepo; ConnectionRepo = connectionRepo; }
public void AddToQueue(SubscriberRecord customer) { if (ConnectionManager.HasCustomerConnection(customer)) { TelegramClient.SendTextMessageAsync(customer.ChatId, "You are already connected.", replyMarkup: StateManager.GetCustomerReplyKeyboardMarkup(customer)); return; } if (WaitingQueueRepo.HasWaiter(customer)) { TelegramClient.SendTextMessageAsync(customer.ChatId, $"You're Number {WaitingQueueRepo.GetPosition(customer)} In Queue.", replyMarkup: StateManager.GetCustomerReplyKeyboardMarkup(customer)); return; } if (!WaitingQueueRepo.Any()) { if (!ConnectionManager.TryConnect(customer)) { WaitingQueueRepo.Enqueue(customer); TelegramClient.SendTextMessageAsync(customer.ChatId, $"You're Number {WaitingQueueRepo.GetPosition(customer)} In Queue.", replyMarkup: StateManager.GetCustomerReplyKeyboardMarkup(customer)); } } else { WaitingQueueRepo.Enqueue(customer); TelegramClient.SendTextMessageAsync(customer.ChatId, $"You're Number {WaitingQueueRepo.GetPosition(customer)} In Queue.", replyMarkup: StateManager.GetCustomerReplyKeyboardMarkup(customer)); } }
public IReplyMarkup GetCustomerReplyKeyboardMarkup(SubscriberRecord customer) { if (ConnectionRepo.FindPartyChatId(customer) != default(long)) { return(Keyboards.Connected); } else if (WaitingQueueRepo.HasWaiter(customer)) { return(Keyboards.InQueue); } else { return(Keyboards.NotConnected); } }
public WaitingManager( WaitingQueueRepo waitingQueueRepo, ConnectionManager connectionManager, ITelegramBotClient telegramClient, SubscriberRepo subscriberRepo, StateManager stateManager, ConnectionNotifier connectionNotifier) { WaitingQueueRepo = waitingQueueRepo; ConnectionManager = connectionManager; TelegramClient = telegramClient; SubscriberRepo = subscriberRepo; StateManager = stateManager; connectionNotifier.NotifyOnCustomerDisconnect(CustomerDisconnected); }
public void CustomerDisconnected() { //TODO: Get first and if connect, then remove from queue var customerChatId = WaitingQueueRepo.Dequeue(); if (customerChatId == default(long)) { return; } var customer = SubscriberRepo.GetByChatId(customerChatId); ConnectionManager.TryConnect(customer); var waitersChatIds = WaitingQueueRepo.GetAll().ToList(); foreach (var waiterChatId in waitersChatIds) { TelegramClient.SendTextMessageAsync(waiterChatId, $"You're Number {waitersChatIds.IndexOf(waiterChatId) + 1} In Queue.", replyMarkup: StateManager.GetCustomerReplyKeyboardMarkup(customer)); } }
public void Cancel(SubscriberRecord customer) { if (!WaitingQueueRepo.HasWaiter(customer)) { TelegramClient.SendTextMessageAsync(customer.ChatId, "You're not In Queue.", replyMarkup: StateManager.GetCustomerReplyKeyboardMarkup(customer)); return; } var removedPosition = WaitingQueueRepo.GetPosition(customer); WaitingQueueRepo.Remove(customer); TelegramClient.SendTextMessageAsync(customer.ChatId, "You're not In Queue Anymore.", replyMarkup: StateManager.GetCustomerReplyKeyboardMarkup(customer)); var waiters = WaitingQueueRepo.GetAll().ToList(); var waitersToNotifyChatIds = waiters.Skip(removedPosition - 1); foreach (var chatId in waitersToNotifyChatIds) { TelegramClient.SendTextMessageAsync(chatId, $"You're Number {waiters.IndexOf(chatId) + 1} In Queue.", replyMarkup: StateManager.GetCustomerReplyKeyboardMarkup(customer)); } }