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