⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialogobserver.cs

📁 Oracle Service Manager
💻 CS
📖 第 1 页 / 共 2 页
字号:

		protected void OnStateChanged( object sender, System.EventArgs e)
		{
			ServiceSubject subject = (ServiceSubject) sender;
			Update( serviceStateChanged, subject);
		}

		private void Update( UpdateFunction function, ServiceSubject subject)
		{
			if (!Updating)
			{
				Updating = true;

				function( subject);

				Updating = false;
			}
		}

		private void ServerChanged( ServiceSubject subject)
		{
			ClearServiceItems();

			if (subject.ServerName != null)
			{
				AddServer( subject.ServerName);
				SetServerItem( subject.ServerName);
				SetStatusBarText( GetStringFromResources( "Connected"), subject.ServerName);
				AddOracleServicesToList( subject.ServerName);
			}
			else
			{
				if (serverCombo.Text.Length > 0)
					SetStatusBarText( GetStringFromResources( "NotConnected"), serverCombo.Text);
				else
					SetStatusBarText( GetStringFromResources( "Ready"));
			}
		}

		private void ServiceChanged( ServiceSubject subject)
		{
			if (subject.Controller != null)
			{
				SetServiceItem( subject.Controller.DisplayName);
				ServiceStateChanged( subject);
			}
			else
			{
				DisableActionButtons();
				SetDefaultServiceStateImage();
			}
		}

		private void ServiceStateChanged( ServiceSubject subject)
		{
			if (subject.State != ServiceStateUnknown.Instance)
			{
				SetActionButtonState( subject);
				SetServiceStateImage( subject.State);
				SetStatusBarText( subject.State.Status, subject.ServerName, subject.Controller.ServiceName);
			}
			else
			{
				DisableActionButtons();
				SetDefaultServiceStateImage();
			}
		}
		#endregion

		#region User action implementation
		private void ClosingDialog( object sender, CancelEventArgs e)
		{
			if (sender == this)
			{
				e.Cancel = true;
				this.Hide();
			}
		}

		private void ServerComboValidating( object sender, CancelEventArgs e)
		{
			string serverName = serverCombo.Text.ToUpper();
			ServiceSubject subject = App.Subject;

			if (subject.ServerName != serverName)
			{
				SetStatusBarText( GetStringFromResources( "Connecting"), serverName);
				if (IsServerValid( serverName))
				{
					subject.ServerName = serverName;
				}
				else
				{
					string msg = GetStringFromResources( "NoNetwork");
					MessageBox.Show( this, msg, App.Title, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
					subject.ServerName = null;
					e.Cancel = true;
				}
			}
		}

		private void ServiceComboChangedIndex( object sender, EventArgs e)
		{
			ServiceSubject subject = App.Subject;

			subject.Controller = new ServiceController( serviceCombo.Text, subject.ServerName);
		}

		private void RefreshClick( object sender, EventArgs e)
		{
			App.Subject.RefreshServices();
		}

		private void StartClick( object sender, EventArgs e)
		{
			ActionClick( startService, START);
		}

		private void PauseClick( object sender, EventArgs e)
		{
			ActionClick( pauseService, PAUSE);
		}

		private void StopClick( object sender, EventArgs e)
		{
			ActionClick( stopService, STOP);
		}

		private void ActionClick( ServiceAction action, string actionName)
		{
			Cursor.Current = Cursors.WaitCursor;
			if (VerifyUserAction( actionName))
			{
				this.Enabled = false;
				action();
				this.Enabled = true;
			}
			Cursor.Current = Cursors.Default;
		}
		#endregion

		#region Dialog support functions
		private void SetStatusBarText( string status)
		{
			statusBar.Panels[0].Text = status;
		}

		private void SetStatusBarText( string status, string machineName)
		{
			statusBar.Panels[0].Text = String.Format( @"{0} - \\{1}",
				status, machineName);
		}

		private void SetStatusBarText( string status, string machineName, string serviceName)
		{
			statusBar.Panels[0].Text = String.Format( @"{0} - \\{1} - {2}",
				status, machineName, serviceName);
		}

		private bool IsServerValid( string serverName)
		{
			bool isValid = true;

			try
			{
				if (SyntaxCheck.CheckMachineName( serverName))
				{
					IPHostEntry hostEntry = Dns.Resolve( serverName);
					ServiceController[] services = ServiceController.GetServices( serverName);
				}
				else
				{
					isValid = false;
				}
			}
			catch (Exception)
			{
				isValid = false;
			}

			return isValid;
		}

		private void AddServer( string serverName)
		{
			if (!serverCombo.Items.Contains( serverName))
				serverCombo.Items.Add( serverName);
		}

		private void SetServerItem( string serverName)
		{
			if (serverCombo.Items.Contains( serverName) && 
				serverCombo.Text != serverName)
			{
				int index = serverCombo.Items.IndexOf( serverName);
				serverCombo.SelectedIndex = index;
			}
		}

		private void ClearServiceItems()
		{
			serviceCombo.Items.Clear();
		}

		private void AddOracleServicesToList( string serverName)
		{
			float width = serviceCombo.Width;
			Graphics g = Graphics.FromHwnd( this.Handle);

			ServiceController[] services = ServiceController.GetServices( serverName);
			foreach (ServiceController service in services)
			{
				// HACK: Modify to better allow localized application + monitor different databases
				if (service.DisplayName.StartsWith( "Oracle"))
				{
					serviceCombo.Items.Add( service.DisplayName);
					SizeF size = g.MeasureString( service.DisplayName, serviceCombo.Font);
					if (width < size.Width)
						width = size.Width;
				}
			}

			serviceCombo.DropDownWidth = Convert.ToInt32( width) + 7;
		}

		private void SetServiceItem( string serviceName)
		{
			int index = serviceCombo.FindStringExact( serviceName);
			serviceCombo.SelectedIndex = index;
		}

		private void DisableActionButtons()
		{
			SetActionItemState( START, startServiceButton, startServiceLabel, false);
			SetActionItemState( PAUSE, pauseServiceButton, pauseServiceLabel, false);
			SetActionItemState( STOP, stopServiceButton, stopServiceLabel, false);
		}

		private void SetActionButtonState( ServiceSubject subject)
		{
			if (subject != null)
			{
				SetActionItemState( START, startServiceButton, startServiceLabel, subject.CanStart);
				SetActionItemState( PAUSE, pauseServiceButton, pauseServiceLabel, subject.CanPause);
				SetActionItemState( STOP, stopServiceButton, stopServiceLabel, subject.CanStop);
			}
			else
				DisableActionButtons();
		}

		private void SetActionItemState( string action, Button button, Label label, bool isEnabled)
		{
			label.Enabled = isEnabled;
			button.Enabled = isEnabled;
			button.Image = Image.FromStream( GetActionImage( action, isEnabled));
		}

		private void SetDefaultServiceStateImage()
		{
			SetServiceStateImage( ServiceStateUnknown.Instance);
		}

		private void SetServiceStateImage( ServiceState state)
		{
			statePicture.Image = Image.FromStream( GetLargeStateImage( state));
			this.Icon = GetSmallStateImage( state);
		}

		private Stream GetActionImage( string action, bool isEnabled)
		{
			MemoryStream memStream = new MemoryStream();
			_resources.GetActionImage( action, isEnabled).Save( memStream);
			return memStream;
		}

		private Icon GetSmallStateImage( ServiceState state)
		{
			return _resources.GetSmallStateImage( state);
		}

		private Stream GetLargeStateImage( ServiceState state)
		{
			MemoryStream memStream = new MemoryStream();
			_resources.GetLargeStateImage( state).Save( memStream);
			return memStream;
		}

		private bool VerifyUserAction( string action)
		{
			string serviceName = App.Subject.Controller.DisplayName;
			string serverName = App.Subject.ServerName;

			return App.VerifyUserAction( action, serviceName, serverName);
		}

		private string GetStringFromResources( string name)
		{
			return _resources.GetString( typeof(DialogObserver), name);
		}

		private string GetAppString( string name)
		{
			return _resources.GetAppString( name);
		}
		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -