[COLOR=#0000FF]using[/color] System;
[COLOR=#0000FF]using[/color] System.Diagnostics;
[COLOR=#0000FF]namespace[/color] CustomLibraries.Micros
{
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<summary>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] Provides basic controls aand functions for the Micros database[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]</summary>[/color]
[COLOR=#0000FF]public[/color] [COLOR=#0000FF]class[/color] [COLOR=#2B91AF]ServerController[/color]
{
[COLOR=#0000FF]#region[/color] METHODS
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<summary>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] Safely reboots the back office PC[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]</summary>[/color]
[COLOR=#0000FF]public[/color] [COLOR=#0000FF]static[/color] [COLOR=#0000FF]void[/color] RebootPC()
{
[COLOR=#2B91AF]ServerController[/color].WaitForStatus([COLOR=#2B91AF]MicrosStatus[/color].IDLE, [COLOR=#0000FF]int[/color].MaxValue); [COLOR=#008000]//ServerController.SetMicrosState(MicrosStatus.IDLE);[/color]
[COLOR=#0000FF]if[/color] ([COLOR=#2B91AF]ServerController[/color].GetMicrosState() != [COLOR=#2B91AF]MicrosStatus[/color].IDLE)
[COLOR=#0000FF]return[/color];
[COLOR=#2B91AF]Process[/color].Start([COLOR=#A31515]"shutdown.exe"[/color], [COLOR=#A31515]"-r -t 0 -f"[/color]);
}
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<summary>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] Returns the current state of the Micros database[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]</summary>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<returns>[/color][COLOR=#008000]Micros database's current state[/color][COLOR=#808080]</returns>[/color]
[COLOR=#0000FF]public[/color] [COLOR=#0000FF]static[/color] [COLOR=#2B91AF]MicrosStatus[/color] GetMicrosState()
{
[COLOR=#0000FF]try[/color]
{
[COLOR=#2B91AF]Process[/color] p = [COLOR=#0000FF]new[/color] [COLOR=#2B91AF]Process[/color]();
p.StartInfo.FileName = [COLOR=#A31515]"clcontrol"[/color];
p.StartInfo.Arguments = [COLOR=#A31515]"/system status"[/color];
p.StartInfo.CreateNoWindow = [COLOR=#0000FF]true[/color];
p.StartInfo.UseShellExecute = [COLOR=#0000FF]false[/color];
p.StartInfo.RedirectStandardError = [COLOR=#0000FF]true[/color];
p.StartInfo.RedirectStandardOutput = [COLOR=#0000FF]true[/color];
p.Start();
p.WaitForExit();
[COLOR=#0000FF]int[/color] statusCode = p.ExitCode;
[COLOR=#0000FF]if[/color] (statusCode < 0 || statusCode > 5)
[COLOR=#0000FF]return[/color] [COLOR=#2B91AF]MicrosStatus[/color].UNKNOWN;
[COLOR=#0000FF]return[/color] ([COLOR=#2B91AF]MicrosStatus[/color])statusCode;
}
[COLOR=#0000FF]catch[/color] ([COLOR=#2B91AF]Exception[/color] ex)
{
[COLOR=#2B91AF]Log[/color].DebugException([COLOR=#0000FF]typeof[/color]([COLOR=#2B91AF]ServerController[/color]), ex);
[COLOR=#0000FF]return[/color] [COLOR=#2B91AF]MicrosStatus[/color].UNKNOWN;
}
}
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<summary>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] Attempts to set the micros database to the specified state[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]</summary>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<param name="[/color]state[COLOR=#808080]"></param>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<returns>[/color][COLOR=#008000]Micros database's status after attempt[/color][COLOR=#808080]</returns>[/color]
[COLOR=#0000FF]public[/color] [COLOR=#0000FF]static[/color] [COLOR=#2B91AF]MicrosStatus[/color] SetMicrosState([COLOR=#2B91AF]MicrosStatus[/color] state)
{
[COLOR=#0000FF]if[/color] ([COLOR=#2B91AF]ServerController[/color].GetMicrosState() == state)
[COLOR=#0000FF]return[/color] state;
[COLOR=#2B91AF]Process[/color] p = [COLOR=#0000FF]new[/color] [COLOR=#2B91AF]Process[/color]();
p.StartInfo.FileName = [COLOR=#A31515]"clcontrol"[/color];
p.StartInfo.CreateNoWindow = [COLOR=#0000FF]true[/color];
p.StartInfo.UseShellExecute = [COLOR=#0000FF]false[/color];
p.StartInfo.RedirectStandardError = [COLOR=#0000FF]true[/color];
p.StartInfo.RedirectStandardOutput = [COLOR=#0000FF]true[/color];
[COLOR=#0000FF]switch[/color] (state)
{
[COLOR=#0000FF]case[/color] [COLOR=#2B91AF]MicrosStatus[/color].BOH:
p.StartInfo.Arguments = [COLOR=#A31515]"/system boh"[/color];
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]case[/color] [COLOR=#2B91AF]MicrosStatus[/color].DB:
p.StartInfo.Arguments = [COLOR=#A31515]"/system db"[/color];
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]case[/color] [COLOR=#2B91AF]MicrosStatus[/color].FOH:
p.StartInfo.Arguments = [COLOR=#A31515]"/system foh"[/color];
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]case[/color] [COLOR=#2B91AF]MicrosStatus[/color].IDLE:
p.StartInfo.Arguments = [COLOR=#A31515]"/system idle"[/color];
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]default[/color]:
[COLOR=#0000FF]return[/color] [COLOR=#2B91AF]ServerController[/color].GetMicrosState();
}
p.Start();
p.WaitForExit();
[COLOR=#0000FF]return[/color] [COLOR=#2B91AF]ServerController[/color].GetMicrosState();
}
[COLOR=#0000FF]public[/color] [COLOR=#0000FF]static[/color] [COLOR=#0000FF]void[/color] WaitForStatus([COLOR=#2B91AF]MicrosStatus[/color] state, [COLOR=#0000FF]int[/color] timeout)
{
[COLOR=#2B91AF]DateTime[/color] startTime = [COLOR=#2B91AF]DateTime[/color].Now;
[COLOR=#0000FF]do[/color]
{
SetMicrosState(state);
[COLOR=#0000FF]if[/color] (GetMicrosState() != state)
[COLOR=#0000FF]if[/color] (([COLOR=#2B91AF]DateTime[/color].Now - startTime).TotalSeconds > timeout)
[COLOR=#0000FF]throw[/color] [COLOR=#0000FF]new[/color] [COLOR=#2B91AF]TimeoutException[/color]();
} [COLOR=#0000FF]while[/color] (GetMicrosState() != state);
[COLOR=#0000FF]if[/color] (GetMicrosState() != state)
[COLOR=#0000FF]throw[/color] [COLOR=#0000FF]new[/color] [COLOR=#2B91AF]Exception[/color]([COLOR=#A31515]"Could not set Micros database state"[/color]);
}
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<summary>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] Backs up the Micros database[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]</summary>[/color]
[COLOR=#0000FF]public[/color] [COLOR=#0000FF]static[/color] [COLOR=#0000FF]void[/color] DoBackup()
{
[COLOR=#2B91AF]Process[/color] p = [COLOR=#0000FF]new[/color] [COLOR=#2B91AF]Process[/color]();
p.StartInfo.FileName = [COLOR=#A31515]"dm.exe"[/color];
p.StartInfo.Arguments = [COLOR=#A31515]"-B"[/color];
p.StartInfo.UseShellExecute = [COLOR=#0000FF]false[/color];
p.StartInfo.WindowStyle = [COLOR=#2B91AF]ProcessWindowStyle[/color].Hidden;
p.StartInfo.CreateNoWindow = [COLOR=#0000FF]true[/color];
p.Start();
p.WaitForExit();
}
[COLOR=#0000FF]#endregion[/color]
}
[COLOR=#0000FF]#region[/color] ENUMS
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]<summary>[/color]
[COLOR=#808080]///[/color][COLOR=#008000] Enum containing the various possible Micros database states[/color]
[COLOR=#808080]///[/color][COLOR=#008000] [/color][COLOR=#808080]</summary>[/color]
[COLOR=#0000FF]public[/color] [COLOR=#0000FF]enum[/color] [COLOR=#2B91AF]MicrosStatus[/color]
{
FAULT = 0,
IDLE = 1,
DB = 2,
BOH = 3,
FOH = 4,
BUSY = 5,
UNKNOWN = 6
}
[COLOR=#0000FF]#endregion[/color]
}