【发布时间】:2013-01-29 15:38:24
【问题描述】:
于是我做了一个socket通信库。其中一部分是IConnection
public enum ConnectionState
{
NotConnected, Connecting, Connected, Authenticated, Disconnecting, Disconnected
}
public interface IConnection
{
ConnectionState State { get; }
event Action Connected;
event Action Disconnected;
event Action Authenticated;
event Action AuthenticationFailed;
// this two methods are the core of my question
void OnAuthenticated();
void OnAuthenticationFailed();
bool Send(byte[] data);
void Connect();
void Close();
}
当然IConnection 提供有关连接状态的信息,并且能够触发Connected/Disconnected 事件,因为它拥有Socket。毫无疑问。
现在,IConnection 的用户也想知道它何时通过身份验证。例如,服务器可能会监听该事件,并且一旦连接通过身份验证 - 发送客户端的初始配置数据。或者客户端可能会监听该事件并决定开始通信或重试身份验证过程。
但是。问题是,认证过程存在于协议层。 IConnection 甚至不知道这样的层存在。协议层实际上是使用IConnection向对方发送序列化为byte[]的消息。
所以,为了让IConnection 能够更改其状态并通知订阅者有关身份验证过程,我必须实现这两种方法
void OnAuthenticated();
void OnAuthenticationFailed();
显然是从协议层身份验证过程代码中调用的。
我觉得我在这里做错了什么。因为我一个人工作,任何想法都将不胜感激。
【问题讨论】:
标签: c# architecture