Example #1
0
        public async Task SendMessage(string?id, string?text = "", string?friendid = "")
        {
            var UserName = Context.User.Identity.Name;

            if (id == "")
            {
                Беседа беседа = new Беседа
                {
                    ID_Беседы       = Guid.NewGuid(),
                    Дата_создания   = DateTime.Now,
                    Название_беседы = "personal",
                    Описание_беседы = null,
                };
                Участник участник = new Участник
                {
                    ID_беседы                 = беседа.ID_Беседы,
                    Дата_добавления           = DateTime.Now,
                    Дата_последнего_просмотра = DateTime.Now,
                    ID_Пользователя           = Guid.Parse(UserName),
                };
                Участник участник2 = new Участник
                {
                    ID_беседы                 = беседа.ID_Беседы,
                    Дата_добавления           = DateTime.Now,
                    Дата_последнего_просмотра = DateTime.Now,
                    ID_Пользователя           = Guid.Parse(friendid),
                };
                _context.Add(беседа);
                _context.Add(участник);
                _context.Add(участник2);
                List <Участник> участникs = new List <Участник>();
                участникs.Add(участник);
                участникs.Add(участник2);
                Сообщения сообщениеновое = new Сообщения
                {
                    ID_беседы       = беседа.ID_Беседы,
                    ID_Пользователя = Guid.Parse(UserName.ToLower()),
                    Дата_отправки   = DateTime.Now,
                    Текст_сообщения = text
                };
                _context.Add(сообщениеновое);
                Пользователь пользовательновый = _context.Пользователь.FirstOrDefault(t => t.ID == Guid.Parse(UserName));
                _context.SaveChanges();
                foreach (var item in участникs)
                {
                    var covertantId = участникs.FirstOrDefault(t => t.ID_Пользователя != item.ID_Пользователя).ID_Пользователя;
                    var covertant   = _context.Пользователь.FirstOrDefault(t => t.ID == covertantId);
                    try
                    {
                        await Clients.User(item.ID_Пользователя.ToString().ToLower()).SendAsync("MessageSend", new
                        {
                            user_send    = сообщениеновое.ID_Пользователя,
                            conv_id      = сообщениеновое.ID_беседы,
                            conv_name    = covertant.Фамилия + " " + covertant.Имя,
                            conv_user_id = covertant.ID,
                            date         = сообщениеновое.Дата_отправки.Hour + " " + сообщениеновое.Дата_отправки.Minute,
                            text         = сообщениеновое.Текст_сообщения,
                            firstname    = пользовательновый.Имя,
                            secondname   = пользовательновый.Фамилия
                        });
                    }
                    catch (Exception ex)
                    {
                        var a = 1;
                    }
                }
            }
            else
            {
                Сообщения сообщение = new Сообщения
                {
                    ID_беседы       = Guid.Parse(id),
                    ID_Пользователя = Guid.Parse(UserName.ToLower()),
                    Дата_отправки   = DateTime.Now,
                    Текст_сообщения = text
                };
                _context.Add(сообщение);
                Пользователь пользователь = _context.Пользователь.FirstOrDefault(t => t.ID == Guid.Parse(UserName));
                var          members      = _context.Участник.Where(t => t.ID_беседы == Guid.Parse(id)).ToList();
                Беседа       беседа       = _context.Беседа.Include(t => t.Участники).FirstOrDefault(t => t.ID_Беседы == Guid.Parse(id));
                string       conv_name    = "";
                _context.SaveChanges();
                if (беседа.Участники.Count() == 2)
                {
                    foreach (var item in members)
                    {
                        var covertantId = members.FirstOrDefault(t => t.ID_Пользователя != item.ID_Пользователя).ID_Пользователя;
                        var covertant   = _context.Пользователь.FirstOrDefault(t => t.ID == covertantId);
                        if (item.ID_Пользователя.ToString().ToLower() == UserName.ToLower())
                        {
                            await Clients.User(item.ID_Пользователя.ToString().ToLower()).SendAsync("MessageSend", new
                            {
                                flag         = 1,
                                user_send    = сообщение.ID_Пользователя,
                                conv_id      = сообщение.ID_беседы,
                                conv_name    = covertant.Фамилия + " " + covertant.Имя,
                                conv_user_id = covertant.ID,
                                date         = сообщение.Дата_отправки.ToLongDateString(),
                                time         = сообщение.Дата_отправки.Hour + ":" + сообщение.Дата_отправки.Minute,
                                text         = сообщение.Текст_сообщения,
                                firstname    = пользователь.Имя,
                                secondname   = пользователь.Фамилия
                            });
                        }
                        else
                        {
                            await Clients.User(item.ID_Пользователя.ToString().ToLower()).SendAsync("MessageSend", new
                            {
                                user_send    = сообщение.ID_Пользователя,
                                conv_id      = сообщение.ID_беседы,
                                conv_name    = covertant.Фамилия + " " + covertant.Имя,
                                conv_user_id = covertant.ID,
                                date         = сообщение.Дата_отправки.ToLongDateString(),
                                time         = сообщение.Дата_отправки.Hour + ":" + сообщение.Дата_отправки.Minute,
                                text         = сообщение.Текст_сообщения,
                                firstname    = пользователь.Имя,
                                secondname   = пользователь.Фамилия
                            });
                        }
                    }
                }
                else
                {
                    conv_name = беседа.Название_беседы;
                    foreach (var item in members)
                    {
                        var covertantId = members.FirstOrDefault(t => t.ID_Пользователя != item.ID_Пользователя).ID_Пользователя;
                        var covertant   = _context.Пользователь.FirstOrDefault(t => t.ID == covertantId);
                        await Clients.User(item.ID_Пользователя.ToString().ToLower()).SendAsync("MessageSend", new
                        {
                            user_send    = сообщение.ID_Пользователя,
                            conv_id      = сообщение.ID_беседы,
                            conv_name    = covertant.Фамилия + " " + covertant.Имя,
                            conv_user_id = covertant.ID,
                            date         = сообщение.Дата_отправки.ToLongDateString(),
                            time         = сообщение.Дата_отправки.Hour + ":" + сообщение.Дата_отправки.Minute,
                            text         = сообщение.Текст_сообщения,
                            firstname    = пользователь.Имя,
                            secondname   = пользователь.Фамилия
                        });
                    }
                }
            }
        }
