public override void Recive(long now) { int c = metaData.Count; if (c == 0) { if (now - lastTime > TimeOut) { lastTime = now; envelope.Clear(); if (_connect) { Disconnect(); _connect = false; } } } else { lastTime = now; if (!_connect) { ConnectionOK(); } _connect = true; } for (int i = 0; i < c; i++) { var dat = metaData.Dequeue(); if (dat != null) { envelope.Unpack(dat, dat.Length, now); } } var queue = envelope.QueueBuf; c = queue.Count; try { for (int i = 0; i < c; i++) { var dat = queue.Dequeue(); if (dat != null) { Dispatch(dat.data, dat.type); } } } catch { } }
public override void Recive(long now) { int c = metaData.Count; byte[][] tmp = new byte[c][]; lock (metaData) for (int i = 0; i < c; i++) { tmp[i] = metaData.Dequeue(); } if (c == 0) { if (now - lastTime > TimeOut) { envelope.Clear(); Disconnect(); } } else { lastTime = now; if (!_connect) { ConnectionOK(); } _connect = true; } for (int i = 0; i < c; i++) { var list = envelope.Unpack(tmp[i], tmp[i].Length, now); try { if (list != null) { for (int j = 0; j < list.Count; j++) { var dat = list[j]; Dispatch(dat.data, dat.type); } } } catch { } } var ss = envelope.GetFailedData(now);//获取超时未反馈的数据 if (ss != null) { for (int i = 0; i < ss.Length; i++) { kcp.soc.SendTo(ss[i], endpPoint);//重新发送超时的数据 } } ss = envelope.ValidateData.ToArray(); envelope.ValidateData.Clear();//获取接收成功的数据 for (int i = 0; i < ss.Length; i++) { kcp.soc.SendTo(ss[i], endpPoint); //通知对方接收数据成功 } }