Исходник Гайд SNET - Networking Interface

U

user390868

Гость
А вот и чатик подъехал, в нем нет и половины чего я запланировал (в разработке) + рандомные баги которые нужно будет фиксить. Но вот что уже есть:


залей на ютуб. есть возможность? у меня теле2. на радикале пересылает на рекламные сайты. но хочется посмотреть
 

Tak

Известный
177
70

ImPasha

Software Developer & System Administrator
Автор темы
Друг
1,789
2,141
Обновил. Исправлено преобразование данных в набор байтов и обратно, некоторые типы данных при превышении пиковых значений возвращали невалидные результаты, например, UINT32 мог хранить только значения, не превышающие размерность INT32, а INT32 возвращал некорректные отрицательные значения. Теперь перевод типов осуществляется при помощи функционала LuaJIT, а от использования BIT пришлось отказаться. Чистый Lua больше не поддерживается и не будет.
 
  • Нравится
Реакции: Tak

ImPasha

Software Developer & System Administrator
Автор темы
Друг
1,789
2,141
Внимание разработчики! Исправлено чтение данных из BitStream.
Для тех, кто скачал новую версию от 4 октября - срочно обновитесь!
 

ImPasha

Software Developer & System Administrator
Автор темы
Друг
1,789
2,141
Не так давно меня спрашивали о возможности сделать на основе SL:NET гибридную систему, совмещающую с себе и возможность создавать сервера (хост-функция), и возможность подключаться к созданному серверу - чтобы всё это было в одном и том же скрипте.

Выше выкладывался пример чата, который имеет стандартную модель работы: несколько клиентов и отдельный сервер. Сейчас же мной публикуется скрипт, который имеет гибридную систему работы. Один из клиентов может стать сервером, а остальные подключиться к нему. При этом и клиент, ставший сервером, и все остальные клиенты будут иметь возможность видеть и отправлять сообщения.

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

/chat.host [chat name] - стать хостом чата, т.е. создать новый чат для подключения
/chat.connect [chat IP] - присоединиться к созданному кем-то чату
/ch [chat message] - отправить свое сообщение в чат, к которому вы подключены

Для работы этого примера требуется SA:MP, ибо, как можно догадаться, он привязан к SA:MP чату.
Система автоматического отключения иногда не срабатывает, но это не так страшно - система бездействия всё сделает.
 

Вложения

  • sl_chat.lua
    7.7 KB · Просмотры: 82
  • SLNetLib.zip
    5.9 KB · Просмотры: 49

ImPasha

Software Developer & System Administrator
Автор темы
Друг
1,789
2,141
Ещё один пример скрипта с гибридной системой работы. Здесь представлен пример того, как можно реализовать синхронизацию между игроками в какой-либо игре. Скрипт зависим от mimgui, так что для тестирования нужно будет его установить. В общем и целом, в примере представлена простейшая синхронизация перемещения игроков по игровому полю, представленному в 2D-пространстве.

Никакой задачи в игре нет, изначально хотел, чтобы можно было что-то собирать на поле, но мне стало немного лень, поэтому игроки, представленный кружочками с никнеймами над собой, просто катаются по полю при помощи WASD и ускоряются с помощью SHIFT.

Так же, как и в прошлом примере, реализована система бездействия и автоматического выкидывания игрока. Система ручного отключения не сделана, также не добавлял различные проверки на одинаковые никнеймы, координаты и прочее. Пример этого всего есть в скрипте выше, поэтому при желании можно понять что и как работает. Без этих проверок при желании можно выкинуть игрока за карту.

/slgame - открыть окно примера

Для работы этого примера требуется SA:MP, ибо, как можно догадаться, он привязан к SA:MP чату.
Надеюсь, этот пример также будет полезен и посодействует созданию ваших собственных проектов.

slgame.png
 

Вложения

  • SLNetLib.zip
    5.9 KB · Просмотры: 11
  • sl_game.lua
    10.5 KB · Просмотры: 31

ImPasha

Software Developer & System Administrator
Автор темы
Друг
1,789
2,141
Добавлен SL:NET модуль, работающий на базе C++ с поддержкой Windows и UNIX систем. Умеет работать вместе со стандартным SL:NET на Lua, но лишен некоторой функциональности. Например, не умеет повторно отправлять пакеты при неудачной отправке, возможно добавлю чуть позже.
 
  • Нравится
Реакции: enyag

ImPasha

Software Developer & System Administrator
Автор темы
Друг
1,789
2,141
В грядущем обновлении SL:NET планируется:
  • Обновить и улучшить исходный код: добавить комментарии в исходный код модуля для удобства изменения, понимания и поиска ошибок, а также для увеличения читаемости кода.
  • Изменить систему приоритетов отправки пакетов: приоритетом по умолчанию станет, так называемый, "системный приоритет", который будет отправлять пакет до тех пор, пока тот наконец не будет доставлен, либо пока клиент не будет отключен. Также будут добавлены и другие приоритеты, один из которых "no-confirmation", который вовсе не будет требовать подтверждения получения.
  • Добавить систему подключения и отключения клиентов: SL:NET будет локально сохранять данные о подключенных пользователях и автоматически производить всевозможные операции с клиентами, например, автоматически отключать их от сервера, если от них не поступали никакие пакеты в течение установленного времени. Этот также поможет усовершенствовать систему приоритетов отправки.
  • Изменить стилистику кода, привести всё к единому формату для улучшения читабельности.
  • Добавить дополнительный функционал для увеличения гибкости модуля: ограничение на количество отправляемых и получаемых пакетов в секунду, максимальный размер получаемого и отправляемого пакета, максимальное количество клиентов, которые могут подключаться к серверу, блокировка подключений по IP-адресу клиента.
  • Полностью отказаться от функционального программирования, развивать объектно-ориентированный подход.
К сожалению, поддержки старых версий модуля (Legacy Code) не будет в связи с глобальными изменениями, но я обязательно сделаю инструкцию о том, как можно быстро и безболезненно переехать со старой версии SL:NET на новую после выхода обновления.
 
  • Нравится
Реакции: Tak, enyag и user31883

ImPasha

Software Developer & System Administrator
Автор темы
Друг
1,789
2,141
Обновление SL:NET, версия 1.0.0
Что нового:
https://www.blast.hk/threads/64996/post-581944
Документации для этой версии пока ещё нет и, к сожалению, сегодня точно не будет. Изменено 90% кода, ни одного старого метода не осталось, поэтому все ныне существующие документации и примеры актуальными не являются. Если есть те, кому интересно разобраться в библиотеке без документации (по-русски, кратко говоря), то дерзайте - полностью рабочий релиз, можно использовать без вопросов.

Если же вы всё-таки не хотите гадать на кофейной гуще, то ожидайте документации. Всё, что нужно знать о новой версии, что в ней даже система BitStream была практически полностью изменена и нет теперь никаких константных типов данных - и это ещё не все нововведения.
 

MrCreepTon

Неизвестный
Всефорумный модератор
2,201
4,979
Планируешь реализацию такого формата общения на платформах вроде nodeJS? Было бы полезно