Exemplo n.º 1
0
        public AspNetDatingChatRoomProvider(IChatUserProvider chatUserProvider, ICacheProvider cacheProvider)
        {
            this.chatUserProvider = chatUserProvider;
            this.cacheProvider = cacheProvider;

            mainChatRoom = new Room
            {
                Id = "-1",
                MaxUsers = MaxUsers,
                Name = "Main Chat",
                Password = null,
                Topic = "Welcome to chat!",
                Visible = true
            };

            messengerChatRoom = new Room
            {
                Id = "-2",
                MaxUsers = Int32.MaxValue,
                Name = "Messenger",
                Password = null,
                Topic = "Welcome to chat!",
                Visible = false
            };
        }
Exemplo n.º 2
0
        public static void Initialize(IChatUserProvider userProvider, IChatRoomStorage storage)
        {
            if (initialized)
                return;

            timer = InitializeTimer(userProvider, storage);

            initialized = true;
        }
Exemplo n.º 3
0
        private static Timer InitializeTimer(IChatUserProvider userProvider, IChatRoomStorage storage)
        {
            var t = new Timer();

            t.AutoReset = true;
            t.Interval  = TimeSpan.FromMinutes(1).TotalMilliseconds;
            t.Elapsed  += (s, e) =>
            {
                if (timerLock)
                {
                    return;
                }

                try
                {
                    timerLock = true;
                    //TODO: make timeout configurable
                    var removedUsers = storage.RemoveInactiveUsers(TimeSpan.FromMinutes(1.0));

                    foreach (var userInRoom in removedUsers)
                    {
                        var userId = userInRoom.Key;
                        var roomId = userInRoom.Value;

                        var user = userProvider.GetUser(userId);

                        if (user != null)
                        {
                            storage.AddMessage(roomId, new Message
                            {
                                Content =
                                    string.Format("User {0} has left the chat. (timeout)",
                                                  user.DisplayName),
                                FromUserId  = userId,
                                MessageType = MessageTypeEnum.UserLeft,
                                Timestamp   = Miscellaneous.GetTimestamp()
                            });

                            if (storage.UnregisterUserBroadcasts(roomId, userId))
                            {
                                storage.AddMessage(roomId, new Message
                                {
                                    FromUserId  = userId,
                                    MessageType = MessageTypeEnum.StopVideoBroadcast,
                                    Timestamp   = Miscellaneous.GetTimestamp()
                                });
                            }
                        }
                    }
                }
                finally { timerLock = false; }
            };
            t.Start();
            return(t);
        }
Exemplo n.º 4
0
        public static void Initialize(IChatUserProvider userProvider, IChatRoomStorage storage)
        {
            if (initialized)
            {
                return;
            }

            timer = InitializeTimer(userProvider, storage);

            initialized = true;
        }
Exemplo n.º 5
0
        private static Timer InitializeTimer(IChatUserProvider userProvider, IChatRoomStorage storage)
        {
            var t = new Timer();
            t.AutoReset = true;
            t.Interval = TimeSpan.FromMinutes(1).TotalMilliseconds;
            t.Elapsed += (s, e) =>
                {
                    if (timerLock){return;}

                    try
                    {
                        timerLock = true;
                        //TODO: make timeout configurable
                        var removedUsers = storage.RemoveInactiveUsers(TimeSpan.FromMinutes(1.0));

                        foreach (var userInRoom in removedUsers)
                        {
                            var userId = userInRoom.Key;
                            var roomId = userInRoom.Value;

                            var user = userProvider.GetUser(userId);

                            if (user != null)
                            {
                                storage.AddMessage(roomId, new Message
                                {
                                    Content =
                                        string.Format("User {0} has left the chat. (timeout)",
                                        user.DisplayName),
                                    FromUserId = userId,
                                    MessageType = MessageTypeEnum.UserLeft,
                                    Timestamp = Miscellaneous.GetTimestamp()
                                });

                                if (storage.UnregisterUserBroadcasts(roomId, userId))
                                {
                                    storage.AddMessage(roomId, new Message
                                    {
                                        FromUserId = userId,
                                        MessageType = MessageTypeEnum.StopVideoBroadcast,
                                        Timestamp = Miscellaneous.GetTimestamp()
                                    });
                                }
                            }
                        }

                    }
                    finally { timerLock = false; }
                };
            t.Start();
            return t;
        }
 public MessengerCommand()
 {
     if (!importsSatisfied)
     {
         lock (Global.CompositionLock)
         {
             chatRoomStorage = Global.Container.Resolve<IChatRoomStorage>();
             chatUserProvider = Global.Container.Resolve<IChatUserProvider>();
             messengerProvider = Global.Container.Resolve<IMessengerPresenceProvider>();
         }
         importsSatisfied = true;
     }
 }
 public MessengerCommand()
 {
     if (!importsSatisfied)
     {
         lock (Global.CompositionLock)
         {
             chatRoomStorage   = Global.Container.Resolve <IChatRoomStorage>();
             chatUserProvider  = Global.Container.Resolve <IChatUserProvider>();
             messengerProvider = Global.Container.Resolve <IMessengerPresenceProvider>();
         }
         importsSatisfied = true;
     }
 }
Exemplo n.º 8
0
        public ChatEngine()
        {
            if (!importsSatisfied)
            {
                lock (Global.CompositionLock)
                {
                    chatRoomProvider = Global.Container.Resolve<IChatRoomProvider>();
                    chatRoomStorage = Global.Container.Resolve<IChatRoomStorage>();
                    chatUserProvider = Global.Container.Resolve<IChatUserProvider>();
                    chatSettingsProvider = Global.Container.Resolve<IChatSettings>();
                    if (Global.Container.IsRegistered<IMessengerPresenceProvider>())
                        messengerProvider = Global.Container.Resolve<IMessengerPresenceProvider>();
                }
                importsSatisfied = true;
            }

            CleanTimedOutUsers.Initialize(chatUserProvider, chatRoomStorage);
        }
Exemplo n.º 9
0
        public ChatEngine()
        {
            if (!importsSatisfied)
            {
                lock (Global.CompositionLock)
                {
                    chatRoomProvider     = Global.Container.Resolve <IChatRoomProvider>();
                    chatRoomStorage      = Global.Container.Resolve <IChatRoomStorage>();
                    chatUserProvider     = Global.Container.Resolve <IChatUserProvider>();
                    chatSettingsProvider = Global.Container.Resolve <IChatSettings>();
                    if (Global.Container.IsRegistered <IMessengerPresenceProvider>())
                    {
                        messengerProvider = Global.Container.Resolve <IMessengerPresenceProvider>();
                    }
                }
                importsSatisfied = true;
            }

            CleanTimedOutUsers.Initialize(chatUserProvider, chatRoomStorage);
        }
Exemplo n.º 10
0
 public ChatHub(IUserDirectoryServise userService)
 {
     users = new ChatUserProvider(userService);
 }