ゲーム サーバー プロジェクトでイベントを使用する予定ですが、使用するのに最適な設計を考えています。私の問題の良い例が見つからないので、ここで質問しています。
私が慣れ親しんでいるサーバー プロジェクトの構造は、ほぼ次のようなものです。ログイン サーバー、ワールド/チャネル サーバー、およびサーバー クラスとクライアント クラスなどの共有ライブラリがあり、これらは両方で使用されます。たとえば、すべての通信コードはここにあります。サーバーは、サーバー クラスから派生します。クライアント クラスは、ソケットのラッパーです。着信データは解析され、パケット ハンドラー メソッドに渡されます。
ここで、イベントを追加したいと思います。たとえば、クライアントが接続すると、すべてのクライアントに通知されます。以前のように、接続されているすべてのクライアントを反復処理する代わりに、接続するクライアントは、接続しているクライアントから起動されるイベント ハンドラーにサブスクライブする必要があります。
ようやく標準設計の問題にたどり着きました。コールバックをどこに配置すればよいでしょうか? 通常、イベントに使用するために、クライアント クラスに OnClientConnects などの新しいメソッドを作成する必要があります。しかし、私のサーバーは同じクライアント クラスを使用しており、両方のサーバーにイベント ハンドラーを配置するのは面倒です。メソッドは、ソケットのように、サブスクライブされたクライアントからの情報を必要とするため、他の場所に置くことはできません。
私の頭に浮かぶ他の唯一の解決策は、異なるサーバー用の個別のクライアントクラス、またはそれから派生したクラスです。これは少しトリッキーですが、すべてのネットワーク コードが共有クラス内にあるため、そこにカスタム クライアント クラスを取得する必要がありますが、オーバーライドされたメソッドを使用すれば何とか可能になるはずです。そして、それが私にできるすべてだと思います。
これはすべて間違っているように感じますが、これが本当に受け入れられる設計なのか、それともより良い代替案があるのか 疑問に思っています.