0

所以我做了一个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();

显然是从协议层身份验证过程代码中调用的。

我觉得我在这里做错了什么。因为我一个人工作,任何想法都将不胜感激。

4

1 回答 1

0

我最终将协议的核心部分(如身份验证、保持活动服务和最有可能在任何地方使用的基本消息类型)移至通信程序集。

所以现在IConnectionauth 会处理自己,因为它知道核心协议。

于 2013-02-14T17:13:14.510 回答