Author: mpiulachs
Date: Wed Jun 25 08:23:59 2008
New Revision: 34079
URL:
http://svn.reactos.org/svn/reactos?rev=34079&view=rev
Log:
- miscellaneous small fixes
- add support for preventing all commands to be run on the channel by default. Now TechBot
only answers some of the commands in PM
- add back the error Command
Added:
trunk/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs
- copied, changed from r33939,
trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs
Removed:
trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs
trunk/irc/TechBot/TechBot.Library/ParametersParser.cs
Modified:
trunk/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs
trunk/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj
trunk/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs
trunk/irc/TechBot/TechBot.Library/Commands/Base/Command.cs
trunk/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs
trunk/irc/TechBot/TechBot.Library/TechBotService.cs
Modified: trunk/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Commands.Commo…
==============================================================================
--- trunk/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs [iso-8859-1] (original)
+++ trunk/irc/TechBot/TechBot.Commands.Common/Base/BugCommand.cs [iso-8859-1] Wed Jun 25
08:23:59 2008
@@ -6,11 +6,16 @@
{
public abstract class BugCommand : Command
{
- private string m_BugID = null;
+// private string m_BugID = null;
public BugCommand()
{
}
+
+ public override bool AnswerInPublic
+ {
+ get { return true; }
+ }
public string BugID
{
Copied: trunk/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs (from r33939,
trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs)
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Commands.Commo…
==============================================================================
--- trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs [iso-8859-1] (original)
+++ trunk/irc/TechBot/TechBot.Commands.Common/ErrorCommand.cs [iso-8859-1] Wed Jun 25
08:23:59 2008
@@ -2,7 +2,9 @@
using System.Xml;
using System.Collections;
-namespace TechBot.Library
+using TechBot.Library;
+
+namespace TechBot.Commands.Common
{
[Command("error", Help = "!error <value>")]
public class ErrorCommand : Command
@@ -68,27 +70,24 @@
return code.ToString();
}
- public override void Handle(MessageContext context)
- {
- if (Text.Equals(String.Empty))
+ public override void ExecuteCommand()
+ {
+ if (Parameters.Equals(String.Empty))
{
- TechBot.ServiceOutput.WriteLine(context,
- "Please provide an Error Code.");
+ Say("Please provide an Error Code.");
return;
}
- string errorText = originalErrorText;
+ string errorText = Parameters;
retry:
NumberParser np = new NumberParser();
long error = np.Parse(errorText);
- if (np.Error)
- {
- TechBot.ServiceOutput.WriteLine(context,
- String.Format("{0} is not a valid Error Code.",
- originalErrorText));
- return;
- }
+ if (np.Error)
+ {
+ Say("{0} is not a valid Error Code.", Parameters);
+ return;
+ }
ArrayList descriptions = new ArrayList();
@@ -159,27 +158,23 @@
goto retry;
}
- TechBot.ServiceOutput.WriteLine(context,
- String.Format("I don't know about Error Code {0}.",
- originalErrorText));
+ Say("I don't know about Error Code {0}.",
+ Parameters);
}
- else if (descriptions.Count == 1)
- {
- string description = (string)descriptions[0];
- TechBot.ServiceOutput.WriteLine(context,
- String.Format("{0} is {1}.",
- originalErrorText,
- description));
- }
- else
- {
- TechBot.ServiceOutput.WriteLine(context,
- String.Format("{0} could be:",
- originalErrorText));
-
- foreach(string description in descriptions)
- TechBot.ServiceOutput.WriteLine(context,
String.Format("\t{0}", description));
- }
+ else if (descriptions.Count == 1)
+ {
+ string description = (string)descriptions[0];
+ Say("{0} is {1}.",
+ Parameters,
+ description);
+ }
+ else
+ {
+ Say("{0} could be:", Parameters);
+
+ foreach (string description in descriptions)
+ Say("\t{0}", description);
+ }
}
}
}
Modified: trunk/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Commands.Commo…
==============================================================================
--- trunk/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj [iso-8859-1]
(original)
+++ trunk/irc/TechBot/TechBot.Commands.Common/TechBot.Commands.Common.csproj [iso-8859-1]
Wed Jun 25 08:23:59 2008
@@ -34,6 +34,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Base\BugCommand.cs" />
+ <Compile Include="ErrorCommand.cs" />
<Compile Include="HResultCommand.cs" />
<Compile Include="NtStatusCommand.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
Modified: trunk/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Commands.MSDN/…
==============================================================================
--- trunk/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs [iso-8859-1] (original)
+++ trunk/irc/TechBot/TechBot.Commands.MSDN/ApiCommand.cs [iso-8859-1] Wed Jun 25 08:23:59
2008
@@ -16,11 +16,10 @@
private bool IsVerbose = false;
private HtmlHelpSystem chm;
- private string name;
public ApiCommand()
{
- Run();
+ LoadCHM();
}
[CommandParameter("api", "The API name")]
@@ -36,7 +35,7 @@
Say(message);
}
- private void Run()
+ private void LoadCHM()
{
string CHMFilename = Path.Combine(Settings.Default.ChmPath,
Settings.Default.MainChm);
chm = new HtmlHelpSystem();
Modified: trunk/irc/TechBot/TechBot.Library/Commands/Base/Command.cs
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/Comman…
==============================================================================
--- trunk/irc/TechBot/TechBot.Library/Commands/Base/Command.cs [iso-8859-1] (original)
+++ trunk/irc/TechBot/TechBot.Library/Commands/Base/Command.cs [iso-8859-1] Wed Jun 25
08:23:59 2008
@@ -19,6 +19,11 @@
{
get { return m_Context; }
set { m_Context = value; }
+ }
+
+ public virtual bool AnswerInPublic
+ {
+ get { return false; }
}
public string Name
@@ -53,6 +58,25 @@
TechBot.ServiceOutput.WriteLine(Context, String.Format(format, args));
}
+ public void Run()
+ {
+ if (Context is ChannelMessageContext)
+ {
+ if (AnswerInPublic)
+ {
+ ExecuteCommand();
+ }
+ else
+ {
+ Say("Sorry, I only respond '{0}' in private , PM
me!", Name);
+ }
+ }
+ else
+ {
+ ExecuteCommand();
+ }
+ }
+
public abstract void ExecuteCommand();
public virtual void Initialize()
Modified: trunk/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/Comman…
==============================================================================
--- trunk/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs [iso-8859-1]
(original)
+++ trunk/irc/TechBot/TechBot.Library/Commands/Base/XmlLookupCommand.cs [iso-8859-1] Wed
Jun 25 08:23:59 2008
@@ -6,8 +6,6 @@
{
public abstract class XmlLookupCommand : XmlCommand
{
- protected string m_Text = null;
-
public virtual string Text
{
get { return Parameters; }
Removed: trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/Comman…
==============================================================================
--- trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs [iso-8859-1] (original)
+++ trunk/irc/TechBot/TechBot.Library/Commands/ErrorCommand.cs (removed)
@@ -1,185 +1,0 @@
-using System;
-using System.Xml;
-using System.Collections;
-
-namespace TechBot.Library
-{
- [Command("error", Help = "!error <value>")]
- public class ErrorCommand : Command
- {
- private NtStatusCommand ntStatus;
- private WinErrorCommand winerror;
- private HResultCommand hresult;
-
- public ErrorCommand()
- {
- this.ntStatus = new NtStatusCommand();
- this.winerror = new WinErrorCommand();
- this.hresult = new HResultCommand();
- }
-
- private static int GetSeverity(long error)
- {
- return (int)((error >> 30) & 0x3);
- }
-
- private static bool IsCustomer(long error)
- {
- return (error & 0x20000000) != 0;
- }
-
- private static bool IsReserved(long error)
- {
- return (error & 0x10000000) != 0;
- }
-
- private static int GetFacility(long error)
- {
- return (int)((error >> 16) & 0xFFF);
- }
-
- private static short GetCode(long error)
- {
- return (short)((error >> 0) & 0xFFFF);
- }
-
- private static string FormatSeverity(long error)
- {
- int severity = GetSeverity(error);
- switch (severity)
- {
- case 0: return "SUCCESS";
- case 1: return "INFORMATIONAL";
- case 2: return "WARNING";
- case 3: return "ERROR";
- }
- return null;
- }
-
- private static string FormatFacility(long error)
- {
- int facility = GetFacility(error);
- return facility.ToString();
- }
-
- private static string FormatCode(long error)
- {
- int code = GetCode(error);
- return code.ToString();
- }
-
- public override void Handle(MessageContext context)
- {
- if (Text.Equals(String.Empty))
- {
- TechBot.ServiceOutput.WriteLine(context,
- "Please provide an Error Code.");
- return;
- }
-
- string errorText = originalErrorText;
-
- retry:
- NumberParser np = new NumberParser();
- long error = np.Parse(errorText);
- if (np.Error)
- {
- TechBot.ServiceOutput.WriteLine(context,
- String.Format("{0} is not a valid Error Code.",
- originalErrorText));
- return;
- }
-
- ArrayList descriptions = new ArrayList();
-
- // Error is out of bounds
- if ((ulong)error > uint.MaxValue)
- {
- // Do nothing
- }
- // Error is outside of the range [0, 65535]: it cannot be a plain Win32 error code
- else if ((ulong)error > ushort.MaxValue)
- {
- // Customer bit is set: custom error code
- if (IsCustomer(error))
- {
- string description = String.Format("[custom, severity {0}, facility {1}, code
{2}]",
- FormatSeverity(error),
- FormatFacility(error),
- FormatCode(error));
- descriptions.Add(description);
- }
- // Reserved bit is set: HRESULT_FROM_NT(ntstatus)
- else if (IsReserved(error))
- {
- int status = (int)(error & 0xCFFFFFFF);
- string description = ntStatus.GetNtstatusDescription(status);
-
- if (description == null)
- description = status.ToString("X");
-
- description = String.Format("HRESULT_FROM_NT({0})", description);
- descriptions.Add(description);
- }
- // Win32 facility: HRESULT_FROM_WIN32(winerror)
- else if (GetFacility(error) == 7)
- {
- // Must be an error code
- if (GetSeverity(error) == 2)
- {
- short err = GetCode(error);
- string description = winerror.GetWinerrorDescription(err);
-
- if (description == null)
- description = err.ToString("D");
-
- description = String.Format("HRESULT_FROM_WIN32({0})", description);
- descriptions.Add(description);
- }
- }
- }
-
- string winerrorDescription = winerror.GetWinerrorDescription(error);
- string ntstatusDescription = ntStatus.GetNtstatusDescription(error);
- string hresultDescription = hresult.GetHresultDescription(error);
-
- if (winerrorDescription != null)
- descriptions.Add(winerrorDescription);
- if (ntstatusDescription != null)
- descriptions.Add(ntstatusDescription);
- if (hresultDescription != null)
- descriptions.Add(hresultDescription);
-
- if (descriptions.Count == 0)
- {
- // Last chance heuristics: attempt to parse a 8-digit decimal as hexadecimal
- if (errorText.Length == 8)
- {
- errorText = "0x" + errorText;
- goto retry;
- }
-
- TechBot.ServiceOutput.WriteLine(context,
- String.Format("I don't know about Error Code {0}.",
- originalErrorText));
- }
- else if (descriptions.Count == 1)
- {
- string description = (string)descriptions[0];
- TechBot.ServiceOutput.WriteLine(context,
- String.Format("{0} is {1}.",
- originalErrorText,
- description));
- }
- else
- {
- TechBot.ServiceOutput.WriteLine(context,
- String.Format("{0} could be:",
- originalErrorText));
-
- foreach(string description in descriptions)
- TechBot.ServiceOutput.WriteLine(context,
String.Format("\t{0}", description));
- }
- }
- }
-}
Removed: trunk/irc/TechBot/TechBot.Library/ParametersParser.cs
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/Parame…
==============================================================================
--- trunk/irc/TechBot/TechBot.Library/ParametersParser.cs [iso-8859-1] (original)
+++ trunk/irc/TechBot/TechBot.Library/ParametersParser.cs (removed)
@@ -1,537 +1,0 @@
-using System;
-using System.Text.RegularExpressions;
-
-//Code taken from :
http://www.codeproject.com/KB/recipes/commandlineparser.aspx
-
-namespace TechBot.Library
-{
- /// <summary>Implementation of a command-line parsing class. Is capable of
- /// having switches registered with it directly or can examine a registered
- /// class for any properties with the appropriate attributes appended to
- /// them.</summary>
- public class ParametersParser
- {
- /// <summary>A simple internal class for passing back to the caller
- /// some information about the switch. The internals/implementation
- /// of this class has privillaged access to the contents of the
- /// SwitchRecord class.</summary>
- public class SwitchInfo
- {
- #region Private Variables
- private object m_Switch = null;
- #endregion
-
- #region Public Properties
- public string Name { get { return (m_Switch as SwitchRecord).Name; } }
- public string Description { get { return (m_Switch as SwitchRecord).Description; } }
- public string[] Aliases { get { return (m_Switch as SwitchRecord).Aliases; } }
- public System.Type Type { get { return (m_Switch as SwitchRecord).Type; } }
- public object Value { get { return (m_Switch as SwitchRecord).Value; } }
- public object InternalValue { get { return (m_Switch as SwitchRecord).InternalValue; }
}
- public bool IsEnum { get { return (m_Switch as SwitchRecord).Type.IsEnum; } }
- public string[] Enumerations { get { return (m_Switch as SwitchRecord).Enumerations; }
}
- #endregion
-
- /// <summary>
- /// Constructor for the SwitchInfo class. Note, in order to hide to the outside
world
- /// information not necessary to know, the constructor takes a System.Object (aka
- /// object) as it's registering type. If the type isn't of the correct type,
an exception
- /// is thrown.
- /// </summary>
- /// <param name="rec">The SwitchRecord for which this class store
information.</param>
- /// <exception cref="ArgumentException">Thrown if the rec parameter is
not of
- /// the type SwitchRecord.</exception>
- public SwitchInfo( object rec )
- {
- if ( rec is SwitchRecord )
- m_Switch = rec;
- else
- throw new ArgumentException();
- }
- }
-
- /// <summary>
- /// The SwitchRecord is stored within the parser's collection of registered
- /// switches. This class is private to the outside world.
- /// </summary>
- private class SwitchRecord
- {
- #region Private Variables
- private string m_name = "";
- private string m_description = "";
- private object m_value = null;
- private System.Type m_switchType = typeof(bool);
- private System.Collections.ArrayList m_Aliases = null;
- private string m_Pattern = "";
-
- // The following advanced functions allow for callbacks to be
- // made to manipulate the associated data type.
- private System.Reflection.MethodInfo m_SetMethod = null;
- private System.Reflection.MethodInfo m_GetMethod = null;
- private object m_PropertyOwner = null;
- #endregion
-
- #region Private Utility Functions
- private void Initialize( string name, string description )
- {
- m_name = name;
- m_description = description;
-
- BuildPattern();
- }
-
- private void BuildPattern()
- {
- string matchString = Name;
-
- if ( Aliases != null && Aliases.Length > 0 )
- foreach( string s in Aliases )
- matchString += "|" + s;
-
- string strPatternStart = @"(\s|^)(?<match>(-{1,2}|/)(";
- string strPatternEnd; // To be defined below.
-
- // The common suffix ensures that the switches are followed by
- // a white-space OR the end of the string. This will stop
- // switches such as /help matching /helpme
- //
- string strCommonSuffix = @"(?=(\s|$))";
-
- if ( Type == typeof(bool) )
- strPatternEnd = @")(?<value>(\+|-){0,1}))";
- else if ( Type == typeof(string) )
- strPatternEnd =
@")(?::|\s+))((?:"")(?<value>.+)(?:"")|(?<value>\S+))";
- else if ( Type == typeof(int) )
- strPatternEnd =
@")(?::|\s+))((?<value>(-|\+)[0-9]+)|(?<value>[0-9]+))";
- else if ( Type.IsEnum )
- {
- string[] enumNames = Enumerations;
- string e_str = enumNames[0];
- for ( int e=1; e<enumNames.Length; e++ )
- e_str += "|" + enumNames[e];
- strPatternEnd = @")(?::|\s+))(?<value>" + e_str + @")";
- }
- else
- throw new System.ArgumentException();
-
- // Set the internal regular expression pattern.
- m_Pattern = strPatternStart + matchString + strPatternEnd + strCommonSuffix;
- }
- #endregion
-
- #region Public Properties
- public object Value
- {
- get
- {
- if ( ReadValue != null )
- return ReadValue;
- else
- return m_value;
- }
- }
-
- public object InternalValue
- {
- get { return m_value; }
- }
-
- public string Name
- {
- get { return m_name; }
- set { m_name = value; }
- }
-
- public string Description
- {
- get { return m_description; }
- set { m_description = value; }
- }
-
- public System.Type Type
- {
- get { return m_switchType; }
- }
-
- public string[] Aliases
- {
- get { return (m_Aliases != null) ? (string[])m_Aliases.ToArray(typeof(string)): null;
}
- }
-
- public string Pattern
- {
- get { return m_Pattern; }
- }
-
- public System.Reflection.MethodInfo SetMethod
- {
- set { m_SetMethod = value; }
- }
-
- public System.Reflection.MethodInfo GetMethod
- {
- set { m_GetMethod = value; }
- }
-
- public object PropertyOwner
- {
- set { m_PropertyOwner = value; }
- }
-
- public object ReadValue
- {
- get
- {
- object o = null;
- if ( m_PropertyOwner != null && m_GetMethod != null )
- o = m_GetMethod.Invoke( m_PropertyOwner, null );
- return o;
- }
- }
-
- public string[] Enumerations
- {
- get
- {
- if ( m_switchType.IsEnum )
- return System.Enum.GetNames( m_switchType );
- else
- return null;
- }
- }
- #endregion
-
- #region Constructors
- public SwitchRecord( string name, string description )
- {
- Initialize( name, description );
- }
-
- public SwitchRecord( string name, string description, System.Type type )
- {
- if ( type == typeof(bool) ||
- type == typeof(string) ||
- type == typeof(int) ||
- type.IsEnum )
- {
- m_switchType = type;
- Initialize( name, description );
- }
- else
- throw new ArgumentException("Currently only Ints, Bool and Strings are
supported");
- }
- #endregion
-
- #region Public Methods
- public void AddAlias( string alias )
- {
- if ( m_Aliases == null )
- m_Aliases = new System.Collections.ArrayList();
- m_Aliases.Add( alias );
-
- BuildPattern();
- }
-
- public void Notify( object value )
- {
- if ( m_PropertyOwner != null && m_SetMethod != null )
- {
- object[] parameters = new object[1];
- parameters[0] = value;
- m_SetMethod.Invoke( m_PropertyOwner, parameters );
- }
- m_value = value;
- }
-
- #endregion
- }
-
-
- #region Private Variables
- private string m_commandLine = "";
- private string m_workingString = "";
- private string m_applicationName = "";
- private string[] m_splitParameters = null;
- private System.Collections.ArrayList m_switches = null;
- #endregion
-
- #region Private Utility Functions
- private void ExtractApplicationName()
- {
- Regex r = new
Regex((a)"^(?<commandLine>("".+""|(\S)+))(?<remainder>.+)""|(\S)+))(?<remainder>.+)",
- RegexOptions.ExplicitCapture);
- Match m = r.Match(m_commandLine);
- if ( m != null && m.Groups["commandLine"] != null )
- {
- m_applicationName = m.Groups["commandLine"].Value;
- m_workingString = m.Groups["remainder"].Value;
- }
- }
-
- private void SplitParameters()
- {
- // Populate the split parameters array with the remaining parameters.
- // Note that if quotes are used, the quotes are removed.
- // e.g. one two three "four five six"
- // 0 - one
- // 1 - two
- // 2 - three
- // 3 - four five six
- // (e.g. 3 is not in quotes).
- Regex r = new
Regex((a)"((\s*(""(?<param>.+?)""|(?<param>\S+))))")""|(?<param>\S+))))",
- RegexOptions.ExplicitCapture);
- MatchCollection m = r.Matches( m_workingString );
-
- if ( m != null )
- {
- m_splitParameters = new string[ m.Count ];
- for ( int i=0; i < m.Count; i++ )
- m_splitParameters[i] = m[i].Groups["param"].Value;
- }
- }
-
- private void HandleSwitches()
- {
- if ( m_switches != null )
- {
- foreach ( SwitchRecord s in m_switches )
- {
- Regex r = new Regex( s.Pattern,
- RegexOptions.ExplicitCapture
- | RegexOptions.IgnoreCase );
- MatchCollection m = r.Matches( m_workingString );
- if ( m != null )
- {
- for ( int i=0; i < m.Count; i++ )
- {
- string value = null;
- if ( m[i].Groups != null && m[i].Groups["value"] != null )
- value = m[i].Groups["value"].Value;
-
- if ( s.Type == typeof(bool))
- {
- bool state = true;
- // The value string may indicate what value we want.
- if ( m[i].Groups != null && m[i].Groups["value"] != null )
- {
- switch ( value )
- {
- case "+": state = true;
- break;
- case "-": state = false;
- break;
- case "": if ( s.ReadValue != null )
- state = !(bool)s.ReadValue;
- break;
- default: break;
- }
- }
- s.Notify( state );
- break;
- }
- else if ( s.Type == typeof(string) )
- s.Notify( value );
- else if ( s.Type == typeof(int) )
- s.Notify( int.Parse( value ) );
- else if ( s.Type.IsEnum )
- s.Notify( System.Enum.Parse(s.Type,value,true) );
- }
- }
-
- m_workingString = r.Replace(m_workingString, " ");
- }
- }
- }
-
- #endregion
-
- #region Public Properties
- public string ApplicationName
- {
- get { return m_applicationName; }
- }
-
- public string[] Parameters
- {
- get { return m_splitParameters; }
- }
-
- public SwitchInfo[] Switches
- {
- get
- {
- if ( m_switches == null )
- return null;
- else
- {
- SwitchInfo[] si = new SwitchInfo[ m_switches.Count ];
- for ( int i=0; i<m_switches.Count; i++ )
- si[i] = new SwitchInfo( m_switches[i] );
- return si;
- }
- }
- }
-
- public object this[string name]
- {
- get
- {
- if ( m_switches != null )
- for ( int i=0; i<m_switches.Count; i++ )
- if ( string.Compare( (m_switches[i] as SwitchRecord).Name, name, true )==0 )
- return (m_switches[i] as SwitchRecord).Value;
- return null;
- }
- }
-
- /// <summary>This function returns a list of the unhandled switches
- /// that the parser has seen, but not processed.</summary>
- /// <remark>The unhandled switches are not removed from the remainder
- /// of the command-line.</remark>
- public string[] UnhandledSwitches
- {
- get
- {
- string switchPattern = @"(\s|^)(?<match>(-{1,2}|/)(.+?))(?=(\s|$))";
- Regex r = new Regex( switchPattern,
- RegexOptions.ExplicitCapture
- | RegexOptions.IgnoreCase );
- MatchCollection m = r.Matches( m_workingString );
-
- if ( m != null )
- {
- string[] unhandled = new string[ m.Count ];
- for ( int i=0; i < m.Count; i++ )
- unhandled[i] = m[i].Groups["match"].Value;
- return unhandled;
- }
- else
- return null;
- }
- }
- #endregion
-
- #region Public Methods
- public void AddSwitch( string name, string description )
- {
- if ( m_switches == null )
- m_switches = new System.Collections.ArrayList();
-
- SwitchRecord rec = new SwitchRecord( name, description );
- m_switches.Add( rec );
- }
-
- public void AddSwitch( string[] names, string description )
- {
- if ( m_switches == null )
- m_switches = new System.Collections.ArrayList();
- SwitchRecord rec = new SwitchRecord( names[0], description );
- for ( int s=1; s<names.Length; s++ )
- rec.AddAlias( names[s] );
- m_switches.Add( rec );
- }
-
- public bool Parse()
- {
- ExtractApplicationName();
-
- // Remove switches and associated info.
- HandleSwitches();
-
- // Split parameters.
- SplitParameters();
-
- return true;
- }
-
- public object InternalValue(string name)
- {
- if ( m_switches != null )
- for ( int i=0; i<m_switches.Count; i++ )
- if ( string.Compare( (m_switches[i] as SwitchRecord).Name, name, true )==0 )
- return (m_switches[i] as SwitchRecord).InternalValue;
- return null;
- }
- #endregion
-
- #region Constructors
- public ParametersParser( string commandLine )
- {
- m_commandLine = commandLine;
- }
-
- public ParametersParser( string commandLine,
- object classForAutoAttributes )
- {
- m_commandLine = commandLine;
-
- Type type = classForAutoAttributes.GetType();
- System.Reflection.MemberInfo[] members = type.GetMembers();
-
- for(int i=0; i<members.Length; i++)
- {
- object[] attributes = members[i].GetCustomAttributes(false);
- if(attributes.Length > 0)
- {
- SwitchRecord rec = null;
-
- foreach ( Attribute attribute in attributes )
- {
- if ( attribute is CommandParameterAttribute )
- {
- CommandParameterAttribute switchAttrib =
- (CommandParameterAttribute) attribute;
-
- // Get the property information. We're only handling
- // properties at the moment!
- if ( members[i] is System.Reflection.PropertyInfo )
- {
- System.Reflection.PropertyInfo pi = (System.Reflection.PropertyInfo) members[i];
-
- rec = new SwitchRecord( switchAttrib.Name,
- switchAttrib.Description,
- pi.PropertyType );
-
- // Map in the Get/Set methods.
- rec.SetMethod = pi.GetSetMethod();
- rec.GetMethod = pi.GetGetMethod();
- rec.PropertyOwner = classForAutoAttributes;
-
- // Can only handle a single switch for each property
- // (otherwise the parsing of aliases gets silly...)
- break;
- }
- }
- }
-
- // See if any aliases are required. We can only do this after
- // a switch has been registered and the framework doesn't make
- // any guarantees about the order of attributes, so we have to
- // walk the collection a second time.
- if ( rec != null )
- {
- foreach ( Attribute attribute in attributes )
- {
- if (attribute is CommandParameterAliasAttribute)
- {
- CommandParameterAliasAttribute aliasAttrib =
- (CommandParameterAliasAttribute)attribute;
- rec.AddAlias( aliasAttrib.Alias );
- }
- }
- }
-
- // Assuming we have a switch record (that may or may not have
- // aliases), add it to the collection of switches.
- if ( rec != null )
- {
- if ( m_switches == null )
- m_switches = new System.Collections.ArrayList();
- m_switches.Add( rec );
- }
- }
- }
- }
- #endregion
- }
-}
Modified: trunk/irc/TechBot/TechBot.Library/TechBotService.cs
URL:
http://svn.reactos.org/svn/reactos/trunk/irc/TechBot/TechBot.Library/TechBo…
==============================================================================
--- trunk/irc/TechBot/TechBot.Library/TechBotService.cs [iso-8859-1] (original)
+++ trunk/irc/TechBot/TechBot.Library/TechBotService.cs [iso-8859-1] Wed Jun 25 08:23:59
2008
@@ -81,7 +81,7 @@
try
{
cmd.Initialize();
- cmd.ExecuteCommand();
+ cmd.Run();
cmd.DeInitialize();
}
catch (Exception e)