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; }
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; } }); }
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(); }
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(); } } }