ということでソケット通信ライブラリを作りました。そしてその一部は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();
これは、明らかにプロトコル層の認証プロセス コードから呼び出されます。
ここで何か間違ったことをしているように感じます。私は一人で仕事をしているので、どんな考えでも大歓迎です。