Пример #1
0
        public async Task <ActionResult> Create(MessageViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (model.MessageBody.Trim() == "")
                {
                    return(Json(new { success = false, responseText = "Вы не ввели сообщение" }, JsonRequestBehavior.AllowGet));
                }


                var toUser = userProfileService.GetUserProfile(u => u.Id == model.ReceiverId, u => u.DialogsAsСompanion, u => u.DialogsAsCreator,
                                                               u => u.DialogsAsCreator.Select(i => i.Messages), u => u.DialogsAsСompanion.Select(i => i.Messages));
                var currentUserId = User.Identity.GetUserId <int>();
                var fromUser      = await userProfileService.GetUserProfileAsync(u => u.Id == currentUserId, u => u.DialogsAsСompanion, u => u.DialogsAsCreator,
                                                                                 u => u.DialogsAsCreator.Select(i => i.Messages), u => u.DialogsAsСompanion.Select(i => i.Messages));

                if (toUser != null && fromUser != null && toUser.Id != fromUser.Id)
                {
                    Message message = Mapper.Map <MessageViewModel, Message>(model);
                    message.FromViewed  = true;
                    message.SenderId    = fromUser.Id;
                    message.CreatedDate = DateTime.Now;
                    var privateDialog = dialogService.GetPrivateDialog(toUser, fromUser);

                    if (privateDialog == null)
                    {
                        privateDialog = new Dialog()
                        {
                            CreatorId   = fromUser.Id,
                            CompanionId = toUser.Id
                        };

                        dialogService.CreateDialog(privateDialog);
                        privateDialog.Messages.Add(message);
                        await messageService.SaveMessageAsync();

                        messageHub.AddDialog(fromUser.Name, privateDialog.Id, fromUser.Avatar32, fromUser.Avatar32);
                        messageHub.AddDialog(toUser.Name, privateDialog.Id, toUser.Avatar32, toUser.Name);
                        //_hubContext.Clients.User(fromUser.Name).addDialog(toUser.Id, toUser.Name, privateDialog.Id);
                        //_hubContext.Clients.User(toUser.Name).addDialog(fromUser.Id, fromUser.Name, privateDialog.Id);

                        //AddDialog(toUser.Name, fromUser.Name, toUser.Id, toUser.Name, privateDialog.Id);
                    }
                    else
                    {
                        privateDialog.Messages.Add(message);
                        await messageService.SaveMessageAsync();
                    }

                    int newDialogsCount = 0;
                    newDialogsCount = dialogService.UnreadDialogsForUserCount(toUser.Id);

                    messageHub.UpdateMessage(newDialogsCount, toUser.Name);
                    //_hubContext.Clients.User(toUser.Name).updateMessage(newDialogsCount);// hub

                    int messageInDialogCount = 0;
                    messageInDialogCount = dialogService.UnreadMessagesInDialogCount(privateDialog);
                    var lastMessage = privateDialog.Messages.LastOrDefault();
                    if (lastMessage != null)
                    {
                        messageHub.UpdateMessageInDialog(messageInDialogCount, lastMessage.MessageBody, lastMessage.CreatedDate.ToShortDateString(), privateDialog.Id, toUser.Name, toUser.Avatar32, fromUser.Name);
                        //_hubContext.Clients.User(toUser.Name).updateMessageInDialog(toUser.Name, fromUser.Id, fromUser.Name, messageInDialogCount, lastMessage.MessageBody, lastMessage.CreatedDate.ToShortDateString(), privateDialog.Id);
                    }

                    messageHub.AddMessage(toUser.Name, fromUser.Name, message.MessageBody, message.CreatedDate.ToString(), fromUser.Avatar32);

                    //_hubContext.Clients.User(senderName).addMessage(receiverName, senderName, messageBody, date, senderImage);
                    //_hubContext.Clients.User(receiverName).addMessage(receiverName, senderName, messageBody, date, senderImage);
                    return(Json(new { success = true }));
                }
                return(Json(new { success = false, responseText = "Ошибка при отправке сообщения. Повторите попытку" }, JsonRequestBehavior.AllowGet));
            }

            return(Json(new { success = false, responseText = "Ошибка при отправке сообщения. Повторите попытку" }, JsonRequestBehavior.AllowGet));
        }