public void ProcessPackage(byte[] bytes, IPEndPoint ipEndPoint) { Logger.Log("Process Package Begin: " + bytes.Length + " ipEndPoint: " + ipEndPoint, EUDPBoxLogType.Log); if (StatisticsTotalPackageCount == uint.MaxValue) { StatisticsBadPackageCount = 0; StatisticsTotalPackageCount = 0; } StatisticsTotalPackageCount++; if (UDPBoxUtility.PackageIsBroken(bytes, mPackageHeadBytes)) { StatisticsBadPackageCount++; Logger.Log("Package Is Broken!", EUDPBoxLogType.Warning); return; } var flag = false; for (int i = 0, iMax = mMessageInterceptList.Count; i < iMax; i++) { var item = mMessageInterceptList[i]; flag = item(new MessageInterceptInfo() { Bytes = bytes, IPEndPoint = ipEndPoint }); if (flag) { Logger.Log("Message Intercepted: " + item + " bytes: " + bytes.Length + " ipEndPoint: " + ipEndPoint, EUDPBoxLogType.Log); } } if (flag) { return; } var targetHandler = default(HandlerBase); for (int i = 0, iMax = mHandlerList.Count; i < iMax; i++) { var item = mHandlerList[i]; if (UDPBoxUtility.ComparePackageID(bytes, mPackageHeadBytes, item.ProcessableID)) { targetHandler = item; break; } } Logger.Log("Process Package: " + targetHandler, EUDPBoxLogType.Log); if (targetHandler != null) { targetHandler.Process(this, bytes, ipEndPoint); } }
public static UDPBoxBroadcast GenerateStandardUDPBoxBroadcastAndSetup( UDPBox_UDPClient udpClient , int broadcastSendPort , string netPrefixIP , UDPBoxContainer container) { var broadcast = new UDPBoxBroadcast(udpClient, broadcastSendPort); var broadcastPackage = new BroadcastPackage(container.PackageHeadBytes); if (container.IsMaster) { broadcast.ListenBroadcast((bytes, endPoint) => { if (UDPBoxUtility.PackageIsBroken(bytes, container.PackageHeadBytes)) { return; } if (!UDPBoxUtility.ComparePackageID(bytes, container.PackageHeadBytes, broadcastPackage.ID)) { return; } if (!broadcastPackage.Deserialize(bytes)) { return; } var ipEndPoint = new IPEndPoint(IPAddress.Parse(broadcastPackage.IpAddress), broadcastPackage.BeginPort); if (ipEndPoint.Address.Equals(container.SelfIPAddress) && ipEndPoint.Port < container.UdpBoxEndPort && ipEndPoint.Port >= container.UdpBoxBeginPort) { return; } //Avoid self connect to the self. var establishConnectPackage = new EstablishConnectPackage(container.PackageHeadBytes); establishConnectPackage.SenderType = EstablishConnectPackage.ESenderType.Server; establishConnectPackage.IpAddress = container.SelfIPAddress.ToString(); establishConnectPackage.BeginPort = container.UdpBoxBeginPort; establishConnectPackage.EndPort = container.UdpBoxEndPort; establishConnectPackage.IsReceipt = false; container.SendUDPMessage(establishConnectPackage.Serialize(), ipEndPoint); //Server notify to client. }); } else { broadcastPackage.IpAddress = container.SelfIPAddress.ToString(); broadcastPackage.BeginPort = container.UdpBoxBeginPort; broadcastPackage.EndPort = container.UdpBoxEndPort; broadcast.StartBroadcast(broadcastPackage.Serialize(), netPrefixIP); //Client through broadcast notify to server. } return(broadcast); }