public override void Process(UDPBox udpBox, byte[] packageBytes, IPEndPoint ipEndPoint) { if (!mTemplate.Deserialize(packageBytes)) { return; } mTemplate.PingPong = mTemplate.PingPong == PingPongPackage.EPingPong.Ping ? PingPongPackage.EPingPong.Pong : PingPongPackage.EPingPong.Ping; udpBox.SendMessage(mTemplate.Serialize(), ipEndPoint); }
bool InterceptAndUpdateConnectState(UDPBox.MessageInterceptInfo messageInterceptInfo) { if (UDPBoxUtility.PackageIsBroken(messageInterceptInfo.Bytes, PackageHeadBytes)) { return(true); } var packageID = UDPBoxUtility.GetPackageID(messageInterceptInfo.Bytes, PackageHeadBytes); if (packageID == UDPBoxUtility.ESTABLISH_CONNECT_ID) { if (!mEstablishConnectPackage.Deserialize(messageInterceptInfo.Bytes)) { return(true); } var senderType = mEstablishConnectPackage.SenderType; var establishIPAddress = mEstablishConnectPackage.IpAddress; var packageBeginPort = mEstablishConnectPackage.BeginPort; var packageEndPort = mEstablishConnectPackage.EndPort; var isReceipt = mEstablishConnectPackage.IsReceipt; if (senderType == EstablishConnectPackage.ESenderType.Server) { MasterIPConnectInfo = new ConnectInfo() { IPEndPoint = new IPEndPoint(IPAddress.Parse(establishIPAddress), packageBeginPort), BeginPort = packageBeginPort, EndPort = packageEndPort, }; OnConnectedMaster?.Invoke(); if (!isReceipt) { mEstablishConnectPackage.SenderType = EstablishConnectPackage.ESenderType.Client; mEstablishConnectPackage.IpAddress = SelfIPAddress.ToString(); mEstablishConnectPackage.BeginPort = UdpBoxBeginPort; mEstablishConnectPackage.EndPort = UdpBoxEndPort; mEstablishConnectPackage.IsReceipt = true; SendUDPMessageToRandomPort(mEstablishConnectPackage.Serialize(), packageBeginPort, packageEndPort, IPAddress.Parse(establishIPAddress)); } } else if (senderType == EstablishConnectPackage.ESenderType.Client) { var connectInfo = new ConnectInfo() { IPEndPoint = new IPEndPoint(IPAddress.Parse(establishIPAddress), packageBeginPort), BeginPort = packageBeginPort, EndPort = packageEndPort, }; if (ClientIPConnectList.Count < MAX_CLIENT && !ClientIPConnectList.Find(m => m.IsPortAndIPContain(connectInfo.IPEndPoint)).Valid) { ClientIPConnectList.Add(connectInfo); OnConnectedClient?.Invoke(); } if (!isReceipt) { mEstablishConnectPackage.SenderType = EstablishConnectPackage.ESenderType.Server; mEstablishConnectPackage.IpAddress = SelfIPAddress.ToString(); mEstablishConnectPackage.BeginPort = UdpBoxBeginPort; mEstablishConnectPackage.EndPort = UdpBoxEndPort; mEstablishConnectPackage.IsReceipt = true; SendUDPMessageToRandomPort(mEstablishConnectPackage.Serialize(), packageBeginPort, packageEndPort, IPAddress.Parse(establishIPAddress)); } } } else if (packageID == UDPBoxUtility.PING_PONG_ID) { if (!mPingPongPackageTemplate.Deserialize(messageInterceptInfo.Bytes)) { return(true); } if (mPingPongPackageTemplate.PingPong == PingPongPackage.EPingPong.Pong) { return(true); } if (IsMaster) { for (int i = 0, iMax = ClientIPConnectList.Count; i < iMax; i++) { var clientEndPoint = ClientIPConnectList[i]; if (clientEndPoint.IsPortAndIPContain(messageInterceptInfo.IPEndPoint)) { ClientIPConnectList[i] = new ConnectInfo() { AliveTimer = 0f, IPEndPoint = clientEndPoint.IPEndPoint, BeginPort = clientEndPoint.BeginPort, EndPort = clientEndPoint.EndPort, IsClientEstablished = true }; } } } else { if (MasterIPConnectInfo.Valid && MasterIPConnectInfo.IsPortAndIPContain(messageInterceptInfo.IPEndPoint)) { MasterIPConnectInfo = new ConnectInfo() { AliveTimer = 0f, IPEndPoint = messageInterceptInfo.IPEndPoint, BeginPort = MasterIPConnectInfo.BeginPort, EndPort = MasterIPConnectInfo.EndPort, }; } } return(true); } return(false); }