using Estsh.Client.Common.CostomTraceListener; using Estsh.Client.Common.FileUtil; using SAEA.FTP; using SAEA.FTP.Core; using System.Configuration; using System.Diagnostics; using System.Reflection; namespace Estsh.File.Server { public partial class FileServer : Form { private string sOldFile = string.Empty; private FTPServer server; private readonly int MAX_LINES = 1000; private int _port = 8899; private int _capacity = 1000; public FileServer() { InitializeComponent(); string ServerName = string.Empty; try { ServerName = ConfigurationManager.AppSettings["ServerName"]; } catch { } this.Text = string.Format("[{0}] ", ServerName) + this.Text + " Ver: " + Assembly.GetExecutingAssembly().GetName().Version.ToString(); notifyIcon1.Text = this.Text; try { _port = Convert.ToInt32(ConfigurationManager.AppSettings["Port"].Trim()); _capacity = Convert.ToInt32(ConfigurationManager.AppSettings["Capacity"].Trim()); } catch { } Trace.Listeners.Add(new RichTextBoxTraceListener(rtbState, MAX_LINES)); //Trace.Listeners.Add(new TextFileTraceListener()); //Trace.Listeners.Add(new SQLiteTraceListener(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log\\log.db"))); // 出发开始事件 cmd_Start_Click(null, null); } public void InitFtpServer() { ServerConfig _serverConfig = new ServerConfig(); _serverConfig.IP = "127.0.0.1"; _serverConfig.Port = (ushort)_port; FTPServerConfigManager.Save(); var ftpServer = new FTPServer(_serverConfig.IP, _serverConfig.Port, _serverConfig.BufferSize); //ftpServer.OnLog += _ftpServer_OnLog; ftpServer.Start(); //server = new FtpServer(); //server.Port = _port; //server.Capacity = _capacity; //server.HeartBeatPeriod = 120000; // 120s //FtpUser user = new FtpUser("rock"); //user.Password = "8623"; //user.AllowWrite = true; //user.HomeDir = AppDomain.CurrentDomain.BaseDirectory; //user.MaxConnectionCount = 1000; //user.MaxUploadFileLength = 1024 * 1024 * 20; // 20M //server.AddUser(user); //server.AnonymousUser.HomeDir = AppDomain.CurrentDomain.BaseDirectory; //server.AnonymousUser.AllowRead = false; //server.Start(); } private void cmd_Start_Click(object sender, EventArgs e) { cmd_Start.Enabled = false; cmd_Stop.Enabled = true; fileSystemWatcher1.Path = AppDomain.CurrentDomain.BaseDirectory; fileSystemWatcher1.IncludeSubdirectories = true; fileSystemWatcher1.EnableRaisingEvents = true; rtbState.AppendText("Initialize File Server.\n"); InitFtpServer(); rtbState.AppendText("Server Start...\n"); this.WindowState = FormWindowState.Minimized; } private void FileServer_FormClosing(object sender, FormClosingEventArgs e) { if (this.cmd_Stop.Enabled) { MessageBox.Show("Please Click [Stop] Button First !"); e.Cancel = true; cmd_Stop.Focus(); } else { if (server != null) { if (server.Running) { server.Stop(); server.Dispose(); server = null; } } } } private void cmd_Stop_Click(object sender, EventArgs e) { cmd_Start.Enabled = true; cmd_Stop.Enabled = false; fileSystemWatcher1.EnableRaisingEvents = false; if (server != null) { if (server.Running) { server.Stop(); server.Dispose(); server = null; } } } private void notifyIcon1_DoubleClick(object sender, EventArgs e) { this.Show(); this.ShowInTaskbar = true; this.WindowState = FormWindowState.Normal; this.BringToFront(); } private void FileServer_Deactivate(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { this.ShowInTaskbar = false; this.Hide(); } } private void HandleFileEvent(object sender, FileSystemEventArgs e) { string sTempPath = string.Empty; int iPos = 0; sTempPath = Path.GetDirectoryName(e.FullPath); // Skip Log Directory //if (sTempPath.Substring(sTempPath.Length - 3, 3) == "Log") // return; // 如果路径中包含 Log 字符并且在根目录,就跳过 if (sTempPath.Contains("Log") && sTempPath.Replace(AppDomain.CurrentDomain.BaseDirectory, string.Empty).Substring(0, 3) == "Log") return; if (sOldFile != e.FullPath) { if (!Directory.Exists(e.FullPath)) { sOldFile = e.FullPath; tim_Delay.Enabled = true; sTempPath = e.FullPath.Replace(fileSystemWatcher1.Path, ""); iPos = sTempPath.IndexOf("\\"); if (iPos > 0) { sTempPath = sTempPath.Substring(0, iPos); rtbState.AppendText(e.FullPath + " " + sTempPath + "\n"); // 延时 100 毫秒,防止读取不到文件的属性 Thread.Sleep(100); FileInfos fileInfos = new FileInfos(); FileManager.GetLocalFileInfo(fileSystemWatcher1.Path, sTempPath, ref fileInfos); fileSystemWatcher1.EnableRaisingEvents = false; FileManager.SaveFileListsToXml(fileSystemWatcher1.Path + "\\" + sTempPath + ".xml", fileInfos); fileSystemWatcher1.EnableRaisingEvents = true; } else { rtbState.AppendText(sTempPath + "\n"); } } } } private void tim_Delay_Tick(object sender, EventArgs e) { sOldFile = string.Empty; tim_Delay.Enabled = false; } } }