Здравствуйте, сегодня мы продолжаем курс уроков о сетевом решении SetNet Server. И сегодня речь пойдет о классе клиента и обработке данных, которые принимаются от клиентов. Начнем.
Создадим класс под названием “Peer” далее подключим пространства имен “SetNet“ и унаследуем класс “Peer” от базового класса “PeerBase“. Класс должен иметь следующий вид:
Теперь создадим конструктор класса «Peer». Он должен выгладить так:
В данном случае конструктор принимает экземпляр класса ClientInfo в котором хранится информация о клиенте.
Далее нужно реализовать абстрактный класс от “PeerBase” в последствии чего класс будет иметь вид:
В методе “ReceiveData” происходит взаимодействие с сообщениями с клиента.
Рассмотрим метод “ReceiveData“:
«EventData» содержится Dictionary с названием «dic» в котором содержаться все переданные данные.
throw new NotImplementedException(); можно удалить так как эта строчка не нужна. Она создается в последствии реализации абстрактного класса.
Рассмотрим взаимодействие с объектом “EventData” в методе “ReceiveData“:
Для начала нужно обработать событие. Для этого сделаем перебор:
Здесь можно видеть перебор по коду сообщения и выводом. Далее создадим ответ сервера клиенту. Для этого нужно создать новый экземпляр класса “EventData” и зададим ему имя “response” перед конструктором класса. Далее в методе “ReceiveData” создадим ответ в “case 1”.
Рассмотрим ответ:
Метод “SendEvent” принимает экземпляр класса “EventData” и отсылает его клиенту.
Метод «ReceiveData» после изменений:
Остается лишь создать экземпляр класса “Peer” в классе “GameServer“: Перейдем в класс “GameServer“. В методе “NewClient” удалим строчку “throw new NotImplementedException();” В методе “NewClient” создадим экземпляр класса “Peer“.
Теперь метод будет выглядеть так:
На этом данный урок закончен. Спасибо за внимание. Если остались вопросы – пишите на rebegin@list.ru или в скайп haker954.
Создадим класс под названием “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<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; } }
Остается лишь создать экземпляр класса “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.