Esempio n. 1
0
 public void Set(SHeader2 Obj_)
 {
     PacketType    = Obj_.PacketType;
     RecvPacketSeq = Obj_.RecvPacketSeq;
 }
Esempio n. 2
0
            public ERecvState RecvedBegin()
            {
                // For Header /////////////////////
                if (_RecvHeader == null)
                {
                    if (StreamRcv.Size < _HeaderSize)
                    {
                        return(ERecvState.NoData);
                    }

                    _RecvHeader = new SHeader();
                    _RecvHeader.Push(StreamRcv);
                }

                // For Body /////////////////////
                if (StreamRcv.Size < _RecvHeader.Size)
                {
                    return(ERecvState.NoData);
                }

                if (_RecvHeader.SendPacketSeq != (_RecvPacketSeq + 1))
                {
                    throw new Exception("PacketSeq Error " + _RecvHeader.SendPacketSeq.ToString() + ", " + (_RecvPacketSeq + 1).ToString());
                }

                _RecvPacketSeq = _RecvHeader.SendPacketSeq;
                _Crypto.Decode(StreamRcv.Data, StreamRcv.Head, _RecvHeader.Size, (0x1f3a49b72c8d5ef6 ^ (UInt64)_RecvHeader.Size ^ _RecvHeader.CheckSum ^ _RecvHeader.SendPacketSeq));

                if (_RecvHeader.CheckSum != core.CBase.GetCheckSum(StreamRcv.Data, StreamRcv.Head, _RecvHeader.Size))
                {
                    throw new Exception("CheckSum Error");
                }

                var OldStreamSize = StreamRcv.Size;
                var Header2       = new SHeader2();

                Header2.Push(StreamRcv);
                _RecvHeader.Size -= (OldStreamSize - StreamRcv.Size);
                StreamRcv.SaveState();

                switch (Header2.PacketType)
                {
                case EPacketType.Ping:
                    if (!_SendPong())
                    {
                        throw new Exception("_SendPong Fail");
                    }

                    return(ERecvState.PingPong);

                case EPacketType.Pong:
                    if (Header2.RecvPacketSeq == _PingPacketSeq)
                    {
                        _Latency  = DateTime.Now - _PingTime.Value;
                        _PingTime = null;
                    }
                    return(ERecvState.PingPong);

                case EPacketType.User:
                    break;

                default:
                    throw new Exception("Invalid Packet Type");
                }

                return(ERecvState.UserData);
            }
Esempio n. 3
0
 public SHeader2(SHeader2 Obj_)
 {
     PacketType    = Obj_.PacketType;
     RecvPacketSeq = Obj_.RecvPacketSeq;
 }