msg);
/**
| Опция определения | Значение | Описание |
|:---------------------------- |:---:| ------- |
| 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);
С помощью этого метода после перехвата запрос больше не будет инициировать обратный вызов функции, и все запросы на анализ и возврат данных будут обрабатываться разработчиком самостоятельно. Для успешного выполнения запроса необходимо вызвать 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);
/**
* Отправка ответа на запрос, потокобезопасна, этот метод автоматически вычисляет подпись для отправляемых данных payload.
* Параметры:
* seqno номер запроса
* payload ответные данные в формате JSON
*
* Возвращаемое значение:
* 0 отправка прошла успешно
* -1 отправка не удалась
*/
int __stdcall PYunAPIReply(int seqno, char *payload);
После завершения всех настроек необходимо вызвать этот метод для завершения инициализации 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();
Этот метод можно использовать для активного закрытия TCP-соединения с облачной платформой и освобождения ресурсов при завершении программы.
/**
* Уничтожить API, активно закрыть TCP-соединение с облачной платформой и освободить ресурсы.
*/
void __stdcall PYunAPIDestroy();
Верхние уровни приложения могут использовать этот метод для получения текущей версии SDK.
/**
* Получить текущую версию SDK
*/
char* __stdcall PYunAPIVersion();
/**
* Получение текущего уровня API SDK, чем новее версия, тем больше значение
*/
char* __stdcall PYunAPILevel();
В этом тексте не удалось найти информацию о копировании памяти.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )