NodeJS / iOS — Как получить возвращаемое значение из двоичного файла после вызова его с помощью HTTP POST

У меня есть приложение для iOS (Objective C), и это приложение вызывает некоторые двоичные файлы C ++ с использованием NodeJ.

До сих пор я смог удаленно выполнить мою программу на C ++ с помощью нажатой кнопки в моем приложении, используя HTTP POST с библиотекой AFNetworking 3.

Приложение iOS -> Нажатие кнопки -> HTTP POST -> Вызов JS узла -> Вызов программы C ++ (последний возвращает true или false)

Теперь я хотел бы получить значение (True или False), возвращаемое моей программой. Как я могу это сделать ?

Я уже использовал метод GET для получения файла на моем сервере, но я не знаю, уместно ли использовать его для этого случая, т.е. получить возвращенный результат моей программы.

У вас есть идея, как мне этого добиться?

Поблагодарить

0

Решение

Чтобы иметь возможность получить значение, возвращаемое вашей программой на C ++, вам необходимо сначала получить возвращенный результат из NodeJS.

Предполагая, что вы используете ExpressJS как ваш HTTP-сервер, вы должны реализовать свою конечную точку примерно так:

var execFile = require('child_process').execFile;
var express = require('express');
var app = express();

app.post('/endpoint', function (req, res) {
const child = execFile('my_exe', (error, stdout, stderr) => {
if (error) {
res.status(500).send('False')
} else {

if (stdout === 'True') {
res.status(200).send('True')
} else {
res.status(500).send('False')
}
}
});
});

app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});

Если вызов выполнен успешно, сервер ответит True со статусом 200, и если он потерпит неудачу, он вернется Falseсо статусом False,

Теперь при вызове на сервер из приложения iOS вы можете использовать Alamofire, например:

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

NSURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:@"someURL" parameters:@{} error:nil];

NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
/* Network error*/
NSLog(@"Error: %@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
switch (httpResponse.statusCode) {
case 200:
NSLog(@"Success")
/* Code in case of success == Server returned True  */
default:
/* Code in case of no success  == Server returned False */
NSLog(@"Error");
}

}
}];
[dataTask resume];
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector