📄 dialogobserver.cs
字号:
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 + -