public override Task OnConnected() { using (var db = new RouteExtremeDbContext()) { var user = db.Users .Include(u => u.ChatRooms) .SingleOrDefault(u => u.UserName == Context.User.Identity.Name); foreach (var item in user.ChatRooms) { Groups.Add(Context.ConnectionId, item.Name); } var rooms = user.ChatRooms .Select(x => new { ConnectionId = x.ConnectionId, Name = x.Name }) .ToList(); var roomsAsJson = JsonConvert.SerializeObject(rooms); Clients.Caller.onConnected(roomsAsJson); } return base.OnConnected(); }
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 override Task OnConnected() { using (var db = new RouteExtremeDbContext()) { var user = db.Users .Include(u => u.ChatRooms) .SingleOrDefault(u => u.UserName == Context.User.Identity.Name); foreach (var item in user.ChatRooms) { Groups.Add(Context.ConnectionId, item.Name); } var rooms = user.ChatRooms .Select(x => new { ConnectionId = x.ConnectionId, Name = x.Name }) .ToList(); var roomsAsJson = JsonConvert.SerializeObject(rooms); Clients.Caller.onConnected(roomsAsJson); } return(base.OnConnected()); }
public void GetRoomMessages(string roomName) { using (var db = new RouteExtremeDbContext()) { var room = db.ChatRooms .Where(x => x.Name == roomName) .FirstOrDefault(); if (room != null) { var allMessages = room.Messages.Count; var itemsToSkip = allMessages - LastMessages; var messages = room.Messages .OrderBy(x => x.CreatedOn) .Skip(itemsToSkip) .Take(LastMessages) .Select(x => new { username = x.Author.UserName, createdOn = x.CreatedOn, message = x.Message }) .ToList(); for (int i = 0; i < messages.Count; i++) { var message = messages[i]; Clients.Group(roomName).SendPrivateMessage(room.ConnectionId, message.username, message.message); } } } }
public void ActionNotFoundShoudReturnPageNotFoundView() { var mockHttpContext = new Mock<HttpContextBase>(); var response = new Mock<HttpResponseBase>(); mockHttpContext.SetupGet(x => x.Response).Returns(response.Object); var db = new RouteExtremeDbContext(); var repoUsers = new Repository<User>(db); var repoChat = new Repository<ChatRoom>(db); var controller = new ErrorController(new UserService(repoUsers),new ChatRoomService(repoChat)) { ControllerContext = new ControllerContext() { HttpContext = mockHttpContext.Object } }; controller.WithCallTo(x => x.NotFound()) .ShouldRenderView("NotFound"); }
public void ActionNotFoundShoudReturnPageNotFoundView() { var mockHttpContext = new Mock <HttpContextBase>(); var response = new Mock <HttpResponseBase>(); mockHttpContext.SetupGet(x => x.Response).Returns(response.Object); var db = new RouteExtremeDbContext(); var repoUsers = new Repository <User>(db); var repoChat = new Repository <ChatRoom>(db); var controller = new ErrorController(new UserService(repoUsers), new ChatRoomService(repoChat)) { ControllerContext = new ControllerContext() { HttpContext = mockHttpContext.Object } }; controller.WithCallTo(x => x.NotFound()) .ShouldRenderView("NotFound"); }
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); } }
public void GetRoomMessages(string roomName) { using (var db = new RouteExtremeDbContext()) { var room = db.ChatRooms .Where(x => x.Name == roomName) .FirstOrDefault(); if (room != null) { var allMessages = room.Messages.Count; var itemsToSkip = allMessages - LastMessages; var messages = room.Messages .OrderBy(x => x.CreatedOn) .Skip(itemsToSkip) .Take(LastMessages) .Select(x => new { username= x.Author.UserName, createdOn = x.CreatedOn, message = x.Message }) .ToList(); for (int i = 0; i < messages.Count; i++) { var message = messages[i]; Clients.Group(roomName).SendPrivateMessage(room.ConnectionId,message.username, message.message); } } } }
public static void Initialize() { Database.SetInitializer(new MigrateDatabaseToLatestVersion <RouteExtremeDbContext, Configuration>()); RouteExtremeDbContext.Create().Database.Initialize(true); Seed(new RouteExtremeDbContext()); }