Ejemplo n.º 1
0
        public void CreateRoom(string roomName)
        {
            using (var db = new UserContext())
            {
                var room = db.Rooms.Find(roomName);
                if (room == null)
                {
                    var cr = new ConversationRoom
                    {
                        RoomName = roomName
                    };

                    //将房间加入列表
                    db.Rooms.Add(cr);
                    db.SaveChanges();

                    // 本人加入聊天室
                    JoinRoom(roomName);
                    //UpdateRoomList();
                    //Clients.All.MessageReceived(roomName, $"新增聊天室成功:{roomName}");
                }
                else
                {
                    Clients.Client(Context.ConnectionId).showMessage("房间名重复!");
                    // 本人加入聊天室
                    JoinRoom(roomName);
                }
            }
        }
Ejemplo n.º 2
0
        public ActionResult JoinRoom(string id)
        {
            mutexObj.WaitOne();
            id = Regex.Replace(id, @"[^A-Za-z0-9]+", "");
            using (UnitOfWork db = new UnitOfWork())
            {
                ConversationRoom room = db.conversationRoomRepository.GetById(id);
                if (room == null)
                {
                    mutexObj.ReleaseMutex();
                    return(RedirectToRoute("Error", "Not exist"));
                }


                ApplicationUser user = db.userRepository.GetById(User.Identity.GetUserId());
                if (room != null && user != null)
                {
                    user.Rooms.Add(room);
                    room.Users.Add(user);

                    db.userRepository.Update(user);
                    db.conversationRoomRepository.Update(room);

                    db.Save();
                }
                else
                {
                    mutexObj.ReleaseMutex();
                    return(RedirectToRoute("Error", "CantFindRoom"));
                }
            }
            mutexObj.ReleaseMutex();
            return(Redirect("/Chat/" + id));
        }
Ejemplo n.º 3
0
        public ConversationRoom GetByIdDetached(string id)
        {
            ConversationRoom room = db.Rooms.Find(id);

            db.Entry(room).State = EntityState.Detached;
            return(room);
        }
Ejemplo n.º 4
0
        public override Task OnConnected()
        {
            using (var db = new UserContext())
            {
                var name = Context.User.Identity.Name;

                var user = db.Users
                           .Include(u => u.Rooms)
                           .FirstOrDefault(u => u.UserName == name);

                if (user == null)
                {
                    user = new User()
                    {
                        UserName    = name,
                        Connections = new List <Connection>()
                    };
                    db.Users.Add(user);
                    db.SaveChanges();
                    //conexiune noua
                    var conn = new Connection()
                    {
                        ConnectionID = Context.ConnectionId,
                        UserAgent    = Context.Request.Headers["User-Agent"],
                        Connected    = true
                    };
                    user.Connections.Add(conn);
                    db.Connections.Add(conn);
                    db.SaveChanges();
                    //room cu el insusi
                    var room = db.Rooms.Where(u => u.RoomName == name).FirstOrDefault();

                    if (room == null)
                    {
                        room = new ConversationRoom()
                        {
                            RoomName = name,
                            RoomType = ChatRoomTypeEnum.PeerToPeer,
                            Users    = new List <User>()
                        };
                        room.Users.Add(user);
                        db.Rooms.Add(room);
                        db.SaveChanges();
                    }

                    Groups.Add(Context.ConnectionId, Context.User.Identity.Name);
                }
                else
                {
                    ResolveConnections(user, db);

                    foreach (var item in user.Rooms)
                    {
                        Groups.Add(Context.ConnectionId, item.RoomName);
                    }
                }
            }
            return(base.OnConnected());
        }
Ejemplo n.º 5
0
 public void Create(ConversationRoom room)
 {
     if (room == null)
     {
         return;
     }
     db.Rooms.Add(room);
 }
Ejemplo n.º 6
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            ConversationRoom conversationroom = await db.ConversationRooms.FindAsync(id);

            db.ConversationRooms.Remove(conversationroom);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
