public ApiResponseModel ReceiveMessage(User user, ChatSendModel message)
        {
            if (message == null)
            {
                return(new ApiResponseModel(false));
            }

            var chatMessage = new ChatMessage
            {
                ChannelId  = message.ChannelId,
                Message    = message.Message,
                SenderId   = user.Id,
                SenderName = user.Username,
                Date       = DateTime.UtcNow,
            };

            var channel = LookupChannel(user, message.ChannelId,
                                        message.ChannelId == null ? ChatChannelType.Global : (ChatChannelType?)null);

            if (channel == null)
            {
                return(new ApiResponseModel(ErrMsg_NoSuchChannel, ResponseType.InvalidModel));
            }

            if (channel.Type == ChatChannelType.Private)
            {
                //find sender private channel to send his message to him too (not only on destination channel)
                var senderChannel = LookupChannel(user, user.Id, ChatChannelType.Private);
                if (senderChannel != null)
                {
                    senderChannel.AddMessage(user, chatMessage);
                }
            }
            //Non-Private have restriction, so can send only subscriber
            else if (!channel.Subscribers.ContainsKey(user.Id))
            {
                return(new ApiResponseModel(ErrMsg_UserIsNotSubscribed, ResponseType.NotAllowed));
            }

            channel.AddMessage(user, chatMessage);
            return(new ApiResponseModel(true));
        }
        public async Task <IActionResult> ReceiveMessage([FromHeader] string authToken, [FromBody] ChatSendModel message)
        {
            ApiResponseModel result = null;
            await Task.Run(() => { result = ServerContext.Current.Chat.ReceiveMessage(UserContext.User, message); });

            return(await GenericResponse(result));
        }