Пример #1
0
        void WorkThreadOperateLoop()
        {
            var deltaTime = UDPBoxUtility.GetDeltaTime(mLastWorkThreadTime);

            if (mRefreshDelayTimer <= 0)
            {
                if (mUDPBoxContainer.IsMaster)
                {
                    UpdateUserInfoList();
                }
                else
                {
                    if (mUDPBoxContainer.State == UDPBoxContainer.EState.HasServer)
                    {
                        mTemplate.Op = UserNameListPackage.EOperate.FetchAll;
                        mUDPBoxContainer.SendUDPMessage(mTemplate.Serialize(), mUDPBoxContainer.MasterIPConnectInfo.IPEndPoint);
                    }
                }

                mRefreshDelayTimer = REFRESH_DELAY;
            }
            else
            {
                mRefreshDelayTimer -= deltaTime;
            }

            mLastWorkThreadTime = DateTime.Now.Ticks;
        }
Пример #2
0
        void ToHallWaitMode()
        {
            mContainer.Release();
            OnUdpBoxContainerRelease?.Invoke();

            mRoomName = "";

            mCurrentState = EState.HallWait;

            mBroadcast.ReleaseThread();
            mBroadcast.ResetState();

            mBroadcast.ListenBroadcast((bytes, endPoint) =>
            {
                if (UDPBoxUtility.PackageIsBroken(bytes, mContainer.PackageHeadBytes))
                {
                    return;
                }
                if (!UDPBoxUtility.ComparePackageID(bytes, mContainer.PackageHeadBytes, mHallPackage.ID))
                {
                    return;
                }

                if (!mHallPackage.Deserialize(bytes))
                {
                    return;
                }

                var ipEndPoint = new IPEndPoint(IPAddress.Parse(mHallPackage.IPAddress), mHallPackage.BeginPort);
                if (ipEndPoint.Address.Equals(mContainer.SelfIPAddress) &&
                    ipEndPoint.Port < mContainer.UdpBoxEndPort && ipEndPoint.Port >= mContainer.UdpBoxBeginPort)
                {
                    return;
                }
                //Avoid self connect to the self.

                var roomInfo = new RoomInfo()
                {
                    RoomName   = mHallPackage.RoomName,
                    BeginPort  = mHallPackage.BeginPort,
                    EndPort    = mHallPackage.EndPort,
                    IPAddress  = mHallPackage.IPAddress,
                    AliveTimer = ROOM_ALIVE_DURATION,
                };

                if (!mRoomInfoList.Contains(roomInfo))
                {
                    mRoomInfoList.Add(roomInfo);
                }
                else
                {
                    var itemIndex            = mRoomInfoList.FindIndex(m => m.Equals(roomInfo));
                    roomInfo.AliveTimer      = ROOM_ALIVE_DURATION;
                    mRoomInfoList[itemIndex] = roomInfo;
                }
            });
        }
Пример #3
0
        public void Initialization(string packageHeadString, UDPBoxContainer container)
        {
            mContainer         = container;
            mPackageHeadString = packageHeadString;
            mHallPackage       = new UDPBoxContainer_HallDataPackage(UDPBoxUtility.ToBuffer(mPackageHeadString));

            mUdpClient = UDPBoxFactory.GeterateUdpClient(recvBroadcastPort);
            mBroadcast = new UDPBoxBroadcast(mUdpClient, sendBroadcastPort);

            ToHallWaitMode();
        }
Пример #4
0
        IEnumerator IPSearch()
        {
            var searched_flag  = false;
            var spareIPPrefixs = UDPBoxUtility.FindBroadcastIPV4Prefixs();

            for (int i = 0, iMax = spareIPPrefixs.Length; i < iMax && !searched_flag; i++)
            {
                var ip_prefix = spareIPPrefixs[i];

                if (isDebug)
                {
                    Debug.Log("Searcher current try to used the ip address: " + ip_prefix);
                }

                udpBoxContainer.broadcastNetprefixIP = ip_prefix;
                udpBoxContainer.RestartUDPBoxContainer();

                for (int i_wait = 0; i_wait < 5 && !searched_flag; i_wait++)
                {
                    yield return(new WaitForSeconds(10f));

                    if (isDebug)
                    {
                        Debug.Log("Try count: " + i + " state: " + udpBoxContainer.State);
                    }

                    if (udpBoxContainer.State == UDPBoxContainer.EState.HasServer)
                    {
                        searched_flag = true;
                        break;
                    }
                }

                if (!searched_flag)
                {
                    udpBoxContainer.ReleaseUDPBoxContainer();
                }
            }
        }