Проблема с путем в моей программе на Python на Mac OS?

Прежде всего, вы не знаете точно, что весь ответ на вашу отправку поступает в один пакет, поэтому у вас может не быть всего ответа. Предположим, что вы это сделаете (иначе вам нужно будет сделать больше обработки в dataHandler, чтобы собрать ответ до его доставки).

Канонический способ разрешить обратный вызов, когда что-то произошло в будущее, должно вернуть Future. Вам также понадобится способ завершить это будущее, поэтому вы создадите Completer и сохраните его, пока он вам не понадобится. Поскольку вы, вероятно, можете делать больше сообщений, вам нужно помнить более одного дополнения. Итак, в целом, я бы написал это как:

Queue<Completer<String>> _queue = Queue();

Future<String> send(String cmd){
    socket.writeln(cmd);
    var completer = new Completer<String>();
    _queue.add(completer);
    return completer.future;
}

void _dataHandler(data){
    var reply = new String.fromCharCodes(data).trim();
    // Add some sanity checking here. Make sure you have the entire response before
    // executing the code below.
    _queue.removeFirst().complete(reply);
}

(я сделал _dataHandler приватным, потому что вы, вероятно, не хотите, чтобы пользователь, вызывающий send, мог позвонить dataHandler). [/ д2]

0
задан alexander 18 January 2019 в 18:43
поделиться