public byte[] Receive(long sid, TimeSpan timeout) { byte[] buff = new byte[65536]; UDPBufferReader reader = GetBufferReader(sid); return(reader.Read(timeout)); }
async Task ReadLoopAsync() { await Task.Yield(); while (true) { //TODO: if not cached , and all stream closed , shutdown directly var data = await ReceiveAsync(); if (data == null) { Console.WriteLine("_udp.ReceiveAsync() return null ,Close()"); Close(); return; } long sid = BitConverter.ToInt64(data, 8); if (sid == -1) { Console.WriteLine("_udp.ReceiveAsync() return " + sid + ", " + UDPMeta.GetPackageType(data)); } UDPBufferReader reader = GetBufferReader(sid); reader.OnPost(data); } }
UDPBufferReader GetBufferReader(long sid) { UDPBufferReader reader; lock (buffmap) { if (_closed) { throw (new Exception("closed")); } if (!buffmap.TryGetValue(sid, out reader)) { buffmap[sid] = reader = new UDPBufferReader(); } } return(reader); }