Синхронизация клиентов с сервером | Часть 1.

дравствуйте, сейчас я вам расскажу, что я успел сделать, на каком баге застрял и, что осталось сделать.


!!! ВАЖНО !!!


Эта статья не является уроком, так как это, пока что, показ частичного выполнения моего плана ( который я выкладывал в нашем telegram канале ). Как только весь план будет выполнен, по нему обязательно выйдет урок! А как правило, если все пойдет по плану, урок выйдет в субботу или же как только будет выполнен весь план.


Что сделано

Измененный код я буду помечать восклицательными знаками.


Немного изменен сервер:


Сейчас я продемонстрирую вам, что именно в сервере поменялось


1) Изменен класс User

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

2) Изменен класс ServerObject


Весь код я показывать не буду, а только методы, которые подверглись изменениям.


В начале класса появились эти строки, для MemoryStream, BinaryReader и BinaryWriter необходимо подключить библиотеку System.IO. Пока что останавливаться на MemoryStream не будем, он заслуживает отдельного поста, который выйдет позже, но знайте, он сильно упрощает запись и чтение массива данных.

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

Изменен метод Listen

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост
Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

Изменен метод BroadcastMessage и добавлена перегрузка этого метода

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

И последний метод который изменен в данном классе, это AddUser

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

3) А класс ClientObject был не большой, а изменений потерпел много, так что, этот класс я покажу весь.

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост
Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

Вот и все изменения, которые на данный момент потерпел сервер.


Скрин сервера на момент прекращения работы над ним

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

Клиент перенесен в Unity:


Немного скринов из Unity:


1) Как выглядел клиент в Unity, на момент завершения работы над ним.

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

2) Интерфейс клиента и его составляющие UI элементы, по поводу InputField'а со ScrollBar'ом я расскажу в последней части данного плана.

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

3) Иерархия клиента в Unity.

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

4) MainCamera и скрипт общения с сервером ( скрипт в самом низу, под названием "Client_TEST_UDP".

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

5) Скрипт на кнопке "Подключиться!".

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

6) Ошибка, которую я буду исправлять.

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

Возникающая при нажатии на кнопку "Статус", ее задача, вывести в InputField информацию о всех подключенных игроках в виде "NAME:COLOR".


Клиент в Unity:


Состоит он из 1 скрипта, под названием "Client_TEST_UDP"


Сейчас я покажу вам исходники данного скрипта, и сразу скажу, он сейчас находится в стадии разработки и он очень и очень грязный и плохой, это пример как писать не надо! К последней части статьи о плане, он будет выглядеть намного лучше, а еще я рекомендую убрать от экрана впечатлительных программистов :)


Строку, в которой возникает ошибка, я помечу символом 'X', может быть, кому то будет интересно. А возникает она, только при вызове метода Btn_Status_Click

Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост
Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост
Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост
Синхронизация клиентов с сервером | Часть 1. Unity, Csharp, Игровой сервер, Создание клиента для игры, Программирование, Длиннопост

Какие цели этими изменениями достигнуты:


1) Клиент успешно подключается к серверу, если следующие условия верны:


Сервер запущен

Клиент запущен и правильно указан адрес севера, порт 1 ( acceptPort) с портом 2 ( receivePort ) совпадают с указанными на сервере.

Нажата кнопка "Подключится!"

После нажатия на кнопку, на сервере появляется характерное сообщение о новом подключении и так же, появляется характерное сообщение на клиенте. Все наглядно видно на скрине сервера и первых 2-ух скринах клиента в Unity.


На этом все изменения подошли к концу


C изменениями и багом вы знакомы, теперь я познакомлю вас с оставшимися задачами.


1) Исправить баг. После исправления заработает получения информации о подключенных клиентах в виде "NAME:COLOR".


3) Добавить шифрование пакетов.


Заключение!


На этом, данный пост подходит к концу, я хочу поблагодарить вас за уделенное внимание и понимание. Надеюсь вам было интересно, а если нет - критикуйте, это очень важно! Благодаря вашим мнениям, посты будут меняться в лучшую сторону! Оставляйте свои комментарии, делитесь своим мнением, обращайтесь с вопросами ко мне ( контактные данные указаны ниже ), я обязательно на них отвечу!


Всем еще раз спасибо за внимание, поменьше багов и побольше удачи! Ждите новых постов, они обязательно скоро выйду! Всем пока!