Ejemplo n.º 7
0
        public async Task OnGetAsync(long roomId)
        {
            Messages = await _context.Messages.Where(x => x.RoomId == roomId)
                       .Include(c => c.Room)
                       .Include(c => c.CreatedBy)
                       .OrderByDescending(x => x.CreatedDate).ToListAsync();

            Room = await _context.Rooms.FirstOrDefaultAsync(x => x.Id == roomId);
        }
Ejemplo n.º 8
0
        public async Task AddToGroup(string groupName)
        {
            var Claim    = Context.User.Identities.FirstOrDefault();
            var userName = Claim.Claims.Where(e => e.Type == "user_name").Select(e => e.Value).FirstOrDefault();
            int userId   = Convert.ToInt32(Claim.Claims.Where(e => e.Type == "user_id").Select(e => e.Value).FirstOrDefault());

            // Retrieve Room.
            var Room = _context.Rooms.Where(s => s.RoomName == groupName).FirstOrDefault();

            if (Room == null)
            {
                Room = new ConversationRoom
                {
                    RoomName = groupName
                };
                _context.Rooms.Add(Room);
                _context.SaveChanges();
            }
            var UserRoom = _context.RoomUsers.Where(s => s.room_id == Room.id && s.user_id == userId).FirstOrDefault();

            if (UserRoom == null)
            {
                UserRoom = new UserInRoom
                {
                    user_id          = userId,
                    room_id          = Room.id,
                    GroupConnections = new List <GroupConnection>()
                };
                _context.RoomUsers.Add(UserRoom);
                _context.SaveChanges();
            }
            else
            {
                UserRoom.GroupConnections = new List <GroupConnection>();
            }
            UserRoom.GroupConnections.Add(new GroupConnection
            {
                ConnectionID = Context.ConnectionId,
                UserAgent    = "User-Agent",
                Connected    = true
            });
            _context.SaveChanges();


            // Add to each assigned group.
            var user = _context.RoomUsers
                       .Include(u => u.GroupConnections)
                       .Where(u => u.room_id == Room.id).ToList();

            await Groups.AddToGroupAsync(Context.ConnectionId, groupName);

            await Clients.Group(groupName).SendAsync("Send", $"{userName} has joined the group {groupName}.");
        }
Ejemplo n.º 9
0
 public void Delete(ConversationRoom room)
 {
     if (room != null)
     {
         using (UnitOfWork unit = new UnitOfWork())
         {
             List <Message> messages = unit.messageRepository.GetByRoom(room);
             unit.messageRepository.DeleteRange(messages);
             unit.Save();
         }
         db.Rooms.Remove(room);
     }
 }
Ejemplo n.º 10
0
        public async Task <ActionResult> Edit([Bind(Include = "ConversationRoomID,Name,User1ID,User2ID")] ConversationRoom conversationroom)
        {
            if (ModelState.IsValid)
            {
                db.Entry(conversationroom).State = EntityState.Modified;
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }
            ViewBag.User1ID = new SelectList(db.Users, "Id", "UserName", conversationroom.User1ID);
            ViewBag.User2ID = new SelectList(db.Users, "Id", "UserName", conversationroom.User2ID);
            return(View(conversationroom));
        }
Ejemplo n.º 11
0
        // GET: /ConversationRoomManager/Details/5
        public async Task <ActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ConversationRoom conversationroom = await db.ConversationRooms.FindAsync(id);

            if (conversationroom == null)
            {
                return(HttpNotFound());
            }
            return(View(conversationroom));
        }
