こんにちは、今日は
SetNetサーバーネットワークソリューションのチュートリアルコースを続け
ます 。 今日は、クライアントのクラスと、顧客から受信したデータの処理について説明します。 始めましょう。
「
Peer 」というクラスを作成してから、名前空間「
SetNet 」を接続し、基本クラス「
PeerBase 」からクラス「
Peer 」を継承しましょう。 クラスは次のようになります。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SetNet; using SetNet; namespace Server { class Peer:PeerBase { } }
次に、
Peerクラスのコンストラクターを作成します。 次のようになります。
public Peer(ClientInfo info) : base(info) { }
この場合、コンストラクターは、クライアント情報が格納されている
ClientInfoクラスのインスタンスを受け入れます。
次に、「
PeerBase 」から抽象クラスを実装する必要があります。その後、クラスは次のようになります。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SetNet; namespace ServerTest { class Peer:PeerBase { public override void ReceiveData(EventData data) { throw new NotImplementedException(); } public override void ClientDisconected() { throw new NotImplementedException(); } } }
「
ReceiveData 」メソッドは、クライアントからのメッセージと対話します。
「
ReceiveData 」メソッドを検討してください。
- EventDataクラスには、「 byte 」タイプの「 eventCode 」というメッセージコードが含まれています。 eventCodeについては、クライアントからのメッセージを区別します。
「
EventData 」には、すべての送信データを含む「
dic 」と呼ばれるディクショナリが含まれています。
新しいNotImplementedException()をスローします。 この行は不要なので削除できます。 抽象クラスの実装後に作成されます。
「
ReceiveData 」メソッドの「
EventData 」オブジェクトとの相互作用を検討してください。
まず、イベントを処理する必要があります。 これを行うには、整理します。
switch (data.eventCode) { case 1: Console.WriteLine("Received message from the client with {0} eventCode. Message {1}",data.eventCode,data.dic[1].ToString()); break; default: Console.WriteLine("Received unknown message from the client with {0} eventCode. Message {1}",data.eventCode,data.dic[1].ToString()); break; }
ここでは、メッセージコードと出力による検索を確認できます。 次に、クライアントへのサーバー応答を作成します。 これを行うには、「
EventData 」クラスの新しいインスタンスを作成し、クラスコンストラクターの前に「
response 」という名前を付けます。 次に、「
ReceiveData 」メソッドで、「
case 1 」の回答を作成します。
EventData response = new EventData(1, new Dictionary<int, object> { { 1, "Response from the server" } });
答えを考慮してください:
SendEvent(response);
SendEventメソッドは、
EventDataクラスのインスタンスを受け取り、クライアントに送信します。
変更後の
ReceiveDataメソッド:
public override void ReceiveData(EventData data) { switch (data.eventCode) { case 1: Console.WriteLine("Received message from the client with {0} eventCode. Message {1}", data.eventCode, data.dic[1].ToString()); EventData response = new EventData(1, new Dictionary<int, object> { { 1, "Response from the server" } }); SendEvent(response); break; default: Console.WriteLine("Received unknown message from the client with {0} eventCode. Message {1}", data.eventCode, data.dic[1].ToString()); break; } }
「
GameServer 」クラスに「
Peer 」クラスのインスタンスを作成するだけです。「
GameServer 」クラスに
移りましょう。 「
NewClient 」メソッドで、「
throw new NotImplementedException(); 」という行を削除し
ます。 「
NewClient 」メソッドで、「
Peer 」クラスのインスタンスを作成します。
これでメソッドは次のようになります。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using SetNet; namespace Server { public class GameServer:SetNet.Server { public GameServer() : base() { } public override void NewClient(ClientInfo info) { Peer peer = new Peer(info); } } }
これでこのレッスンは終了です。 ご清聴ありがとうございました。 ご質問がある場合は、rebegin @ list.ruまたはskype haker954までご連絡ください。