Пример #1
0
        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();
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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());
        }
Пример #5
0
        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");
        }
Пример #7
0
        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");
        }
Пример #8
0
        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);
                    }
                }
            }
        }
Пример #9
0
        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);
                    }
                }
            }
        }
Пример #10
0
        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);
            }
        }
Пример #11
0
        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);
            }
        }
Пример #12
0
 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);
             }
         }
     }
 }
Пример #13
0
 public static void Initialize()
 {
     Database.SetInitializer(new MigrateDatabaseToLatestVersion <RouteExtremeDbContext, Configuration>());
     RouteExtremeDbContext.Create().Database.Initialize(true);
     Seed(new RouteExtremeDbContext());
 }