using Microsoft.AspNet.SignalR; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; namespace GroupsExample { [Authorize] public class ChatHub : Hub { public override Task OnConnected() { using (var db = new UserContext()) { // Retrieve user. var user = db.Users .Include(u => u.Rooms) .SingleOrDefault(u => u.UserName == Context.User.Identity.Name); // If user does not exist in database, must add. if (user == null) { user = new User() { UserName = Context.User.Identity.Name }; db.Users.Add(user); db.SaveChanges(); } else { // Add to each assigned group. foreach (var item in user.Rooms) { Groups.Add(Context.ConnectionId, item.RoomName); } } } return base.OnConnected(); } public void AddToRoom(string roomName) { using (var db = new UserContext()) { // Retrieve room. var room = db.Rooms.Find(roomName); if (room != null) { var user = new User() { UserName = Context.User.Identity.Name}; db.Users.Attach(user); room.Users.Add(user); db.SaveChanges(); Groups.Add(Context.ConnectionId, roomName); } } } public void RemoveFromRoom(string roomName) { using (var db = new UserContext()) { // Retrieve room. var room = db.Rooms.Find(roomName); if (room != null) { var user = new User() { UserName = Context.User.Identity.Name }; db.Users.Attach(user); room.Users.Remove(user); db.SaveChanges(); Groups.Remove(Context.ConnectionId, roomName); } } } } }