Skip to content

Instantly share code, notes, and snippets.

@EdAllonby
Last active August 29, 2015 14:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EdAllonby/aafe3f2717a8014e7a9f to your computer and use it in GitHub Desktop.
Save EdAllonby/aafe3f2717a8014e7a9f to your computer and use it in GitHub Desktop.
using System.Collections.Generic;
namespace Example
{
public interface IMessageHandler
{
void HandleMessage(IMessage message);
}
public interface IMessage
{
MessageIdentifier MessageIdentifier { get; }
}
public class LoginRequest : IMessage
{
public MessageIdentifier MessageIdentifier => MessageIdentifier.LoginRequest;
}
public class ClientDisconnection : IMessage
{
public MessageIdentifier MessageIdentifier => MessageIdentifier.ClientDisconnection;
}
public enum MessageIdentifier
{
ClientDisconnection,
LoginRequest
}
public abstract class MessageHandler<TMessage> : IMessageHandler where TMessage : IMessage
{
public void HandleMessage(IMessage message)
{
HandleMessage((TMessage) message);
}
public abstract void HandleMessage(TMessage message);
}
public static class MessageHandlerRegistry
{
public static readonly Dictionary<MessageIdentifier, IMessageHandler> MessageHandlersIndexedByMessageIdentifier = new Dictionary<MessageIdentifier, IMessageHandler>
{
{MessageIdentifier.ClientDisconnection, new ClientDisconnectionHandler()},
{MessageIdentifier.LoginRequest, new LoginRequestHandler()}
};
}
public class ClientDisconnectionHandler : MessageHandler<ClientDisconnection>
{
public override void HandleMessage(ClientDisconnection message)
{
throw new System.NotImplementedException();
}
}
public class LoginRequestHandler : MessageHandler<LoginRequest>
{
public override void HandleMessage(LoginRequest message)
{
throw new System.NotImplementedException();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment