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

caing

Известный
43
6
Что-то не особо понял куда устанавливать либу? Закинул содержимое архива SNET101 > lua в папку moonloader > lib, а server.lua из examples в папку moonloader, в итоге ошибки.
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,783
2,608
Краткое описание функций на 1.0.1 версии библиотеки:
Server:
server.address
Содержит IP адрес сервера, по умолчанию: "*"
server.portСодержит порт сервера, по умолчанию: 13322
server.clientsСодержит таблицу со всеми клиентами, где ключи - IP и порт, а значения - время отправки последнего пакета.
server.eventsСодержит таблицу со списком всех зарегистрированных событий
server.blacklistСодержит таблицу с заблокированными IP
server:add_event_handler(string: event, function: callback)Добавляет обработчик, первый параметр - тип события (onClientUpdate(string: address, number: port, string: condition), onReceivePacket(number: packetId, table: bs, string: address, number: port)), второй - функция, которая будет вызываться при срабатывание события
server:block_address(string: address)Блокирует указываемый IP адрес
server:unblock_address(address)Снимает блокировку у указанного IP адреса
server:process()Проверяет, когда последний раз был отправлен пакет от каждого пользователя и если прошло более минуты - отправляет информацию в onClientUpdate. Также необходим для нормальной отправки и получения пакетов
server:send(number: packetId, table: bs, number: priority, string: address, number: port)
Отправляет нужный пакет с потоком байт на выбранный IP и порт
Client:
client.adressСодержит IP адрес клиента
client.portСодержит порт клиента
client.statusСодержит статус клиента
client.eventsСодержит таблицу со списком всех зарегистрированных событий
client:add_event_handler(string: event, function: callback)Добавляет обработчик, первый параметр - тип события (onReceivePacket(number: packetId, table: bs)), второй - функция, которая будет вызываться при срабатывание события
client:send(number: packetId, table: bs, number: priority)Отправляет нужный пакет с потоком байт на сервер
client:process()Нужен для стабильного получения и отправки пакетов
BStream:
bs:write(string: type, unknown: val)Записывает значение определенного типа в поток байт
bs:read(string: type, number: len)Читает значение нужного размера, как определенный тип
Constants:
BS_INT8"int8_t"
BS_INT16"int16_t"
BS_INT32"int32_t"
BS_UINT8"uint8_t"
BS_UINT16"uint16_t"
BS_UINT32"uint32_t"
BS_FLOAT"float"
BS_BOOLEAN"bool"
BS_STRING"string"
SNET_DISCONNECTED0
SNET_CONNECTED1
SNET_SYSTEM_PRIORITY4
SNET_HIGH_PRIORITY3
SNET_MEDIUM_PRIORITY2
SNET_LOW_PRIORITY1
SNET_BYPASS_PRIORITY0
SNET_CONFIRM_PRIORITY0xFFFFFFFF
SNET_BLOCK_PACKET0xFFFFFFFF - 1
SNET:
snet.server(string: address, number: port)Создает новый сервер
snet.client(string: address, number: port)Создает нового клиента
snet.bstream(unknown: bytes)Создает новый поток байт
 
  • Нравится
  • Влюблен
Реакции: kyrtion, Vespan и Z3roKwq

Vespan

Чешский луашер
Проверенный
2,120
1,722
Функция как в samp.events, позволяет прочитать-записать координаты x,y(,z)
vector3d & vector2d in bs SNET:
snet = require("snet")
bstream = snet.bstream
--
for I = 2,3 do
    bstream['vector'..I..'d'] = function(bs,x,y,z)
        local readResult = {}
        if x ~= nil and y ~= nil and (I == 3 and z ~= nil or true) then--write
            -- local bs = bstream.new()
            for k,v in pairs({x,y,z}) do
                bs:write(BS_FLOAT,v)
            end
            return bs
        end
        for i = 1,I do--read
            readResult[i] = bs:read(BS_FLOAT)
        end
        return (I == 3 and {x=readResult[1],y=readResult[2],z=readResult[3]} or {x=readResult[1],y=readResult[2]})
    end
end
using:
--write
local bs = bstream.new()
bstream.vector3d(bs,1.1,1.2,1.3)
client:send(packets.sharePos,bs,SNET_SYSTEM_PRIORITY)
--read
local t = bstream.vector3d(bs)
print(t.x,t.y,t.z)
 
  • Bug
Реакции: chapo

Vespan

Чешский луашер
Проверенный
2,120
1,722
Максимальное общее количество записанных текста в bitstream'a = 8177(BS_UINT32).
Если этот лимит привысит клиент не отправит серверу.

Хотел попытатся отправить файл байтами(пытался и байты переводить в HEX(string)) через SNET, но этот лимит все испортил,
будет ли привышение этого лимита? Возможно ли такое