Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }