Могу ли я вызвать какую-либо функцию дротика внутри контроллера отклика акведука?
Мне нужно вызвать функцию dart, сделать что-то и вернуть данные обратно в контроллер акведука. Итак, я могу вызвать любую функцию дротика в контроллере ответа акведука? Если да, то как?
class NtmsApiController extends Controller {
@override
Future<RequestOrResponse> handle(Request request) async {
try {
if (request.path.remainingPath != null) {
_requestValue = request.path.remainingPath;
…
… can I go from here to dart function and get data back???? If yes, how?
ОБНОВЛЕНИЕ КОДА: у меня есть глобальная переменная, и она печатает в ноль. Как только сокет получает данные, void _printResponse(String _response) печатает данные, и оттуда я присваиваю данные глобальной переменной. Но в дескрипторе Future данные становятся пустыми, поэтому я не могу вернуть их как объект ответа. Любая идея?
@override
Future<RequestOrResponse> handle(Request request) async {
_stopWatch = Stopwatch() //Global
..start();
_response = ""; // Global
if (request.path.remainingPath != null) {
final _requestValue = request.path.remainingPath;
await _getData(_requestValue);
}
print(_secureResponse); // It prints null, _secureResponse is Global variable
return Response.ok("$_secureResponse")
..contentType = ContentType.json;
}
//TODO: GET DATA FROM CSBINS
Future<Null> _getData(String _request) async {
await Socket.connect("192.168.22.120", 3000).then((Socket sock) {
_socket = sock;
_socket.write('$_request\r\n');
_socket.listen (dataHandler,
onError: errorHandler,
onDone: doneHandler,
cancelOnError: true);
}).catchError((AsyncError e) {
_response = "Server_Error";
});
}
void dataHandler(data) {
final List<int> byteArray = data;
_response = String.fromCharCodes(byteArray).trim();
}
void errorHandler(error, StackTrace trace) {
_response = "Server_Error";
}
void doneHandler() {
_socket.destroy();
}
void _printResponse(String _response) {
// prints succefully ***************************
print("$_response ... (${_stopWatch.elapsedMilliseconds} ms)");
_secureResponse = _response;
_stopWatch..stop();
if (_stopWatch.isRunning == false) {
_socket.flush();
_socket.close();
print("Socket Closed.");
}
}