Ejemplo n.º 12
0
        /// <summary>
        /// User calls this method to join a group. The group will be created if it doesn't exist.
        /// </summary>
        /// <param name="groupName"></param>
        /// <returns></returns>
        public async Task <Object> JoinGroup(string groupName)
        {
            if (groupName == null)
            {
                groupName = Guid.NewGuid().ToString();
            }
            ;

            string name = GetNameFromClaim();

            //  var group = context.Rooms.FirstOrDefault(e => e.RoomName == groupName);
            //Add to in-memory group
            await Groups.AddAsync(Context.ConnectionId, groupName);

            // Retrieve room if it exists. If it doesn't it will be created in the future.
            var group = context.Rooms.FirstOrDefault(e => e.RoomName == groupName);
            // Retrieve user.
            var user = context.Users.Include(u => u.ApplicationUserConversationRooms).SingleOrDefault(u => u.UserName == name);

            //Is the user already a member of the group? In that case, return info message to user stating this.
            if (user.ApplicationUserConversationRooms.FirstOrDefault(u => u.RoomName == groupName) != null)
            {
                return(Clients.User(Context.ConnectionId).SendAsync("addInfoMessageFromGroup", new[] { groupName, name + " is already a participant in group " + groupName }));
            }
            //Create Room
            if (group == null)
            {
                group = new ConversationRoom()
                {
                    RoomName = groupName
                };
            }

            ApplicationUserConversationRoom sRCR = new ApplicationUserConversationRoom()
            {
                ApplicationUserId = user.Id,
                ApplicationUser   = user,
                RoomName          = groupName,
                ConversationRoom  = group
            };

            group.ApplicationUserConversationRooms.Add(sRCR);
            context.ApplicationUserConversationRooms.Add(sRCR);
            user.ApplicationUserConversationRooms.Add(sRCR);

            await context.SaveChangesAsync();

            return(Clients.Group(groupName).SendAsync("userAddedToGroup", new[] { name, groupName }));
        }
Ejemplo n.º 13
0
        public async Task <IActionResult> OnGetAsync(long?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Room = await _context.Rooms.FirstOrDefaultAsync(m => m.Id == id);

            if (Room == null)
            {
                return(NotFound());
            }
            return(Page());
        }
Ejemplo n.º 14
0
        // GET: /ConversationRoomManager/Edit/5
        public async Task <ActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            ConversationRoom conversationroom = await db.ConversationRooms.FindAsync(id);

            if (conversationroom == null)
            {
                return(HttpNotFound());
            }
            ViewBag.User1ID = new SelectList(db.Users, "Id", "UserName", conversationroom.User1ID);
            ViewBag.User2ID = new SelectList(db.Users, "Id", "UserName", conversationroom.User2ID);
            return(View(conversationroom));
        }
Ejemplo n.º 15
0
        public async Task <IActionResult> OnPostAsync(long?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            Room = await _context.Rooms.FindAsync(id);

            if (Room != null)
            {
                _context.Rooms.Remove(Room);
                await _context.SaveChangesAsync();
            }

            return(RedirectToPage("./Index"));
        }
        public object AddUserToARoom(string roomName, int userRoleId, bool allowed)
        {
            int countConversationRoom = context.ConversationRooms.Where(cr => cr.RoomName == roomName && cr.UserRoleID == userRoleId).Count();

            if (countConversationRoom > 0)
            {
                return("User has already added to the room.");
            }
            else
            {
                ConversationRoom conversationRoom = new ConversationRoom(roomName, userRoleId, allowed);
                context.ConversationRooms.Add(conversationRoom);
                context.SaveChanges();
                var roomWiseUsers = context.ConversationRooms.Include(cr => cr.UserRole).Select(cr => new { cr.RoomName, cr.UserRole.UserName }).OrderBy(cr => cr.RoomName).ThenBy(cr => cr.UserName).ToArray();
                return(roomWiseUsers);
            }
        }
Ejemplo n.º 17
0
        public ActionResult Rooms()
        {
            var viewModel = new ConversationRoomViewModel();

            if (unitOfWork.RoomRepository.Get().Any() == false)
            {
                ConversationRoom room = new ConversationRoom()
                {
                    RoomName = "TheFirstRoom",
                    RoomType = ChatRoomTypeEnum.UserToRoom
                };
                unitOfWork.RoomRepository.Insert(room);
            }

            viewModel.ConversationRooms = unitOfWork.RoomRepository.Get();

            return(View("Rooms", viewModel));
        }
Ejemplo n.º 18
0
        /// <summary>
        /// 创建聊天室
        /// </summary>
        /// <param name="roomName"></param>
        public void CreatRoom(string roomName)
        {
            var room = db.Rooms.Find(a => a.RoomName == roomName);

            if (room == null)
            {
                ConversationRoom cr = new ConversationRoom()
                {
                    RoomName = roomName
                };
                //将房间加入列表
                db.Rooms.Add(cr);
                AddToRoom(roomName);
                GetRoomList();
            }
            else
            {
                Clients.Clients(Context.ConnectionId).SendAsync("alertMsg", "名称已存在");
            }
        }
Ejemplo n.º 19
0
        /// <summary>
        /// 创建聊天室
        /// </summary>
        /// <param name="roomName"></param>
        public void CreatRoom(string roomName)
        {
            var room = db.Rooms.Find(a => a.RoomName == roomName);

            if (room == null)
            {
                ConversationRoom cr = new ConversationRoom()
                {
                    RoomName = roomName
                };
                //将房间加入列表
                db.Rooms.Add(cr);
                AddToRoom(roomName);
                Clients.Client(Context.ConnectionId).showMessage("房间创建完成!");
                GetRoomList();
            }
            else
            {
                Clients.Client(Context.ConnectionId).showMessage("房间名重复!");
            }
        }
        public bool AddConversationRoom(RequestUserOPDRegisterSubmitDTO request, DBEntities db = null)
        {
            bool dbPrivateFlag = false;

            if (db == null)
            {
                db            = CreateDb();
                dbPrivateFlag = true;
            }

            #region 创建房间
            request.ChannelID = Guid.NewGuid().ToString("N");
            var room = new ConversationRoom()
            {
                EndTime            = DateTime.Parse(request.OPDDate.ToString("yyyy-MM-dd ") + request.OPDEndTime),
                BeginTime          = DateTime.Parse(request.OPDDate.ToString("yyyy-MM-dd ") + request.OPDBeginTime),
                TotalTime          = 0,
                RoomState          = EnumRoomState.NoTreatment,//状态
                ConversationRoomID = request.ChannelID,
                ServiceID          = request.OPDRegisterID,
                ServiceType        = request.OPDType,
                //如果预约类型是挂号那么房间类型就是线下看诊,否则是线上看诊
                RoomType = EnumRoomType.Group,
                TriageID = long.MaxValue,
                Priority = request.UserLevel,
                DisableWebSdkInteroperability = true,
            };

            db.ConversationRooms.Add(room);
            #endregion

            var ret = true;

            if (dbPrivateFlag)
            {
                db.Dispose();
                ret = db.SaveChanges() > 0;
            }
            return(ret);
        }
Ejemplo n.º 21
0
        public ActionResult Chat(string id)
        {
            mutexObj.WaitOne();
            if (id == null)
            {
            }
            else
            {
                id = Regex.Replace(id, @"[^A-Za-z0-9]+", "");
            }

            ChatViewModel chat = new ChatViewModel()
            {
                messageHistory = new List <Message>()
            };

            ViewBag.userName    = User.Identity.GetUserName();
            ViewBag.currentRoom = id;
            using (UnitOfWork db = new UnitOfWork())
            {
                ConversationRoom room = db.conversationRoomRepository.GetByRoomName(id);
                ApplicationUser  user = db.userRepository.GetById(User.Identity.GetUserId());
                if (room != null && room.Users.Contains(user))
                {
                    chat.messageHistory   = db.messageRepository.GetByRoomName(id).ToList();
                    chat.currentRoomName  = id;
                    chat.room             = room;
                    chat.currentRoomTime  = 0.0f;
                    chat.currentRoomVideo = null;
                }
                else if (room != null && !room.Users.Contains(user))
                {
                    mutexObj.ReleaseMutex();
                    return(JoinRoom(room.RoomName));
                }
            }
            mutexObj.ReleaseMutex();
            return(View(chat));
        }
Ejemplo n.º 22
0
        public ActionResult DeleteChat(string roomName)
        {
            mutexObj.WaitOne();

            roomName = Regex.Replace(roomName, @"[^A-Za-z0-9]+", "");
            string changeRoom = null;

            using (UnitOfWork db = new UnitOfWork())
            {
                ConversationRoom room = db.conversationRoomRepository.GetById(roomName);
                if (room != null)
                {
                    List <Message> messageHistory = db.messageRepository.GetByRoomName(roomName).OrderBy(m => m.sendDate).ToList();

                    if (messageHistory.Count > 0)
                    {
                        db.messageRepository.DeleteRange(messageHistory);
                    }

                    db.conversationRoomRepository.Delete(room);
                }

                db.Save();

                List <ConversationRoom> rooms = db.conversationRoomRepository.GetByUserId(User.Identity.GetUserId()).ToList();
                if (rooms.Count > 0)
                {
                    changeRoom = rooms.First().RoomName;
                }

                ViewBag.userName = User.Identity.GetUserName();
            }
            mutexObj.ReleaseMutex();

            return(UpdateGrid(changeRoom));
        }
Ejemplo n.º 23
0
        public ActionResult CreateRoom(string roomName)
        {
            mutexObj.WaitOne();

            roomName = Regex.Replace(roomName, @"[^A-Za-z0-9]+", "");
            using (UnitOfWork db = new UnitOfWork())
            {
                ConversationRoom room = db.conversationRoomRepository.GetById(roomName);
                if (room == null)
                {
                    room = new ConversationRoom()
                    {
                        RoomName = roomName
                    };
                    ApplicationUser user = db.userRepository.GetById(User.Identity.GetUserId());
                    room.currentAdmin = user;

                    db.userRepository.Update(user);
                    room.Users.Add(user);

                    db.conversationRoomRepository.Create(room);

                    user.Rooms.Add(room);


                    db.Save();
                }
                else
                {
                    mutexObj.ReleaseMutex();
                    return(RedirectToRoute("Error", "CantFindRoom"));
                }
                mutexObj.ReleaseMutex();
                return(Redirect("/Chat/" + room.RoomName));
            }
        }
Ejemplo n.º 24
0
        /// <summary>
        /// Creates a new chat with multiple clients. Calling client username should be included in list!
        /// </summary>
        /// <param name="usernames"></param>
        /// <returns></returns>
        public async Task <Object> StartGroupChatWithMultipleClients(string[] usernames)
        {
            string groupName = Guid.NewGuid().ToString();

            List <ApplicationUser> users = new List <ApplicationUser>();
            List <ApplicationUserConversationRoom> aUCRs = new List <ApplicationUserConversationRoom>();

            //Add users to in-memory group
            foreach (string usernameToAdd in usernames)
            {
                foreach (var connectionId in _connections.GetConnections(usernameToAdd))
                {
                    await Groups.AddAsync(connectionId, groupName);
                }
            }

            // Retrieve room
            var group = context.Rooms.FirstOrDefault(e => e.RoomName == groupName);

            if (group != null)
            {
                return(Clients.Client(Context.ConnectionId).SendAsync("addInfoMessageFromGroup", new[] { groupName, groupName + "already exists" }));
            }

            //Notify group about each user
            foreach (string usernameToAdd in usernames)
            {
                await Clients.Group(groupName).SendAsync("userAddedToGroup", new[] { usernameToAdd, groupName });
            }

            // Retrieve users.
            foreach (string usernameToAdd in usernames)
            {
                users.Add(context.Users.Include(u => u.ApplicationUserConversationRooms).SingleOrDefault(u => u.UserName == usernameToAdd));
            }

            //Create the new  group
            var newGroup = new ConversationRoom()
            {
                RoomName = groupName
            };

            //An ApplicationUserConversationRoom must be created to link each user with each group
            foreach (ApplicationUser u in users)
            {
                aUCRs.Add(new ApplicationUserConversationRoom()
                {
                    ApplicationUserId = u.Id,
                    ApplicationUser   = u,
                    RoomName          = groupName,
                    ConversationRoom  = newGroup
                });
            }

            //Then each AUCR must be added to the the AUCR table, the specific group and the specific user
            foreach (ApplicationUserConversationRoom aUCR in aUCRs)
            {
                newGroup.ApplicationUserConversationRooms.Add(aUCR);

                context.ApplicationUserConversationRooms.Add(aUCR);

                aUCR.ApplicationUser.ApplicationUserConversationRooms.Add(aUCR); //???
            }

            await context.SaveChangesAsync();

            return(Clients.Group(groupName).SendAsync("addInfoMessageFromGroup", new[] { groupName, groupName + "created" }));
        }
Ejemplo n.º 25
0
        /// <summary>
        /// 添加好友
        /// 作者:郭明
        /// 日期:2017年6月23日
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public Dictionary <int, ResponseConversationRoomDTO> ApplyAddFriend(RequestConversactionApplyAddFriendDTO request)
        {
            Dictionary <int, ResponseConversationRoomDTO> result = new Dictionary <int, ResponseConversationRoomDTO>();

            using (var db = new DBEntities())
            {
                request.AddFriendItem.ForEach(account =>
                {
                    var channelInfo = (from friend in db.ConversationFriends.Where(a => a.FromUserID == request.FromUserID && a.ToUserID == account.ToUserID)
                                       join room in db.ConversationRooms on friend.ConversationRoomID equals room.ConversationRoomID
                                       where room.RoomType == EnumRoomType.C2C
                                       select room).FirstOrDefault();

                    if (channelInfo == null)
                    {
                        var ConversationRoomID = Guid.NewGuid().ToString("N");

                        channelInfo = new ConversationRoom()
                        {
                            ServiceID          = "",
                            Priority           = 5,
                            ChargingInterval   = 0,
                            ChargingSeq        = 0,
                            ChargingState      = EnumRoomChargingState.Stoped,
                            ChargingTime       = DateTime.Now,
                            Duration           = 0,
                            TotalTime          = 0,
                            Enable             = false,
                            ServiceType        = EnumDoctorServiceType.PicServiceType,
                            Secret             = "",
                            BeginTime          = DateTime.Now,
                            EndTime            = DateTime.Now,
                            ConversationRoomID = ConversationRoomID,
                            CreateTime         = DateTime.Now,
                            IsDeleted          = false,
                            RoomState          = EnumRoomState.NoTreatment,
                            RoomType           = EnumRoomType.C2C,
                            TriageID           = long.MaxValue
                        };

                        db.ConversationRooms.Add(channelInfo);

                        db.ConversationRoomUids.Add(new ConversationRoomUid()
                        {
                            ConversationRoomID = ConversationRoomID,
                            Identifier         = account.ToUserIdentifier,
                            UserType           = account.ToUserType,
                            IsDeleted          = false,
                            UserMemberID       = account.ToUserMemberID,
                            CreateUserID       = request.FromUserID,
                            UserID             = account.ToUserID,
                            UserCNName         = account.ToUserName,
                            UserENName         = account.ToUserName,
                            PhotoUrl           = "",
                        });

                        if (request.FromUserIdentifier != request.FromUserIdentifier)
                        {
                            db.ConversationRoomUids.Add(new ConversationRoomUid()
                            {
                                ConversationRoomID = ConversationRoomID,
                                Identifier         = request.FromUserIdentifier,
                                UserType           = request.FromUserType,
                                IsDeleted          = false,
                                UserMemberID       = request.FromUserMemberID,
                                CreateUserID       = request.FromUserID,
                                UserID             = request.FromUserID,
                                UserCNName         = account.ToUserName,
                                UserENName         = account.ToUserName,
                                PhotoUrl           = "",
                            });
                        }

                        db.ConversationFriends.Add(new ConversationFriend()
                        {
                            ConversationRoomID = ConversationRoomID,
                            FromUserID         = request.FromUserID,
                            FromUserIdentifier = request.FromUserIdentifier,
                            ToUserIdentifier   = account.ToUserIdentifier,
                            ToUserID           = account.ToUserID,
                            AddWording         = account.AddWording,
                            CreateTime         = DateTime.Now,
                            GroupName          = account.GroupName,
                            Remark             = account.Remark,
                            IsDeleted          = false,

                            FriendID = Guid.NewGuid().ToString("N")
                        });

                        db.ConversationFriends.Add(new ConversationFriend()
                        {
                            ConversationRoomID = ConversationRoomID,
                            FromUserID         = account.ToUserID,
                            FromUserIdentifier = account.ToUserIdentifier,
                            ToUserIdentifier   = request.FromUserIdentifier,
                            ToUserID           = request.FromUserID,
                            AddWording         = account.AddWording,
                            CreateTime         = DateTime.Now,
                            GroupName          = account.GroupName,
                            Remark             = account.Remark,
                            IsDeleted          = false,

                            FriendID = Guid.NewGuid().ToString("N")
                        });

                        db.SaveChanges();

                        result.Add(account.ToUserIdentifier, channelInfo.Map <ConversationRoom, ResponseConversationRoomDTO>());
                    }
                    else
                    {
                        result.Add(account.ToUserIdentifier, channelInfo.Map <ConversationRoom, ResponseConversationRoomDTO>());
                    }
                });
            }

            return(result);
        }
