public void AddToRoom(string roomName) { using (var db = new RouteExtremeDbContext()) { var user = db.Users .Include(u => u.ChatRooms) .SingleOrDefault(u => u.UserName == Context.User.Identity.Name); var room = db.ChatRooms.FirstOrDefault(x => x.Name == roomName); if (room != null) { db.Users.Attach(user); room.Users.Add(user); } else { var newRoom = new ChatRoom { Name = roomName, ConnectionId = Context.ConnectionId }; newRoom.Users.Add(user); db.ChatRooms.Add(newRoom); } db.SaveChanges(); Groups.Add(Context.ConnectionId, roomName); } }
public void RemoveFromRoom(string roomName) { using (var db = new RouteExtremeDbContext()) { var room = db.ChatRooms.FirstOrDefault(x => x.Name == roomName); var user = db.Users .Include(u => u.ChatRooms) .SingleOrDefault(u => u.UserName == Context.User.Identity.Name); if (room != null) { db.Users.Attach(user); room.Users.Remove(user); db.SaveChanges(); if (room.Users.Count == 0) { Groups.Remove(Context.ConnectionId, roomName); } } } }
public void SendMessage(string message, string room) { using (var db = new RouteExtremeDbContext()) { var currentRoom = db.ChatRooms .Where(x => x.Name == room) .FirstOrDefault(); var user = currentRoom.Users .FirstOrDefault(x => x.UserName == this.Context.User.Identity.Name); var msg = new ChatMessage { AuthorId = user.Id, Message = message.Trim() }; currentRoom.Messages.Add(msg); db.SaveChanges(); Clients.Group(room).SendPrivateMessage(currentRoom.ConnectionId, Context.User.Identity.Name, message); } }