Pull to refresh

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

Reading time3 min
Views3.4K
Здравствуйте, сегодня мы продолжаем курс уроков о сетевом решении 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.
Tags:
Hubs:
0
Comments9

Articles