コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }