Здравствуйте, сегодня мы продолжаем курс уроков о сетевом решении 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<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.
Автор: Rebegin