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 }; }
public static void Initialize(IChatUserProvider userProvider, IChatRoomStorage storage) { if (initialized) return; timer = InitializeTimer(userProvider, storage); initialized = true; }
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 static void Initialize(IChatUserProvider userProvider, IChatRoomStorage storage) { if (initialized) { return; } timer = InitializeTimer(userProvider, storage); initialized = true; }
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; } }
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); }
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); }
public ChatHub(IUserDirectoryServise userService) { users = new ChatUserProvider(userService); }