public void Set(SHeader2 Obj_) { PacketType = Obj_.PacketType; RecvPacketSeq = Obj_.RecvPacketSeq; }
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); }
public SHeader2(SHeader2 Obj_) { PacketType = Obj_.PacketType; RecvPacketSeq = Obj_.RecvPacketSeq; }