Example #2
0
        public IActionResult Dialog(string id, string?typeid)
        {
            Guid IdUser = Guid.Parse(HttpContext.User.Identity.Name);
            List <Пользователь>         Пользователи = new List <Пользователь>();
            List <Сообщения>            Сообщения;
            MessagessWithUsersViewModel messagessWithUsersViewModel;

            if (id == null)
            {
                RedirectToAction("Conversations");
            }
            if (typeid != null)
            {
                if (typeid == "friendid")
                {
                    Guid IdFriend = Guid.Parse(id);
                    Microsoft.Data.SqlClient.SqlParameter param1 = new Microsoft.Data.SqlClient.SqlParameter("@ID1", IdFriend);
                    Microsoft.Data.SqlClient.SqlParameter param2 = new Microsoft.Data.SqlClient.SqlParameter("@ID2", IdUser);
                    Беседа беседа_персональная = _context.Беседа.FromSqlRaw("EXECUTE GetPersonalConvs @ID1, @ID2", new SqlParameter[] { param1, param2 }).AsEnumerable().FirstOrDefault();
                    if (беседа_персональная == null)
                    {
                        Пользователи.Add(_context.Пользователь.FirstOrDefault(t => t.ID == IdUser));
                        Пользователи.Add(_context.Пользователь.FirstOrDefault(t => t.ID == IdFriend));
                        Сообщения = new List <Сообщения>();
                        messagessWithUsersViewModel = new MessagessWithUsersViewModel
                        {
                            сообщения    = Сообщения,
                            пользователи = Пользователи
                        };
                        return(View(messagessWithUsersViewModel));
                    }
                    id = беседа_персональная.ID_Беседы.ToString();
                }
            }
            Guid   Id     = Guid.Parse(id);
            Беседа беседа = _context.Беседа.Include(t => t.Участники).FirstOrDefault(t => t.ID_Беседы == Id);

            Сообщения = _context.Сообщения.Include(t => t.Участник).Where(t => t.ID_беседы == Id).OrderBy(t => t.Дата_отправки).Take(100).ToList();
            bool isForCurrentUser = false;

            /*if (беседа == null)
             * {
             *  var Id_бесед = _context.Участник.Where(t => t.ID_Пользователя == Id).Select(t => t.ID_беседы).ToList();
             *  List<Беседа> беседы_личные = new List<Беседа>();
             *  foreach (var idшка in Id_бесед)
             *  {
             *      беседы_личные
             *  }
             * }*/
            foreach (var item in беседа.Участники)
            {
                Пользователи.Add(_context.Пользователь.FirstOrDefault(t => t.ID == item.ID_Пользователя));
                if (item.ID_Пользователя == IdUser)
                {
                    isForCurrentUser = true;
                }
            }
            messagessWithUsersViewModel = new MessagessWithUsersViewModel
            {
                сообщения    = Сообщения,
                пользователи = Пользователи
            };
            if (isForCurrentUser)
            {
                return(View(messagessWithUsersViewModel));
            }
            return(RedirectToAction("Conversations"));
        }