void OnEnable() { var udpClients = UDPBoxFactory.GeterateUdpClientsArray(1235, 1236); mUDPBoxConnect = new UDPBox(udpClients, UDPBoxUtility.DefaultHead); mUDPBoxConnect.Start(); mUDPBoxBroadcast = new UDPBoxBroadcast(udpClients[0], 1234); }
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); }
public void Start(bool isMaster) { IsMaster = isMaster; if (mUseInternalBroadcastLogic) { mBroadcastUdpClient = UDPBoxFactory.GeterateUdpClient(BroadcastListenPort); mUDPBoxBroadcast = UDPBoxFactory.GenerateStandardUDPBoxBroadcastAndSetup(mBroadcastUdpClient, BroadcastSendPort, BroadcastNetPrefixIP, this); } UDPBox.RegistMessageIntercept(InterceptAndUpdateConnectState); UDPBox.RegistWorkThreadOperate(RefreshConnectStateInWorkThread); UDPBox.Start(); }