public void Set(SHeaderSc Obj_) { Proto = Obj_.Proto; }
void _RecvCallback(CKey Key_, CStream Stream_) { var Proto = new SHeaderSc(); Stream_.Pop(Proto); var itPeerNet = _PeersNet.Get((Int32)Key_.PeerNum); if (!itPeerNet.Data.ExtKey) { return; } var itPeerExt = _PeersExt.Get((Int32)itPeerNet.Data.ExtKey.PeerNum); if (!itPeerExt) { return; } if (itPeerExt.Data.itPeerWillExpire) // Not Linked Peer { switch (Proto.Proto) { case EProtoSc.Link: _RecvLink(itPeerNet, itPeerExt, Stream_); break; case EProtoSc.ReLink: _RecvReLink(Key_, itPeerNet, itPeerExt, Stream_); break; case EProtoSc.UnLink: _RecvUnLink(Key_, Stream_); break; default: _Net.Close(Key_.PeerNum); break; } } else // Linked Peer { switch (Proto.Proto) { case EProtoSc.UnLink: _RecvUnLink(Key_, Stream_); break; case EProtoSc.Ack: _RecvAck(itPeerExt); break; case EProtoSc.ReSend: Stream_.Pop(sizeof(Int32)); goto case EProtoSc.UserProto; case EProtoSc.UserProto: _RecvUserProto(itPeerExt, Stream_); break; default: _UnLink(itPeerExt, ENetRet.InvalidPacket); // 인증된 클라이언트가 잘못된 프로토콜을 보내면 접속해제 절차 없이 삭제 _Net.Close(Key_.PeerNum); break; } } }
public SHeaderSc(SHeaderSc Obj_) { Proto = Obj_.Proto; }