所以我做了一个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();
显然是从协议层身份验证过程代码中调用的。
我觉得我在这里做错了什么。因为我一个人工作,任何想法都将不胜感激。