Beispiel #1
0
 public void Release()
 {
     mUdpClient?.Dispose();
     mBroadcast?.ReleaseThread();
     mContainer?.Release();
     OnUdpBoxContainerRelease?.Invoke();
 }
Beispiel #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;
                }
            });
        }