/// <summary> /// Entry method. /// </summary> /// <param name="args">arguments</param> public static void Main(string[] args) { COMReceiver.GetInstance().DeleteAllMessages(); EventSender.GetInstance().StartConnection(ServerInformation.LOCAL_HOST, ServerInformation.DEFAULT_PORT); /* Get input from COM */ COMReceiver.GetInstance().StartReceivingMessages(); /* Get WebPage URL from IE */ WebPageWatcher.GetInstance().StartMonitoring(); /* Monitors files */ //GeneralFileWatcher.GetInstance().Start(); FileMonitor.GetInstance().StartMonitoring(); /* Monitors Apps/Programs */ ProgramWatcher.GetInstance().StartMonitoring(); /* Monitors Folder/Directories */ FolderMonitor.GetInstance().StartMonitoring(); // Monitor emails EmailMonitor.GetInstance().StartMonitoring(); while (active) { // runs indefinitely until terminated by user via task manager } }
/// <summary> /// Event handler used to constantly retrieve messages from the MSMQ. /// </summary> /// <param name="sender">the sender object</param> /// <param name="e">the event arguments</param> private void queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e) { //recieve the messages.. Message m = queue.EndReceive(e.AsyncResult); m.Formatter = new XmlMessageFormatter(new string[] { "System.String,mscorlib" }); String receivedMessage = (string)m.Body; String[] splittedMessage = receivedMessage.Split('|'); if (splittedMessage[0].Equals("OUTLOOK")) { EmailMonitor.GetInstance().ProcessEmailEvent(receivedMessage); } else { MSOFFICEFileWatcher.GetInstance().FileViewed(receivedMessage); } //once get them - send to them to consuming client EventSender.GetInstance().ProcessMessage((string)m.Body); //recieve again StartReceivingMessages(); }
/// <summary> /// Start the polling process. /// </summary> public void Start() { if (visitedFolders.Count != 0) {//if it gets here - a folder is opened if (!visitedFolders.Peek().Equals(folder.LocationURL)) { visitedFolders.Push(folder.LocationURL); String message = ResourceIdentifiers.FOLDER_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + folder.LocationName + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + folder.LocationURL + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + FolderMonitor.FOLDER_VIEW + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + DateTime.Now; EventSender.GetInstance().ProcessMessage(message); } } else {//can get here once - at folder start up visitedFolders.Push(folder.LocationURL); String message = ResourceIdentifiers.FOLDER_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + folder.LocationName + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + folder.LocationURL + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + FolderMonitor.FOLDER_VIEW + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + DateTime.Now; EventSender.GetInstance().ProcessMessage(message); } }
/// <summary> /// Event handler to handle folder deletion. /// </summary> /// <param name="sender">triggered source</param> /// <param name="e">event arguments</param> private void watcher_Deleted(object sender, FileSystemEventArgs e) { String message = ResourceIdentifiers.FOLDER_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.Name + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.FullPath + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + FOLDER_DELETION + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + DateTime.Now; EventSender.GetInstance().ProcessMessage(message); }
/// <summary> /// Event handler to handle folder renamed. /// </summary> /// <param name="sender">triggered source</param> /// <param name="e">event arguments</param> private void watcher_Renamed(object sender, RenamedEventArgs e) { String message = ResourceIdentifiers.FOLDER_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.Name + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.FullPath + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + FOLDER_RENAME + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + //still need old name/path DateTime.Now; EventSender.GetInstance().ProcessMessage(message); }
/// <summary> /// Event handler to handle file changed. /// </summary> /// <param name="sender">triggered source</param> /// <param name="e">event arguments</param> private static void watcher_Changed(object sender, FileSystemEventArgs e) { String message = ResourceIdentifiers.FILE_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.Name + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.FullPath + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + FileMonitor.CHANGE_ACTION + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + DateTime.Now; EventSender.GetInstance().ProcessMessage(message); }
/// <summary> /// Event handler to handle folder created. /// </summary> /// <param name="sender">triggered source</param> /// <param name="e">event arguments</param> private void watcher_Created(object sender, FileSystemEventArgs e) { if (Directory.Exists(e.FullPath)) { String message = ResourceIdentifiers.FOLDER_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.Name + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.FullPath + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + FOLDER_CREATE + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + DateTime.Now; EventSender.GetInstance().ProcessMessage(message); } }
/// <summary> /// File view for MS FILES.. (WORD/EXCEL/POWERPOINT/VISIO/PROJECT) /// </summary> /// <param name="eventmessage"></param> public void FileViewed(String eventmessage) { String[] spliitedMessage = eventmessage.Split('|'); //String filename = spliitedMessage[1] String message = ResourceIdentifiers.FILE_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[1] + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + FileMonitor.VIEW_ACTION + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[2]; EventSender.GetInstance().ProcessMessage(message); }
/// <summary> /// Event handler to handle file renamed. /// </summary> /// <param name="sender">triggered source</param> /// <param name="e">event arguments</param> private static void watcher_Renamed(object sender, RenamedEventArgs e) { String message = ResourceIdentifiers.FILE_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.Name + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.FullPath + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + FileMonitor.RENAME_ACTION + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + DateTime.Now // also record old path/name + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.OldFullPath + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + e.OldName; EventSender.GetInstance().ProcessMessage(message); }
/// <summary> /// Helper callback method for use of the timer object in order to poll. /// </summary> /// <param name="temp">needed argument</param> private void WatchProgram(object temp) { Console.WriteLine("Start"); //Check new process opening foreach (Process P in Process.GetProcesses()) { if (P.MainWindowTitle.Length > 0) { try { if (!runningProgramList.Contains(P.ProcessName)) { try { runningProgramList.Add(P.ProcessName); procList.Add(P); } catch (Exception e) { }//swallow String message = ResourceIdentifiers.PROGRAM_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + P.ProcessName + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + P.MainWindowTitle + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + P.ToString() + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + P.MainModule.FileName + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + DateTime.Now; EventSender.GetInstance().ProcessMessage(message); } } catch (Exception e) { }//swallow } } }
/// <summary> /// Process the email event once got it. /// </summary> /// <param name="eventmessage">the message</param> public void ProcessEmailEvent(String eventmessage) { String[] spliitedMessage = eventmessage.Split('|'); if (spliitedMessage.Length == 3) { String message = "EMAIL4" + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[1] + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[2]; EventSender.GetInstance().ProcessMessage(message); } else { String message = "EMAIL4" + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[1] + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[2] + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[3] + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[4] + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + spliitedMessage[5]; EventSender.GetInstance().ProcessMessage(message); } }
/// <summary> /// A private helper method to be called and what it does is that it gets the URL of /// the Microsoft Internet Explorer address bar. /// </summary> /// <param name="temp">an object to be passed in</param> private void CheckIEURL(object temp) { foreach (SHDocVw.InternetExplorer ie in shellwindow) { fileName = Path.GetFileNameWithoutExtension(ie.FullName.ToLower()); /* Its Internet Explorer */ if (fileName.Equals(InternetExplorerIdentifier)) { if (!urls.Contains(ie.LocationURL)) { urls.Add(ie.LocationURL); String message = ResourceIdentifiers.WEBPAGE_IDENTIFIER + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + ie.LocationURL + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + ie.LocationName + Constants.SPACE + Constants.SPLITTER + Constants.SPACE + DateTime.Now; EventSender.GetInstance().ProcessMessage(message); } } } }