[SetNet & Console Application] Первые шаги. SetNet.PeerBase. Часть 2

Здравствуйте, сегодня мы продолжаем курс уроков о сетевом решении SetNet Server. И сегодня речь пойдет о классе клиента и обработке данных, которые принимаются от клиентов. Начнем.Создадим класс под названием «Peer» далее подключим пространства имен «SetNet» и унаследуем класс «Peer» от базового класса «PeerBase». Класс должен иметь следующий вид: 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» содержится код сообщения под названием «eventCode» который имеет тип «byte». За eventCode мы будем различать сообщения с клиента. «EventData» содержится Dictionary с названием «dic» в котором содержаться все переданные данные.throw new NotImplementedException (); можно удалить так как эта строчка не нужна. Она создается в последствии реализации абстрактного класса.

Рассмотрим взаимодействие с объектом «EventData» в методе «ReceiveData»:

Для начала нужно обработать событие. Для этого сделаем перебор:

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 { { 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 { { 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; } } Остается лишь создать экземпляр класса «Peer» в классе «GameServer»: Перейдем в класс «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 или в скайп haker954.

© Habrahabr.ru