servicesubject.cs

来自「Oracle Service Manager」· CS 代码 · 共 87 行

CS
87
字号
using System;
using System.Collections;
using System.Diagnostics;
using System.ServiceProcess;

namespace kae.ServiceStatePublisher
{
	/// <summary>
	/// ServiceSubject is the publisher establishing the client contract or interface.  ServiceSubject sends a notification to its observers, or subscribers, when its state changes.
	/// </summary>
	/// <remarks>
	/// ServiceSubject is part of the Observer Pattern implementation for the ServiceStatePublisher library.  The .NET Framework supports this pattern through its built-in delegate and event mechanism.
	/// For more information on the state pattern see <i>Design Patterns: Elements of Reusable Code</i> by Gamma, et al.
	/// </remarks>
	public class ServiceSubject : ServiceContext
	{
		public event EventHandler ServerChanged;
		public event EventHandler ServiceChanged;
		public event EventHandler StateChanged;

		private string _serverName;

		public ServiceSubject() : base() { }

		public ServiceSubject( ServiceController service)
		{
			Controller = service;
		}

		public virtual string ServerName
		{
			get { return _serverName; }
			set
			{
				_serverName = value;
				OnServerChanged( EventArgs.Empty);
				if (Controller != null && _serverName != Controller.MachineName)
					Controller = null;
			}
		}

		public override ServiceController Controller
		{
			get { return _controller; }
			set
			{
				_controller = value;
				_state = QueryServiceState();
				OnServiceChanged( EventArgs.Empty);
			}
		}

		public override ServiceState State
		{
			get { return _state; }
			set
			{
				_state = value;
				OnStateChanged( EventArgs.Empty);
			}
		}

		public virtual void RefreshServices()
		{
			OnServerChanged( EventArgs.Empty);
		}

		protected virtual void OnServerChanged( System.EventArgs e)
		{
			if (ServerChanged != null)
				ServerChanged( this, e);
		}

		protected virtual void OnServiceChanged( System.EventArgs e)
		{
			if (ServiceChanged != null)
				ServiceChanged( this, e);
		}

		protected virtual void OnStateChanged( System.EventArgs e)
		{
			if (StateChanged != null)
				StateChanged( this, e);
		}
	}
}

⌨️ 快捷键说明

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