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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 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;
             }
         }
     }
 }
Esempio n. 5
0
 public static void FreePkg(UdpPackage pkg)
 {
     UdpPackage.pkgPool.Add(pkg);
 }