所以我做了一个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();
它们显然是从协议层认证过程代码中调用的。
我觉得我做错了什么。因为我一个人工作,所以任何想法都会非常感谢。
发布于 2013-02-14 17:13:15
我最终将协议的核心部分,如身份验证、保活服务和最可能随处使用的基本消息类型移动到了Communication组装中。
因此,现在IConnection
会自动执行身份验证过程,因为它知道核心协议。
https://stackoverflow.com/questions/14864607
复制