REST in Pawn

REST in Pawn 1.3.1

Kruzya

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

Kruzya

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

Обновление до 1.2.0

  • Улучшена производительность (спасибо Gunslinger)
  • Добавлена возможность "итерироваться" (проходить) по всем ключам в JSON объекте
  • Добавлена возможность загружать (загружать с удалённого сервера) и выгружать (загружать на удалённый сервер) файлы.

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

MakSoS

Участник
Сообщения
3
Реакции
0
Недавно поставил себе телеграм бота, он попросил это расширение, но пишет Telegram_Core.smx ([Telegram] Core (LiteServers LLP)): Required extension "REST in Pawn" file("rip.ext") not running, переустанавливал и т.д, не работает
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #45
Что непонятного в этих словах?
Расширение - не запустилось. Почему? Ну, мы хз, Вам нужно смотреть в sm exts list, но скорее всего:
  • Или Сурсмод старый (нужен 1.10; если невыполнимо - возьмите версию ниже 1.1.0 с вкладки "Обновления")
  • Или в системе библиотек не хватает для работы
 

MakSoS

Участник
Сообщения
3
Реакции
0
Что непонятного в этих словах?
Расширение - не запустилось. Почему? Ну, мы хз, Вам нужно смотреть в sm exts list, но скорее всего:
  • Или Сурсмод старый (нужен 1.10; если невыполнимо - возьмите версию ниже 1.1.0 с вкладки "Обновления")
  • Или в системе библиотек не хватает для работы
Соурсмод 10, библиотек всмысле не хватает, все поставил куда надо при sm exts list пишет: [11] <FAILED> file "rip.ext.dll": �� ������ ��������� ������.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #47
Покажите содержимое папки extensions и configs.
 

VeNoM`1K =))

Живи и ошибайся. В этом жизнь.
Сообщения
701
Реакции
267
SourceMod 1.11
Metamod 1.11
Когда ставлю расширение сервер не запускается.
На 1.10 все работает прекрасно
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #49
Ещё бы игру узнать с ОС, и можно жить.
 

Kruzya

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

Обновление до 1.2.1

  • Добавлена поддержка int64 (спасибо @gunslinger23)
  • Исправлена ошибка, когда деструкторы HTTP контекста не вызывались

Узнать больше об этом обновлении...
----
Kruzya обновил(а) ресурс REST in Pawn новой записью:

Обновление до 1.2.2

  • Добавлены 64-разрядные сборки и macOS
  • Добавлены флаги декода JSON
  • Добавлена возможность ограничивать исходящую и входящую скорость при работе с ресурсами (спасибо @Kxnrl)
  • Установлен стандартный User-Agent для клиентов RiP (sm-ripext/ВЕРСИЯ)
  • Обновлено перечисление HTTPStatus
  • Обновлена документация

Узнать больше об этом обновлении...
 
Последнее редактирование модератором:

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
xm... заметил фичу в поведении json при конвертации: JSON->string->JSON.

C-подобный:
void getResponse(HTTPResponse response, any value, const char[] error) {
    if(response.Status != HTTPStatus_OK || error[0]) {
        LogError("getResponse(%d:%d): %s", value, response.Status, error);
        return;
    }

    if(!response.Data) {
        LogMessage("getResponse(): data is null");
        return;
    }
    
    // Представление в строке
    char szJson[2048];
    response.Data.ToString(szJson, sizeof(szJson));
    LogMessage(szJson);
    
    // Возвращаем из строки наш объект
    g_objJSON = JSONObject.FromString(szJson);
    
    // Снова приводим к строке
    view_as<JSON>(g_objJSON).ToString(szJson, sizeof(szJson));
    LogMessage("L: %s", szJson);
}

debug:
// Ловим кринж
[sometest.smx]
    {"somekey": 2, "somekey2": 4}
[sometest.smx]
    L: {"somekey": 2.0, "somekey2": 4.0}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #53
Похоже на какой-то баг. Можно попробовать на Гитхабе зарепортить.
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
Здравствуйте!

А есть какой-то способ отдебажить расширение или посмотреть логи?

У меня вот такой код:
C-подобный:
#include <sourcemod>
#include <ripext>

public void OnPluginStart()
{
    RegAdminCmd("sm_maps", CmdMapList, ADMFLAG_ROOT, "");
}

public Action CmdMapList(int client, int args)
{
    HTTPClient httpClient = new HTTPClient("https://www.myarena.ru/api.php");
 
    JSONObject todo = new JSONObject();
    todo.SetString("query", "getmaps");
    todo.SetString("token", "3b5cda7f1b917108a4631f615cdc58d3");

    httpClient.Post("todos", todo, OnTodoCreated);
    delete todo;
 
    return Plugin_Handled;
}

public void OnTodoCreated(HTTPResponse response, any value)
{
    if (response.Status != HTTPStatus_Created) {
        PrintToServer("Failed to create todo");
        return;
    }
    if (response.Data == null) {
        PrintToServer("Invalid JSON response");
        return;
    }

    JSONObject todo = view_as<JSONObject>(response.Data);
    char sStatus[32];
    char sMsg[64];
    todo.GetString("status", sStatus, sizeof(sStatus));
    todo.GetString("maps", sMsg, sizeof(sMsg));
 
    PrintToServer("Created todo with status: %s, msg: %s", sStatus, sMsg);
}

Прямая ссылка: https://www.myarena.ru/api.php?query=getmaps&token=3b5cda7f1b917108a4631f615cdc58d3
Пару лет назад работал нормально.
А сейчас вызываешь команду, и почти сразу выдает "Failed to create todo".

Проверял на двух выделенных серверах Linux, в т.ч. на MyArena (игра Left 4 dead 1 и 2).

Также проверял на CS:GO Local Dedicated Server под Windows. Там чуть иначе - "Failed to create todo" через 30 сек., но на винде то скорее из-за файрвола.
А вот почему на выделенном не работает?

PS. Если что токен в скрипте реальный. Еще 5 дней будет работать.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #55
@Dragokas, попробуйте в конструктор HTTP-клиента указать https://www.myarena.ru (без слеша на конце), а в вызове метода Post указывать в качестве ремоут ссылки - api.php (так же без слеша в начале).
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
Без изменений.

C-подобный:
#include <sourcemod>
#include <ripext>

public void OnPluginStart()
{
    RegAdminCmd("sm_maps", CmdMapList, ADMFLAG_ROOT, "");
}

public Action CmdMapList(int client, int args)
{
    HTTPClient httpClient = new HTTPClient("https://www.myarena.ru");
    
    JSONObject todo = new JSONObject();
    todo.SetString("query", "getmaps");
    todo.SetString("token", "3b5cda7f1b917108a4631f615cdc58d3");

    httpClient.Post("api.php", todo, OnTodoCreated);
    delete todo;
    
    return Plugin_Handled;
}

public void OnTodoCreated(HTTPResponse response, any value)
{
    if (response.Status != HTTPStatus_Created) {
        PrintToServer("Failed to create todo");
        return;
    }
    if (response.Data == null) {
        PrintToServer("Invalid JSON response");
        return;
    }

    JSONObject todo = view_as<JSONObject>(response.Data);
    char sStatus[32];
    char sMsg[64];
    todo.GetString("status", sStatus, sizeof(sStatus));
    todo.GetString("maps", sMsg, sizeof(sMsg));
    
    PrintToServer("Created todo with status: %s, msg: %s", sStatus, sMsg);
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #57
У каллбека есть третий опциональный параметр: const char[] szError. Туда передаётся текст ошибки от cURL-драйвера. Посмотрите, что туда записывается.
 

Young <

Now, finally free
Сообщения
1,263
Реакции
505
Сервер уходит в краш.
C-подобный:
***** OUT OF MEMORY! attempted allocation size: xxx ****

Начал замечать, когда установил AC:Advert (он использует rip). Он подробных логов не давал, просто писал
C-подобный:
[AC:Adv] OnAuthReceived: Failed to retrieve. (0)
По-началу, винил AC:Advert. Ну думаю бог с ним, автор в ближайшее время пофиксит. Меня и игроков это сильно не беспокоило, тк краш происходил поздно вечером или рано утром.

Прошло время, за этот период у меня появился плагин, который взаимодействует с API на сайте (тоже использует rip). Крашнуло при мне, пошел смотреть лог
C-подобный:
Exception reported: Invalid JSON in line -1, column -1: wrong arguments
Call stack trace:
   [0] HTTPResponse.Data.get
   [1] Линия, C:\Users\...\MyPlugin.sp::OnAuthReceived //(каллбэк)

[AC:Adv] OnAuthReceived: Failed to retrieve. (0)
***** OUT OF MEMORY! attempted allocation size: xxx ****

Invalid JSON in line -1, column -1: wrong arguments

Что может быть не так?


REST in Pawn (1.2.2): Provides HTTP and JSON natives for plugins
ОС: Linux
 

Kruzya

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