Last active
August 29, 2015 14:27
-
-
Save EdAllonby/aafe3f2717a8014e7a9f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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