public async Task <TuioState> Listen() { do { var res = await _listener.ReceiveAsync(); if (res.Buffer == null || res.Buffer.Length == 0) { continue; } var packet = OSCPacket.Unpack(res.Buffer); if (packet != null) { if (packet.IsBundle()) { packet.Values.ForEach(x => _tuioClient.ProcessMessage((OSCMessage)x)); } else { _tuioClient.ProcessMessage((OSCMessage)packet); } var tuioObjs = _tuioClient.getTuioObjects(); return(new TuioState { Objects = tuioObjs .Distinct(new CompareTuioObject()) .Where(x => x.TuioState != TuioContainer.TUIO_REMOVED) .ToDictionary(x => x.SymbolID, x => x) }); } } while (true); }