0

ということでソケット通信ライブラリを作りました。そしてその一部は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状態を変更し、サブスクライバーに認証プロセスを通知できるようにするには、この 2 つのメソッドを実装する必要がありました

void OnAuthenticated();
void OnAuthenticationFailed();

これは、明らかにプロトコル層の認証プロセス コードから呼び出されます。

ここで何か間違ったことをしているように感じます。私は一人で仕事をしているので、どんな考えでも大歓迎です。

4

1 に答える 1

0

最終的に、認証、キープアライブ サービス、基本的なメッセージ タイプなど、あらゆる場所で使用される可能性が最も高いプロトコルのコア部分を Communication アセンブリに移動しました。

そのIConnectionため、コアプロトコルを認識しているため、auth プロセス自体が実行されるようになりました。

于 2013-02-14T17:13:14.510 に答える