在dart中的.listen()中保存来电者身份

时间:2016-08-23 16:51:00

标签: dart

我正在制作几个将由单个匿名函数处理的websockets:

handleWebSocketCreation(WebSocket socket) {
  connections[++current_connections] = socket;
  socket.listen((String s) => print("Client $current_connections sent: $s"), onDone: () {
    print('Client $current_connections disconnected');
  });
}

这显然不能按预期工作(它将继续打印 current_connections 值越大,无论套接字发送的是什么,而不是相同的实际ID)

可以像这样输出的任何解决方法?:

  

客户3发送:你好

     

客户1已发送:嗨,3!

     

客户端2已断开连接

     

等...

2 个答案:

答案 0 :(得分:3)

您需要在变量中捕获current_connection的值,以便稍后使用它。

handleWebSocketCreation(WebSocket socket) {
  int id = ++currentConnections;
  connections[id] = socket;
  socket.listen((String s) { 
    print("Client $id sent: $s"); 
  }, onDone: () {
    print('Client $id disconnected');
  });
}

答案 1 :(得分:0)

绝对不会是下一个:

socket.listen((String s){
  int id = connections.indexOf(socket);
  print("Client $id sent: $s");
})

然而,稍后会遇到很多复杂问题,我希望能够在.listen()

中进行赋值时使静态成为 current_connections 变量的当前值的解决方案。