private void server_OnStatusChange(object sender, TFTPStopEventArgs e) { TFTPServer server = (TFTPServer)sender; if (server.Active) { Log(EventLogEntryType.Information, string.Format("{0} transfers in progress", server.ActiveTransfers)); } else { if (e.Reason != null) { Log(EventLogEntryType.Error, string.Format("Stopped, reason: {0}", e.Reason)); } CleanupAndRetry(); } }
private void CleanupAndRetry() { lock (m_Lock) { if (!m_Disposed) { // stop server if (m_Server != null) { m_Server.OnStatusChange -= server_OnStatusChange; m_Server.OnTrace -= server_OnTrace; m_Server.Dispose(); m_Server = null; } // initiate retry timer m_RetryTimer.Change(RetryTime, Timeout.Infinite); } } }
private void Resurrect() { lock (m_Lock) { if (!m_Disposed) { try { m_Server = new TFTPServer(); m_Server.Name = m_Config.Name; m_Server.EndPoint = m_Config.EndPoint; m_Server.SinglePort = m_Config.SinglePort; m_Server.Ttl = (short)m_Config.Ttl; m_Server.DontFragment = m_Config.DontFragment; m_Server.RootPath = m_Config.RootPath; m_Server.AutoCreateDirectories = m_Config.AutoCreateDirectories; m_Server.AllowRead = m_Config.AllowRead; m_Server.AllowWrite = m_Config.AllowWrite; m_Server.ResponseTimeout = m_Config.Timeout; m_Server.Retries = m_Config.Retries; m_Server.ConvertPathSeparator = m_Config.ConvertPathSeparator; m_Server.WindowSize = m_Config.WindowSize; foreach (var alt in m_Config.Alternatives) { TFTPServer.ConfigurationAlternative tftpAlt = alt.IsRegularExpression ? TFTPServer.ConfigurationAlternative.CreateRegex(alt.Filter) : TFTPServer.ConfigurationAlternative.CreateWildcard(alt.Filter); tftpAlt.WindowSize = alt.WindowSize; m_Server.ConfigurationAlternatives.Add(tftpAlt); } m_Server.OnStatusChange += server_OnStatusChange; m_Server.OnTrace += server_OnTrace; m_Server.Start(); } catch (Exception) { CleanupAndRetry(); } } } }
protected void Dispose(bool disposing) { lock (m_Lock) { if (!m_Disposed) { m_Disposed = true; m_RetryTimer.Change(Timeout.Infinite, Timeout.Infinite); m_RetryTimer.Dispose(); if (m_Server != null) { m_Server.OnStatusChange -= server_OnStatusChange; m_Server.Dispose(); m_Server.OnTrace -= server_OnTrace; m_Server = null; } } } }