static void Main(string[] args) { HostFactory.Run(x => x.Service<Server>(c => { x.UseLog4Net("PaperCut.SmtpHost.exe.config"); c.ConstructUsing(s => { var address = IPAddress.Parse(ConfigurationManager.AppSettings["IP"]); var port = int.Parse(ConfigurationManager.AppSettings["Port"]); var mailFolder = ConfigurationManager.AppSettings["MailFolder"]; MessageFileService fileService = new MessageFileService(mailFolder); return new Server(address, port, new Processor(fileService)); }); c.WhenStarted(s => s.Start()); c.WhenStopped(s => s.Stop()); })); }
/// <summary> /// Initializes a new instance of the <see cref="MainWindow" /> class. /// Initializes a new instance of the <see cref="MainWindow" /> class. Initializes a new instance of the /// <see cref="MainWindow" /> class. /// </summary> public MainWindow() { this.InitializeComponent(); this.messageFileService = new MessageFileService(); // Set up the notification icon this.notification = new NotifyIcon { Icon = new Icon(Application.GetResourceStream(new Uri("/Papercut;component/App.ico", UriKind.Relative)).Stream), Text = "Papercut", Visible = true }; this.notification.Click += delegate { this.Show(); this.WindowState = WindowState.Normal; this.Topmost = true; this.Focus(); this.Topmost = false; }; this.notification.BalloonTipClicked += (sender, args) => { this.Show(); this.WindowState = WindowState.Normal; this.messagesList.SelectedIndex = this.messagesList.Items.Count - 1; }; this.notification.ContextMenu = new ContextMenu( new[] { new MenuItem( "Show", (sender, args) => { this.Show(); this.WindowState = WindowState.Normal; this.Focus(); }) { DefaultItem = true }, new MenuItem("Exit", (sender, args) => this.ExitApplication()) }); // Set the version label this.versionLabel.Content = string.Format("Papercut v{0}", Assembly.GetExecutingAssembly().GetName().Version.ToString(3)); // Load existing messages this.LoadMessages(); this.messagesList.Items.SortDescriptions.Add(new SortDescription("ModifiedDate", ListSortDirection.Ascending)); // Begin listening for new messages Processor.MessageReceived += this.Processor_MessageReceived; // Load IP/Port settings IPAddress address; if (Settings.Default.IP == "Any") { address = IPAddress.Any; } else { address = IPAddress.Parse(Settings.Default.IP); } var port = Settings.Default.Port; // Start listening for connections this.server = new Server(address, port, new Processor(messageFileService)); try { this.server.Start(); } catch { MessageBox.Show( "Failed to bind to the address/port specified. The port may already be in use by another process. Please change the configuration in the Options dialog.", "Operation Failure"); } this.SetTabs(); this.UpdateSelectedMessage(); // Minimize if set to if (Settings.Default.StartMinimized) { this.Hide(); } }
public Processor(MessageFileService messageFileService) { _messageFileService = messageFileService; }