1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/chinaroad-4pyun-api

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

msg);

/**

  • Настройка функции обратного вызова события */ void __stdcall PYunAPIHookEvent(event_callback p_callback);
| Опция определения                         | Значение   | Описание      |
|:---------------------------- |:---:| ------- |
| PYUNAPI_EVENT_ACCESS_GRANTED | 1   | Успешное получение авторизации API |
| PYUNAPI_EVENT_ACCESS_DENIED  | -1  | Ошибка авторизации API |
| PYUNAPI_EVENT_CHANNEL_ERROR  | -2  | Исключение TCP-соединения |
| PYUNAPI_EVENT_CHANNEL_CLOSED | -3  | Закрытие TCP-соединения |

**Пример**

```c
/**
 * Реализация функции обратного вызова событий API
 */
void __stdcall PYunAPIEventCallback(int event_type, char *msg){  
    switch (event_type) {
        case PYUNAPI_EVENT_ACCESS_GRANTED:
            printf("\nДоступ предоставлен\n\n");
            break;
        case PYUNAPI_EVENT_ACCESS_DENIED:
            printf("\nОтказано в доступе %s\n\n", msg == NULL ? "" : msg);
            break;
        case PYUNAPI_EVENT_CHANNEL_ERROR:
            printf("\nОшибка канала %s\n\n", msg == NULL ? "" : msg);
            break;
        case PYUNAPI_EVENT_CHANNEL_CLOSED:
            printf("\nКанал закрыт %s\n\n", msg == NULL ? "" : msg);
            break;
    }
    return;
}

// Настройка функции перехвата событий
PYunAPIHookEvent(PYunAPIEventCallback);

3. Перехват запросов обратного вызова

С помощью этого метода после перехвата запрос больше не будет инициировать обратный вызов функции, и все запросы на анализ и возврат данных будут обрабатываться разработчиком самостоятельно. Для успешного выполнения запроса необходимо вызвать PYunAPIReply для возврата данных.

/**
 * Функция обратного вызова запроса
 * Параметры:
 * seqno   номер запроса, должен быть возвращён без изменений
 * payload данные запроса в формате JSON
*
 * Возвращаемое значение:
 * 1 запрос принят
 * 0 запрос не принят
 */
typedef int (__stdcall *request_callback)(int seqno, char *payload);

/**
 * Установка функции обратного вызова запроса
 */
void __stdcall PYunAPIHookRequest(request_callback p_callback);

Пример

int __stdcall PYunAPIRequestCallback(int seqno, char *payload) {
    // В зависимости от сервиса в JSON определить, обрабатывать ли запрос, если нет обработки, установить ret равным -1.
    int ret = 0;
    printf("RECV: %d, %s\n", seqno, payload);
    char *reply = "{\"service\":\"service.parking.detail\",\"version\":\"1.0\",\"charset\":\"UTF-8\",\"result_code\":\"1001\",\"message\":\"Обработка ОК\",\"sign\":\"722059C5CC1B3FF5CDF8F8A4CF3B31CC\"}";
    // При ответе необходимо вернуть seqno без изменений!
    PYunAPIReply(seqno, reply);
    return ret;
}

// Установка функции обратного вызова запроса
PYunAPIHookRequest(PYunAPIRequestCallback);

4. Отправка ответа на запрос

/**
 * Отправка ответа на запрос, потокобезопасна, этот метод автоматически вычисляет подпись для отправляемых данных payload.
 * Параметры:
 * seqno номер запроса
 * payload ответные данные в формате JSON
 *
 * Возвращаемое значение:
 * 0 отправка прошла успешно
 * -1 отправка не удалась
 */
int __stdcall PYunAPIReply(int seqno, char *payload);

5. Инициализация API

После завершения всех настроек необходимо вызвать этот метод для завершения инициализации API. На нижнем уровне будет запущен поток и установлено длительное TCP-соединение с облаком, состояние которого можно отслеживать через функцию обратного вызова, настроенную с помощью PYunAPIHookEvent.

Примечание: После каждой повторной настройки необходимо выполнить PYunAPIDestory, а затем снова вызвать PYunAPIStart для завершения инициализации.

/**
 * Инициализировать API
 * Параметры:
 * host доменное имя платформы облака
 * port порт платформы облака
 * type тип клиента
 * uuid уникальный идентификатор клиента, только один экземпляр может работать с одним UUID
 * sign_mac ключ для вычисления подписи при обмене данными с облачной платформой
 *
 * Возвращаемое значение:
 * 0 инициализация завершена
 */
int __stdcall PYunAPIStart(char *host, unsigned int port, char *type, char *uuid, char *sign_mac);

Пример

int idle_time = 1000 * 30;
int auth_time = 1000 * 30;
int dev_mode = 0;
char *host = "sandbox.gate.4pyun.com";
unsigned int port = 8661;
char *type = "public:parking:agent";
char *uuid = "49f0cc52-e8c7-41e3-b54d-af666b8cc11a";
char *sign_mac = "22D42dSdae2";

// Получение уровня API SDK, обязательно выполнить этот шаг
int sdk_level = PYunAPILevel();
if (sdk_level < 10) {
    // Слишком низкая версия SDK
    return -1;
}

// 1.1 Настройка функции обратного вызова перехвата событий
PYunAPIHookEvent(PYunAPIEventCallback);
// 1.2 Перехват функции обратного вызова запросов
PYunAPIHookRequest(PYunAPIRequestCallback);

// 1.3 Настройка параметров
// [Обязательно] Установить кодировку текущего проекта, по умолчанию используется UTF-8
PYunAPISetOpt(PYUNAPI_OPT_CHARSET,   (void *)"GBK");
// [Необязательно] Установить код производителя, используется для различения производителей устройств, связаться с PCloud для получения!
PYunAPISetOpt(PYUNAPI_OPT_VENDOR,   (void *)"PYUN");
// [Необязательно] Активировать режим разработчика, по умолчанию в текущем рабочем каталоге создаётся файл журнала
PYunAPISetOpt(PYUNAPI_OPT_DEV_MODE,   (void *)&dev_mode);
// [Необязательно] Установить интервал времени ожидания, мс
PYunAPISetOpt(PYUNAPI_OPT_IDLE_TIME, (void *)&idle_time);
// [Необязательно] Установить время ожидания авторизации, мс
PYunAPISetOpt(PYUNAPI_OPT_AUTH_TIME, (void *)&auth_time);
// [Необязательно] Установить файл журнала
PYunAPISetOpt(PYUNAPI_OPT_LOGGER, (void *)"C:/4pyun-api.log");

// 2. Запустить API, нижний уровень запустит поток и установит длительное TCP-соединение с облачной платформой
PYunAPIStart(host, port, type, uuid, sign_mac);
// 3. Уничтожить API, разорвать длительное TCP-соединение
getchar();
PYunAPIDestroy();
getchar();

6. Уничтожение API

Этот метод можно использовать для активного закрытия TCP-соединения с облачной платформой и освобождения ресурсов при завершении программы.

/**
 * Уничтожить API, активно закрыть TCP-соединение с облачной платформой и освободить ресурсы.
 */
void __stdcall PYunAPIDestroy();

7. Получение версии SDK и уровня API

Верхние уровни приложения могут использовать этот метод для получения текущей версии SDK.

/**
 * Получить текущую версию SDK
 */
char* __stdcall PYunAPIVersion();
/**
 * Получение текущего уровня API SDK, чем новее версия, тем больше значение
 */
char* __stdcall PYunAPILevel();

8. Копирование памяти

В этом тексте не удалось найти информацию о копировании памяти.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
C
LGPL-2.1
Отмена

Обновления (4)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/chinaroad-4pyun-api.git
git@api.gitlife.ru:oschina-mirror/chinaroad-4pyun-api.git
oschina-mirror
chinaroad-4pyun-api
chinaroad-4pyun-api
main