|
using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using System.Reflection;
using System.Runtime.Remoting;
namespace NotepadHandlerNET
{
#region ICommander ServiceContract
/// <summary>
/// ServiceContract interface for embedded to Notepad component.
/// </summary>
[ServiceContract]
public interface ICommander
{
[OperationContract]
object Command(string sender, string commandName, object commandData);
}
#endregion
#region Commander Service Class
/// <summary>
/// Service class implementing ServiceContract.
/// </summary>
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single)]
public class Commander : ICommander
{
static readonly private Type[] types = null;
/// <summary>
/// Static ctor.
/// </summary>
static Commander()
{
types = Assembly.GetExecutingAssembly().GetTypes();
}
/// <summary>
/// Command method is called by client. It creates actual command class by the command name and
/// calls its DoCommand method.
/// </summary>
public object Command(string sender, string commandName, object commandData)
{
object ret = null;
try
{
ICommandImpl comImpl = Activator.CreateInstance(GetCommandTypeByName(commandName)) as ICommandImpl;
if (null != comImpl)
ret = comImpl.DoCommand(sender, commandData);
}
catch (Exception e)
{
ret = e;
}
return ret;
}
/// <summary>
/// A helper method getting actual command type using the command name.
/// </summary>
private Type GetCommandTypeByName(string commandName)
{
Type commandType = null;
foreach (Type type in types)
if (type.Name.ToLower() == commandName.ToLower())
{
try
{
commandType = type;
break;
}
catch
{
}
}
return commandType;
}
}
#endregion
#region Commnad Implementation Interface
/// <summary>
/// Interface to be implemented by all commands.
/// </summary>
public interface ICommandImpl
{
object DoCommand(string sender, object commandData);
}
#endregion
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.