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 void ProcessRequest(HttpContext context) { if (!importsSatisfied) { lock (Global.CompositionLock) { chatRoomStorage = Global.Container.Resolve <IChatRoomStorage>(); chatSettings = Global.Container.Resolve <IChatSettings>(); } importsSatisfied = true; } var request = context.Request; var files = request.Files; if (files.Count == 0) { ReturnResponse(context, "Please select a file!"); return; } var fileName = Path.GetFileName(files[0].FileName); string token = request.QueryString["token"]; string userId = chatRoomStorage.GetUserIdByToken(token); if (!chatSettings.EnableFileTransfer) { return; } string chatRoomIdString = request.QueryString["chatRoomId"]; string toUserId = request.QueryString["toUserId"]; if (String.IsNullOrWhiteSpace(chatRoomIdString)) { return; } if (!chatRoomStorage.IsUserInRoom(chatRoomIdString, userId)) { return; } string[] allowedExtensions = Settings.Default.SendFileAllowedExtensions.Split(','); bool fileIsAllowed = false; foreach (string extension in allowedExtensions) { if (fileName.ToLower().EndsWith("." + extension.Trim().ToLower())) { fileIsAllowed = true; break; } } if (!fileIsAllowed) { ReturnResponse(context, "The file type is not allowed!"); return; } string userFilesPath = "UserFiles/" + userId; string userFilesDir = context.Server.MapPath(userFilesPath); if (!Directory.Exists(userFilesDir)) { Directory.CreateDirectory(userFilesDir); } string filename = fileName .Replace('\\', '_').Replace('/', '_') .Replace(' ', '_').Replace('\t', '_') .Replace('-', '_').Replace('<', '_') .Replace('>', '_'); string fileUrl = VirtualPathUtility.ToAbsolute(String.Format("~/{0}", Path.Combine(userFilesPath, filename))); filename = userFilesDir + @"\" + filename; using (Stream file = File.OpenWrite(filename)) { CopyStream(files[0].InputStream, file); } var imageExtensions = new[] { "png", "gif", "bmp", "jpg" }; bool fileIsImage = false; foreach (string extension in imageExtensions) { if (filename.ToLower().EndsWith("." + extension.ToLower())) { fileIsImage = true; break; } } chatRoomStorage.AddMessage(chatRoomIdString, new Message { Content = fileUrl, FromUserId = userId, ToUserId = toUserId, MessageType = fileIsImage ? MessageTypeEnum.SendImageFile : MessageTypeEnum.SendFile, Timestamp = Miscellaneous.GetTimestamp() }); ReturnResponse(context, String.Empty); }
public void ProcessRequest(HttpContext context) { if (!importsSatisfied) { lock (Global.CompositionLock) { chatRoomStorage = Global.Container.Resolve<IChatRoomStorage>(); chatSettings = Global.Container.Resolve<IChatSettings>(); } importsSatisfied = true; } var request = context.Request; var files = request.Files; if (files.Count == 0) { ReturnResponse(context, "Please select a file!"); return; } var fileName = Path.GetFileName(files[0].FileName); string token = request.QueryString["token"]; string userId = chatRoomStorage.GetUserIdByToken(token); if (!chatSettings.EnableFileTransfer) return; string chatRoomIdString = request.QueryString["chatRoomId"]; string toUserId = request.QueryString["toUserId"]; if (String.IsNullOrWhiteSpace(chatRoomIdString)) { return; } if (!chatRoomStorage.IsUserInRoom(chatRoomIdString, userId)) { return; } string[] allowedExtensions = Settings.Default.SendFileAllowedExtensions.Split(','); bool fileIsAllowed = false; foreach (string extension in allowedExtensions) { if (fileName.ToLower().EndsWith("." + extension.Trim().ToLower())) { fileIsAllowed = true; break; } } if (!fileIsAllowed) { ReturnResponse(context, "The file type is not allowed!"); return; } string userFilesPath = "UserFiles/" + userId; string userFilesDir = context.Server.MapPath(userFilesPath); if (!Directory.Exists(userFilesDir)) Directory.CreateDirectory(userFilesDir); string filename = fileName .Replace('\\', '_').Replace('/', '_') .Replace(' ', '_').Replace('\t', '_') .Replace('-', '_').Replace('<', '_') .Replace('>', '_'); string fileUrl = VirtualPathUtility.ToAbsolute(String.Format("~/{0}", Path.Combine(userFilesPath, filename))); filename = userFilesDir + @"\" + filename; using (Stream file = File.OpenWrite(filename)) { CopyStream(files[0].InputStream, file); } var imageExtensions = new[] { "png", "gif", "bmp", "jpg" }; bool fileIsImage = false; foreach (string extension in imageExtensions) { if (filename.ToLower().EndsWith("." + extension.ToLower())) { fileIsImage = true; break; } } chatRoomStorage.AddMessage(chatRoomIdString, new Message { Content = fileUrl, FromUserId = userId, ToUserId = toUserId, MessageType = fileIsImage ? MessageTypeEnum.SendImageFile : MessageTypeEnum.SendFile, Timestamp = Miscellaneous.GetTimestamp() }); ReturnResponse(context, String.Empty); }