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 = пользователь.Фамилия }); } } } }
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")); }