REST in Pawn

REST in Pawn 1.3.1

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #1
Пользователь Kruzya разместил новый ресурс:

REST in Pawn - Нативы для работы с HTTP и JSON

Ещё одно расширение для работы с HTTP, но заточенное под работу с JSON REST API. Оно поддерживает HTTPS и gzip, и представляет функционал в виде методмапов (methodmaps) для работы с JSON объектами и массивами.

Создание JSON-объекта
PHP:
JSONObject someObject = new JSONObject();

someObject.SetBool("someBool", false);
someObject.SetFloat("someFloat", 1.0);
someObject.SetInt("someInt", 2);
someObject.SetString("someString",...

Узнать больше об этом ресурсе...
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #2
Пользователь Kruzya обновил ресурс REST in Pawn новой записью:

Установка заголовков запроса

Теперь доступен натив установки заголовков запросов.

HTTPClient.SetHeader()
Принимает на себя два аргумента:
  • const char[] name: Имя заголовка
  • const char[] value: Значение заголовка.
В течении 5-10 минут добавлю ещё один пример от разработчика касательно этой фунцкии.

Узнать больше об этом обновлении...
--- Добавлено позже ---
На CS:GO под Linux не запускается по причине отсутствия некоторых библиотек движка.
Если у Вас есть прямой доступ к файлам сервера (включая папку bin в папке движка (где ещё папки csgo, platform лежат)), можете попытаться из другого Linux-сервера вытянуть эти файлы и закинуть к себе.
В приложении прикрепил файлы из TF2 сервера, с которыми расширение и сервер стабильно работают.

P.S.: На L4D2 тоже не запускается под Пингвином, однако закидывание библиотек с другого сервера проблему не решает, а усложняет.
C-подобный:
Failed to open dedicated_srv.so (bin/dedicated_srv.so: undefined symbol: LoggingSystem_LogAssert)
 

Вложения

  • REST_in_Pawn.7z
    181 КБ · Просмотры: 268
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #3

Danyas

Участник
Сообщения
2,173
Реакции
1,072
PHP:
sm_discord_info
{"name": "HostName", "value": "wcs", "inline": true}
{"name": "Current Map", "value": "bhop_pinky", "inline": true}
{"name": "Players", "value": "**0** / **4**", "inline": true}
{"name": "Admins", "value": "**0**", "inline": true}
{"name": "Powered by", "value": "Discord Extended Library", "inline": false}
{"embeds": [{"title": "Server Information", "color": 65280, "fields": [{"name": "HostName", "value": "wcs", "inline": true}, {"name": "Current Map", "value": "bhop_pinky", "inline": true}, {"name": "Players", "value": "**0** / **4**", "inline": true}, {"name": "Admins", "value": "**0**", "inline": true}, {"name": "Powered by", "value": "Discord Extended Library", "inline": false}]}], "username": "Server Information", "avatar_url": "https://4.bp.blogspot.com/-5txFRC9W8g8/WCPO1rcV5kI/AAAAAAAAACw/GBb0uwIkZrUoEtgUs8Bp5J-1hG-iMl0UgCLcB/s1600/i.png"}
L 08/30/2017 - 14:41:21: [RIPEXT] HTTP request failed: Cert verify failed: BADCERT_NOT_TRUSTED

SM 1.8
Куда копать?
Сервер локальный, время правильное
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #6
Пользователь Kr1kuzya обновил ресурс REST in Pawn новой записью:

Попытка исправления проблем с сертификатами

Теперь корневой сертификат берётся из /addons/sourcemod/configs/ripext/ca-bundle.crt

Узнать больше об этом обновлении...
--- Добавлено позже ---
@Danyas, попробуйте обновить расширение.
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
Пользователь Kr1kuzya обновил ресурс REST in Pawn новой записью:

Попытка исправления проблем с сертификатами



Узнать больше об этом обновлении...
--- Добавлено позже ---
@Danyas, попробуйте обновить расширение.
Я хочу от тебя детей :dance: У меня заработало с арены :crazy:

4-5kMh27RD6GnpNYD3J1-Q.jpg
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #8
Пользователь Kr1kuzya обновил ресурс REST in Pawn новой записью:

Segmentation fault + Timeout

  • Исправлена редкая ошибка, при которой расширение могло "уронить" сервер с ошибкой Segmentation fault.
  • Добавлен функционал для установки и получения таймаута соединения.
    PHP:
        // Connection timeout in seconds.
        property int Timeout () {
            public native get();
            public native set(int iTimeout);
        }
P.S.: Это - неофициальный релиз. Автор, судя по всему, забил на своё расширение, т.к. уже месяц и более висит неразрешённым...

Узнать больше об этом обновлении...
--- Добавлено позже ---
Тестовая версия REST in Pawn.
Из изменений:
  • Обработка каллбеков слегка по другому (не создаётся форвард, а вызывается функция напрямую).
  • Скомпилировано под старые версии ОС. Привет Арене и DS-Host.
И хотя это считается версией 1.0.5, в sm plugins info пишет 1.0.4, ибо ещё не релиз.
 

Вложения

  • RiP_1.0.5-test.7z
    1.3 МБ · Просмотры: 326
Последнее редактирование:

Deviceggqq

Участник
Сообщения
74
Реакции
4
Не могу скачать дан ный файл с сайта, все другие скачиваются без проблем. Браузер опера (последняя версия).
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #10
Пользователь Kr1kuzya обновил ресурс REST in Pawn новой записью:

Больше возможностей плагинам

  • Добавлены нативы для изменения клиентского таймаута и следования заголовкам редиректа (3ХХ).
  • Добавлена "фича" получения ошибки запроса.
  • Теперь каллбек вызывается даже в случае ошибки, а само расширение ничего в логи не пишет.
  • IChangeableForward заменён: функции плагинов вызываются напрямую через IPluginFunction

Узнать больше об этом обновлении...
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #12
@hirowatch, да хрен его знает. По идее, если есть SM 1.9 и выше - должен, почему нет.
 

hirowatch

Живет ХЛмод`ом
Сообщения
2,722
Реакции
1,634
Игра CS:GO
C-подобный:
L 07/26/2018 - 01:29:12: [RIPEXT] Invalid function after processed request.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #14
Возможно, кто пропустил.
Автор вернулся снова к работе над расширением. Это замечательная новость, на самом деле.
Часть изменений из моего форка он перенёс к себе. Все основные изменения, которые я вносил, полностью поддерживаются официальной веткой.
Релиз версии 1.0.5 от самого автора произошёл 28-го августа.
upload_2018-9-8_13-43-50.png

Как только будет новая версия - мой форк будет забракован полностью, если будут действительно стоящие изменения, а официальная версия будет выложена здесь.
 

Kyctarnik

Участник
Сообщения
52
Реакции
5
Верно ли я понимаю, что данное расширение не поддерживает работу с сокетами?
 

x330122

Участник
Сообщения
357
Реакции
152
Кто-нибудь понимает как с этим работать ?
Я получаю JSON ответ уже с обычного апи по ссылке
Вот на скрине мне приходит JSON ок да.
Безымянный.png
Теперь сторона плагина.
Вообще ничего не происходит :dash3:
C-подобный:
new String:steamid[255];
GetClientAuthId(client, AuthIdType:AuthId_SteamID64, steamid, sizeof(steamid));
new String:result[255];
Format(result, sizeof(result), "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/", steamid);
httpClient = new HTTPClient(result);
httpClient.Get("?key=<скрыто>&steamids=76561198153344282", OnTodosReceived);

public void OnTodosReceived(HTTPResponse response, any value)
{
    if (response.Status != HTTPStatus_OK) {
        // Failed to retrieve todo
        return;
    }
    if (response.Data == null) {
        // Invalid JSON response
        return;
    }

    JSON_Object todos = view_as<JSON_Object>(response.Data);
    int todoId = todos.GetInt("gameid");
    PrintToChatAll("%i", todoId);
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #19
@Tetragromaton, Вы неправильно пытаетесь работать изначально с получаемым JSON-ответом.
Как и в любом другом языке, работая со структурой JSON, Вы должны проделать полный путь к нужному элементу в ответе:
PHP:
JSONObject hResponse = view_as<JSONObject>(response.Data); // этот объект за Вас закроет расширение
JSONObject hResponseRoot = view_as<JSONObject>(hResponse.Get("response")); // а все другие получаемые JSON-структуры из него придётся закрыть вручную.
JSONArray hResponsePlayers = view_as<JSONArray>(hResponseRoot.Get("players"));

// в нормальных ситуациях, перед получением элемента в массиве, Вы должны убедиться, что он не пуст.
if (hResponsePlayers.Length < 1) {
  // игрока нет, чистим память и прерываем исполнение.
  CloseHandle(hResponsePlayers);
  CloseHandle(hResponseRoot);
  return;
}

JSONObject hPlayer = view_as<JSONObject>(hResponsePlayers.Get(0));

// вот теперь можно получить несчастный gameid.
// следует учитывать, что его в JSON-ответе может и не быть.
// REST in Pawn, к сожалению, не предусматривает функционала проверки наличия ключа в структуре,
// потому опираемся на значения других всевозможных полей перед попыткой доступа к gameid.
int iGameID = hPlayer.GetInt("gameid");

// мы поработали. закрываем всё открытое.
CloseHandle(hPlayer);
CloseHandle(hResponsePlayers);
CloseHandle(hResponseRoot);
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #20
Сверху Снизу