Ejemplo n.º 26
0
        public ActionResult CreateChatRoom(string roomName)
        {
            mutexObj.WaitOne();

            roomName = Regex.Replace(roomName, @"[^A-Za-z0-9]+", "");
            using (UnitOfWork db = new UnitOfWork())
            {
                if (db.conversationRoomRepository.GetById(roomName) != null)
                {
                    return(RedirectToRoute("Error", "AlreadyCreated"));
                }

                if (roomName != null)
                {
                    ApplicationUser  user = db.userRepository.GetById(User.Identity.GetUserId());
                    ConversationRoom room = null;

                    room = new ConversationRoom()
                    {
                        RoomName     = roomName,
                        currentAdmin = user
                    };

                    user.Rooms.Add(room);

                    db.userRepository.Update(user);

                    room.Users.Add(user);

                    db.conversationRoomRepository.Create(room);

                    db.Save();
                }
                else
                {
                    mutexObj.ReleaseMutex();
                    return(RedirectToRoute("Error", "CantFindRoom"));
                }

                ChatViewModel chat = new ChatViewModel()
                {
                    messageHistory = new List <Message>()
                };

                List <ConversationRoom> rooms = db.conversationRoomRepository.GetByUserId(User.Identity.GetUserId());
                chat.messageHistory  = db.messageRepository.GetByRoomName(roomName);
                chat.currentRoomName = roomName;
                foreach (ConversationRoom room in rooms)
                {
                    Message msg = db.messageRepository.GetByRoomName(room.RoomName).OrderByDescending(m => m.messageId).FirstOrDefault();

                    if (msg != null)
                    {
                    }
                    else
                    {
                        Message message = new Message()
                        {
                            Room    = room,
                            message = "",
                        };
                    }
                }

                ViewBag.userName = User.Identity.GetUserName();
                mutexObj.ReleaseMutex();

                return(PartialView("view", chat));
            }
        }
Ejemplo n.º 27
0
 public List <Message> GetByRoom(ConversationRoom room)
 {
     return(db.Messages.Where(m => m.Room.RoomName == room.RoomName).ToList());
 }
Ejemplo n.º 28
0
 public void Update(ConversationRoom room)
 {
     db.Entry(room).State = EntityState.Modified;
 }