Могу ли я вызвать какую-либо функцию дротика внутри контроллера отклика акведука? - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно вызвать функцию 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.");
  }
}
...