Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Jurgen Resource Load Manager Copyright (C) 2014 Adonis S. Deliannis
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
- */
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Speech.Synthesis;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- namespace Jurgen
- {
- class Program
- {
- #region Static Member Definitions
- private static PerformanceCounter _cpuCounter;
- private static PerformanceCounter _memCounter;
- private static PerformanceCounter _sysUptime;
- private static PerformanceCounter _totalDiskIdle;
- private static SpeechSynthesizer synth;
- private static string _warnXPercent = "Warning, Your CPU is over 80 percent! For the love of God, take it easy!";
- private static string _warnLessThanXMB = "Warning, You are running low on Memory! Please, close some programs!";
- private static string _errMsgShow = "I'm sorry, {0} is not a valid switch!";
- private static string _paramOverflow = "Parameter overflow!";
- private static string _notEnoughParams = "Not enough Parameters";
- private static string _help = "For help, type help";
- private static string _cmdHelp = "There's a help command ya know! help";
- private static string _errNoCmd = "{0} is not an available command";
- private static int _cpuThreshold = 80;
- private static int _cpuThresholdMax = 100;
- private static int _memThreshold = 4096;
- private static List<string> cpuMaxedOut;
- private static Random rand = new Random ( );
- #endregion
- #region Constant Values
- public const string AUTHOR = "Adonis S. Deliannis ( Blizzardo1 )";
- public const string APPNAME = "Jurgen Resource Load Manager";
- public const string VERSION = "1.0";
- public const string YEAR = "2014";
- public const string DESCRIPTION = "Jurgen Resource Load Manager displays a few resources to the user";
- public const string DEVELOPMENT_STAGE = "Beta";
- public const string INTRO = "Yurggen Resource Load Manager Version 1 point Oh Beta!";
- // Original width and height of the console
- public const int WIDTH = 80;
- public const int HEIGHT = 25;
- // ------------------------------------------
- public const string BOXNAME = "JurgenBox";
- public const string CONDITIONS = @"As the copyright says, this Software is absolutely Free, and thanks to @Barnacules for uploading the original project
- to github, and making a youtube video about it. Therefore, I have no conditions about this software. Thanks again. :), Adonis S. Deliannis ( Blizzardo1 )";
- public const string COPYRIGHT = @" {0}
- Copyright (C) {1} {2}
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.";
- #endregion
- /// <summary>
- /// Main Brain of the Vein well... of this entire program, A.K.A. The Entry Point
- /// </summary>
- /// <remarks><see cref="System.String[]"/> args have been removed as this program does not require Arguments</remarks>
- static void Main ( )
- {
- // Declare a new instance of synth
- synth = new SpeechSynthesizer ( );
- cpuMaxedOut = new List<string> ( );
- Console.SetWindowSize ( WIDTH + 42, HEIGHT + 32 );
- // Print Program and Copyright Info
- Console.WriteLine ( "{0} {1} - {2}", APPNAME, VERSION, DEVELOPMENT_STAGE );
- Console.WriteLine ( "Made by {0} under the GPLv3", AUTHOR );
- // Have Jurgen speak the Introduction
- JSpeak ( INTRO );
- // Initialise the Performance Counters
- _cpuCounter = new PerformanceCounter ( "Processor Information", "% Processor Time", "_Total" );
- _memCounter = new PerformanceCounter ( "Memory", "Available MBytes" );
- _sysUptime = new PerformanceCounter ( "System", "System Up Time" );
- _totalDiskIdle = new PerformanceCounter ( "PhysicalDisk", "% Idle Time", "_Total" );
- // Add our 5 Messages
- cpuMaxedOut.Add ( "WARNING! YOU ARE NOW AT CRITICAL MASS! PRESS THAT FUCKING BUTTON!" );
- cpuMaxedOut.Add ( "WARNING! STOP CHASING DEM SQUIRRELS!" );
- cpuMaxedOut.Add ( "WARNING! I'M MELTING! I'M MELTING!" );
- cpuMaxedOut.Add ( "WARNING! YOU ARE 1 PERCENT EVIL, 99 PERCENT HOT GAS!" );
- cpuMaxedOut.Add ( "RED ALERT! RED ALERT! RED ALERT! RED ALERT! RED ALERT! RED ALERT! I FARTED OUT A HOT GAS" );
- // Hide the Console Cursor so it doesn't flicker
- Console.CursorVisible = false;
- // Display the contents to the screen
- RenderScreen ( );
- }
- private static void RenderScreen ( )
- {
- // Run forever until someone breaks the system
- while(true)
- {
- // Try looping, if something happens, display a message to the user.
- try
- {
- do
- {
- while ( !Console.KeyAvailable )
- {
- // Set up all of our variables to display to the user
- float cpuLoad = _cpuCounter.NextValue ( );
- float memLoad = _memCounter.NextValue ( );
- float sysTime = _sysUptime.NextValue ( );
- // Neatly display the Up Time to the user ;)
- string formatted = TimeSpanToFriendly ( TimeSpan.FromSeconds ( sysTime ) );
- //////////////////////////////////////////////////////////////////////////
- /* Display the current info we have initialised here */
- Console.WriteLine ( "CPU Load: {0:0.00}%", cpuLoad );
- Console.WriteLine ( "Available RAM: {0}MB - {1:0.00}GB", memLoad, memLoad / 1024 );
- Console.WriteLine ( "Total Disk Idle: {0:0} %", _totalDiskIdle.NextValue ( ) );
- // Add some of your own!
- Console.WriteLine ( "System UpTime: {0}", formatted );
- //////////////////////////////////////////////////////////////////////////
- // If we are getting higher than our threshold, spurt out a message
- if ( cpuLoad > _cpuThreshold )
- {
- // If we are getting higher than our max threshold, spurt out a Critical Error!
- if ( cpuLoad == _cpuThresholdMax )
- JSpeak ( cpuMaxedOut[ rand.Next ( 0, cpuMaxedOut.Count ) ] );
- else
- JSpeak ( _warnXPercent );
- }
- // If we are getting lower than our threshold, spurt out a message
- if ( memLoad < _memThreshold )
- {
- JSpeak ( _warnLessThanXMB );
- }
- // Wait then clear
- Thread.Sleep ( 1000 );
- Console.Clear ( );
- }
- // Do the above while we haven't pressed the Escape Key
- } while ( Console.ReadKey ( true ).Key != ConsoleKey.Escape );
- // Because we dropped to shell, we need to provide the cursor again
- Console.CursorVisible = true;
- while ( true )
- {
- // JurgenBox> CommandPrompt
- Console.Write ( "{0}> ", BOXNAME );
- string[] msg = Console.ReadLine ( ).Split(' ');
- // Our list of commands
- if ( msg[ 0 ].ToLower ( ) == "show" )
- {
- // Check to see if we have an equal length of 2
- // JurgenBox> show c
- // JurgenBox> show w
- if ( msg.Length > 2 )
- Error ( "{0} {1}", _paramOverflow, _help );
- else if ( msg.Length < 2 )
- Error ( "Must provide c or w as a parameter" );
- else
- {
- if ( msg[ 1 ].ToLower ( ) == "c" )
- {
- Console.WriteLine ( CONDITIONS );
- }
- else if ( msg[ 1 ].ToLower ( ) == "w" )
- {
- Console.WriteLine ( COPYRIGHT, DESCRIPTION, YEAR, AUTHOR );
- }
- else
- {
- Error ( _errMsgShow, msg[ 1 ] );
- }
- }
- }
- // JurgenBox> speak message goes here
- else if ( msg[ 0 ].ToLower() == "speak" )
- {
- int index = 1;
- string _msg = string.Join ( " ", msg, index, msg.Length - index );
- JSpeak ( _msg );
- }
- // JurgenBox> help
- else if ( msg[ 0 ].ToLower ( ) == "help" )
- {
- Console.WriteLine ( "exit | quit - Will exit the shell but continue to run the program" );
- Console.WriteLine ( "help - Displays this help file" );
- Console.WriteLine ( "show <c|w> - shows the copyright information" );
- Console.WriteLine ( " c - Show Terms and Conditions" );
- Console.WriteLine ( " w - Show Copyright" );
- Console.WriteLine ( "speak <msg> - Jurgen Speaks what you write, so BE CAREFUL WHAT YOU SAY!");
- }
- // JurgenBox> exit
- // JurgenBox> quit
- else if ( msg[ 0 ].ToLower ( ) == "quit" || msg[ 0 ].ToLower ( ) == "exit" )
- {
- // Because we're breaking from shell, hide the Cursor again.
- Console.CursorVisible = false;
- break;
- }
- // What to do if you don't put anything
- else if ( string.IsNullOrEmpty ( msg[ 0 ] ) )
- {
- Warning ( _cmdHelp );
- }
- // What to do when you don't type in a registered command
- else
- {
- Error ( _errNoCmd, msg[0] );
- }
- }
- }
- // OH NOEZ! WE GOTZ US A LITTLE EWWOR! FIX IT! FIX IT!
- catch ( Exception ex )
- {
- Console.WriteLine ( ex.Message );
- }
- }
- }
- /// <summary>
- /// Display an Error message to the User
- /// </summary>
- /// <param name="Message">A Formatted <see cref="System.String"/></param>
- /// <param name="args">An <c>Optional</c> <see cref="System.Object"/> array for the <paramref name="Message"/> </param>
- public static void Error ( string Message, params object[] args )
- {
- ConsoleColor resetColour = Console.ForegroundColor;
- Console.ForegroundColor = ConsoleColor.Red;
- Console.Write ( "[Error] " );
- Console.WriteLine ( Message, args );
- Console.ForegroundColor = resetColour;
- }
- /// <summary>
- /// Display an Informative message to the User
- /// </summary>
- /// <param name="Message">A Formatted <see cref="System.String"/></param>
- /// <param name="args">An <c>Optional</c> <see cref="System.Object"/> array for the <paramref name="Message"/> </param>
- public static void Info ( string Message, params object[] args )
- {
- ConsoleColor resetColour = Console.ForegroundColor;
- Console.ForegroundColor = ConsoleColor.Cyan;
- Console.Write ( "[Info] " );
- Console.WriteLine ( Message, args );
- Console.ForegroundColor = resetColour;
- }
- /// <summary>
- /// Display a Warning message to the User
- /// </summary>
- /// <param name="Message">A Formatted <see cref="System.String"/></param>
- /// <param name="args">An <c>Optional</c> <see cref="System.Object"/> array for the <paramref name="Message"/> </param>
- public static void Warning ( string Message, params object[] args )
- {
- ConsoleColor resetColour = Console.ForegroundColor;
- Console.ForegroundColor = ConsoleColor.Yellow;
- Console.Write ( "[Warning] " );
- Console.WriteLine ( Message, args );
- Console.ForegroundColor = resetColour;
- }
- /// <summary>
- /// Return a human readable time
- /// </summary>
- /// <param name="ts">The Timespan to translate to a String</param>
- /// <returns>A well translated; Human-Readable string representing the Time</returns>
- public static string TimeSpanToFriendly ( TimeSpan ts )
- {
- return string.Format ( "{0} {1}, {2} {3}, {4} {5}, and {6} {7}",
- ts.Days,
- ts.Days > 1 | ts.Days < 1 ? "days" : "day",
- ts.Hours,
- ts.Hours > 1 | ts.Hours < 1 ? "hours" : "hour",
- ts.Minutes,
- ts.Minutes > 1 | ts.Minutes < 1 ? "minutes" : "minute",
- ts.Seconds,
- ts.Seconds > 1 | ts.Seconds < 1 ? "seconds" : "second"
- );
- }
- /// <summary>
- /// Have Jurgen speak the current message
- /// </summary>
- /// <param name="message">A <see cref="System.String"/> to have the Synth speak</param>
- public static void JSpeak ( string message )
- {
- JSpeak ( message, VoiceGender.Male );
- }
- /// <summary>
- /// Have Jurgen speak the current message with a different Voice
- /// </summary>
- /// <param name="message">A <see cref="System.String"/> to have the Synth speak</param>
- /// <param name="gender"> A <see cref="System.Speech.Synthesis.VoiceGender"/> to change the voice of the Synth</param>
- public static void JSpeak ( string message, VoiceGender gender )
- {
- JSpeak ( message, gender, 1 );
- }
- /// <summary>
- /// Have Jurgen speak the current message with a different Voice and rate
- /// </summary>
- /// <param name="message">A <see cref="System.String"/> to have the Synth speak</param>
- /// <param name="gender"> A <see cref="System.Speech.Synthesis.VoiceGender"/> to change the voice of the Synth</param>
- /// <param name="rate">An <see cref="System.Int32"/> to change the rate of how fast the Synth speaks</param>
- public static void JSpeak ( string message, VoiceGender gender, int rate )
- {
- synth.Rate = rate;
- synth.SelectVoiceByHints ( gender );
- synth.Speak ( message );
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement