public void OnRecvMsg(byte code, int channelID, long seqNo, long sentSvrTime, object msg) { UdpPackage udpPackage = UdpPackage.AllocPkg(code, channelID, seqNo, msg); if (!this.channelArr.ContainsKey(channelID)) { this.pkgMatrix.Add(channelID, new UdpPackage[500]); this.channelArr.Add(channelID, new ChannelInfo(channelID)); } int num = this.SeqnoIdx(seqNo); UdpPackage[] array = this.pkgMatrix[channelID]; UdpPackage udpPackage2 = array[num]; if (udpPackage2 != null) { UdpPackage.FreePkg(udpPackage2); } array[num] = udpPackage; udpPackage.code = code; udpPackage.seqNo = seqNo; udpPackage.sentTime = sentSvrTime; this.AlignSeqNo(channelID, seqNo); this.AddAckDict(channelID, seqNo, sentSvrTime); }
protected long GetNewestFirstSeqno(int channelID) { ChannelInfo channelInfo = this.channelArr[channelID]; long result; if (channelInfo != null) { UdpPackage[] array = this.pkgMatrix[channelInfo.channelID]; long num = channelInfo.firstSeqNo; for (num = channelInfo.firstSeqNo; num < channelInfo.lastSeqNo; num += 1L) { int num2 = this.SeqnoIdx(num); UdpPackage udpPackage = array[num2]; if (udpPackage == null || udpPackage.seqNo != num) { break; } } result = num; } else { result = 0L; } return(result); }
public static UdpPackage AllocPkg(byte _code, int _channelId, long _seqNo, object _msg) { UdpPackage udpPackage; if (UdpPackage.pkgPool.Count > 0) { udpPackage = UdpPackage.pkgPool[0]; UdpPackage.pkgPool.RemoveAt(0); } else { udpPackage = new UdpPackage(); } udpPackage.channelID = _channelId; udpPackage.seqNo = _seqNo; udpPackage.msg = _msg; udpPackage.bAck = false; return(udpPackage); }
public void TryProcessAvailablePkg() { Dictionary <int, ChannelInfo> .Enumerator enumerator = this.channelArr.GetEnumerator(); while (enumerator.MoveNext()) { KeyValuePair <int, ChannelInfo> current = enumerator.Current; ChannelInfo value = current.Value; if (!value.Empty()) { UdpPackage[] array = this.pkgMatrix[value.channelID]; for (long num = value.firstSeqNo; num < value.lastSeqNo; num += 1L) { int num2 = base.SeqnoIdx(num); UdpPackage udpPackage = array[num2]; if (udpPackage == null || udpPackage.seqNo != num) { break; } this.client.ExecUnrelivableCmd((PvpCode)udpPackage.code, udpPackage.msg); value.firstSeqNo += 1L; } } } }
public static void FreePkg(UdpPackage pkg) { UdpPackage.pkgPool.Add(pkg); }