public async Task SendMessage(string chatRoomCode, string chatRoomId, string user, string message) { var hubMessage = new HubMessageDto { ConnectionId = Context.ConnectionId, ChatRoomId = int.Parse(chatRoomId), ChatRoomCode = chatRoomCode, FromUser = user, MessageText = message, OcurredAt = DateTimeOffset.UtcNow }; var messagesToDisplay = await _chatService.ProcessHubMessage(hubMessage); // if (hubMessage.IsCommandMessage) { //If it was a command message, only print message for sender foreach (var m in messagesToDisplay) { await Clients.Client(Context.ConnectionId).SendAsync(EventsConstants.RECEIVE_MESSAGE, m); } } else { //Send message to group foreach (var m in messagesToDisplay) { await Clients.Group(chatRoomCode).SendAsync(EventsConstants.RECEIVE_MESSAGE, m); } } }
public async Task <IEnumerable <ChatRoomMessageDto> > ProcessHubMessage(HubMessageDto hubMessage) { var chatRoomMessageDto = _mapper.Map <ChatRoomMessageDto>(hubMessage); var responseMessages = new List <ChatRoomMessageDto>(); responseMessages.Add(chatRoomMessageDto); // if (hubMessage.IsCommandMessage) { switch (hubMessage.CommandName) { case SupportedBotCommands.STOCK: if (string.IsNullOrEmpty(hubMessage.CommandParameter)) { goto default; } var request = new StockRequest { StockCode = hubMessage.CommandParameter, RequestedBy = hubMessage.FromUser, ConnectionId = hubMessage.ConnectionId }; await _stockRequesterService.RequestStock(request); break; default: var message = string.IsNullOrEmpty(hubMessage.CommandParameter) ? "Command parameter cannot be empty." : "Sorry but I don't know that command. Try something like /stock={symbol}"; responseMessages .Add(new ChatRoomMessageDto { ChatRoomCode = hubMessage.ChatRoomCode, ChatRoomId = hubMessage.ChatRoomId, FromUser = "******", OcurredAt = DateTimeOffset.UtcNow, MessageText = message }); break; } return(responseMessages); } await _chatRoomMessageService.Create(chatRoomMessageDto); return(responseMessages); }