等待客户端websocket的响应

时间:2014-04-17 19:49:53

标签: websocket dart

我有一个表单,我会通过Websocket发送数据。

我希望收到回复,然后继续。

@CustomTag('register-user-sign')
class RegisterUserModule extends PolymerElement {
    @observable String email = "";
    @observable String pass = "";

    RegisterUserModule.created() : super.created();

    void    send() {
        WebSocket   ws;
        var         index;

        index = new Store('demo', 'infos');
        index.open()
        .then((_) => ws = index.getByKey('wsocket'))
        .whenComplete((_) {
            if (ws != null && ws.readyState == WebSocket.OPEN) {
                ws.send({'email': email, 'pass': pass});
                // wait here the response ?
            }

        });

    }
}

有可能吗?还是有其他解决方案?

2 个答案:

答案 0 :(得分:1)

WebSocket.send是非阻塞的,您应该使用onMessage方法并处理Stream以接收您的响应

ws.send({'email': email, 'pass': pass});
ws.onMessage.listen((e) {
  handleMessage(e.data);
});

答案 1 :(得分:1)

我在Completer课程中找到了另一个解决方案。

Voilà:

Completer  _completer;

Future<String>  send(Map data) {
    _ws.send(JSON.encode(data));
    _completer = new Completer();
    return  _completer.future;
}

void    _get_data() {
    _ws.onMessage.listen((MessageEvent data) {
        _completer.complete(data.data);
    });
}