Автор:
Не так давно наткнулся на эту разработку и честно говоря был в шоке. Чувак реализовал клиент и сервер вебсокетов в сампе, причем еще 2 года назад. Что это значит для разработчиков? У Вас открываются практически безграничные возможности, т.к. передача данных происходит в реальном времени. При этом сервер сампа может быть как сервером, так и клиентом. Как пример - моментальное пополнение доната. Сайт отправляет данные на websocket сервер, а самп сервер его слушает. Вызывается коллбэк onMessage, и тут уже манипулируем данными как хотим. Хоть и сам код предельно понятен, документации на Github нет, поэтому распишу немного тут.
Клиент:
Чтобы создать клиента, используем функцию CreateWSClient
Функция вернет ID клиента. Клиентов может быть неограниченное количество. Далее нам необходимо подключиться к websocket серверу, который мы будем слушать.
Чтобы отправить сообщение используем функцию WSClientSend
Далее про вспомогательные коллбэки
Вызывается при успешном подключении.
Вызывается, если подключение установить не удалось
Вызывается если сервер, либо клиент отключился
Ну и самое главное
Вызывается при новом сообщении. На этом с клиентом все.
Теперь перейдем к серверу. Чтобы создать сервер, используем функцию WSCreateServer, а затем укажем адрес сервера.
Чтобы сервер был доступен извне, у вас должны быть открыты порты 443 и 80, помимо стандартных портов сампа. На локалке работает без открытия портов.
Вызывается при входящем подключении от клиента. Тут мы можем узнать IP клиента, помимо ID
Вызывается при дисконнекте клиента
Самая главная часть, вызывается при новом сообщении.
Отправляет сообщение от имени сервера
Отключает сервер
Кикает клиента
Впринципе на этом все. Более подробно Вы можете изучить непосредственно в исходниках.
Так же кто будет запускать на винде, в server.cfg прописан плагин для линукса, удалите .so
Так же обновите все инклуды в папке pawno, не знаю почему, но они там старые
Скачать:
Исходники (не исходный код плагина, просто сервер):
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Не так давно наткнулся на эту разработку и честно говоря был в шоке. Чувак реализовал клиент и сервер вебсокетов в сампе, причем еще 2 года назад. Что это значит для разработчиков? У Вас открываются практически безграничные возможности, т.к. передача данных происходит в реальном времени. При этом сервер сампа может быть как сервером, так и клиентом. Как пример - моментальное пополнение доната. Сайт отправляет данные на websocket сервер, а самп сервер его слушает. Вызывается коллбэк onMessage, и тут уже манипулируем данными как хотим. Хоть и сам код предельно понятен, документации на Github нет, поэтому распишу немного тут.
Клиент:
Чтобы создать клиента, используем функцию CreateWSClient
C++:
new ws_client:id = CreateWSClient("onConnect", "onFail", "onDisconnect", "onMessage");
C++:
WSClientConnect(id, "ws://echo.websocket.org/");
C++:
WSClientSend(ws, "hello");
C++:
public onConnect(ws_client:ws)
C++:
public onFail(ws_client:ws)
C++:
public onDisconnect(ws_client:ws)
Ну и самое главное
C++:
public onMessage(ws_client:ws, message[])
Теперь перейдем к серверу. Чтобы создать сервер, используем функцию WSCreateServer, а затем укажем адрес сервера.
C++:
new ws_server:mainWS = CreateWSServer("onWSClientConnect", "onWSClientDisconnect", "onWSClientMessage");
WSServerStartListen(mainWS, "127.0.0.1", "7777");
C++:
public onWSClientConnect(ws_server:ws, ws_connection:con)
C++:
new ip[16];
WSServerGetIP(ws, con, ip, sizeof(ip));
Код:
public onWSClientDisconnect(ws_server:ws, ws_connection:con)
C++:
public onWSClientMessage(ws_server:ws, ws_connection:con, message[])
C++:
WSServerSend(ws, con, message);
C++:
WSServerStopListen(ws);
C++:
WSServerKick(ws, con, 1000, "Bye ;)");
Впринципе на этом все. Более подробно Вы можете изучить непосредственно в исходниках.
Так же кто будет запускать на винде, в server.cfg прописан плагин для линукса, удалите .so
Так же обновите все инклуды в папке pawno, не знаю почему, но они там старые
Скачать:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Исходники (не исходный код плагина, просто сервер):
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!