public override void Open() { base.Open(); #region 返回按钮:回到InitialUI ReturnButton.onClick.AddListener(() => { PUIManager.AddNewUIAction("返回:转到IUI", () => PUIManager.ChangeUI <PInitialUI>()); }); #endregion #region 加入游戏按钮:向服务器发送请求 JoinGameButton.onClick.AddListener(() => { string ServerIP = ServerIPInputField.text; string Nickname = NicknameInputField.text; if (!Regex.IsMatch(ServerIP, IPAddressPattern)) { ErrorText.text = "IP地址不正确"; } else if (Nickname.Equals(string.Empty) || Nickname.Length > 8 || Nickname.Contains(" ")) { ErrorText.text = "昵称须为1~8个字且不能有空格"; } else { if (PNetworkManager.CreateClient(ServerIP, Nickname)) { ErrorText.text = string.Empty; // 不进行任何操作,等待服务器的回应 } else { ErrorText.text = "网络连接失败"; } } }); #endregion }
public PShutDownOrder() : base("shut_down", null, (string[] args) => { PNetworkManager.AbortClient(); PUIManager.AddNewUIAction("ShutDown-返回InitialUI", () => { PUIManager.ChangeUI <PInitialUI>(); }); }) { }
private void OnClickCreatBtn() { if (!RuntimeData.IsMyPokemonsFull()) { return; } RuntimeData.SetCurrentMyIndex(0); RuntimeData.SetCurrentOppIndex(0); PNetworkManager.LanGame(0); }
public override void Open() { #region 根据当前模式调整房间内座位数量和颜色 for (int i = 0; i < MaxCapacity; ++i) { if (i < PSystem.CurrentMode.PlayerNumber) { SeatList[i].Open(); } else { SeatList[i].Close(); } } for (int i = 0; i < PSystem.CurrentMode.PlayerNumber; ++i) { SeatList[i].Background.color = PPlayerScene.Config.PlayerColors[PSystem.CurrentMode.Seats[i].Party - 1]; } #endregion #region 显示IP地址 IPAddressText.text = "本机IP:" + PNetworkConfig.IP.ToString(); #endregion #region 返回按钮:转到InitialUI并关闭服务器/客户端 ReturnButton.onClick.AddListener(() => { PNetworkManager.AbortClient(); if (PNetworkManager.CurrentHostType.Equals(PHostType.Server)) { PNetworkManager.AbortServer(); } PUIManager.AddNewUIAction("返回:转到IUI", () => PUIManager.ChangeUI <PInitialUI>()); }); #endregion #region 开始游戏按钮:发送开始游戏请求 StartGameButton.onClick.AddListener(() => { PNetworkManager.NetworkClient.Send(new PStartGameOrder()); }); #endregion base.Open(); }
public override void Open() { base.Open(); #region 返回按钮:回到InitialUI ReturnButton.onClick.AddListener(() => { PNetworkManager.AbortServer(); PUIManager.AddNewUIAction("返回:转到IUI", () => PUIManager.ChangeUI <PInitialUI>()); }); #endregion #region 确定按钮:创建服务器 EnterButton.onClick.AddListener(() => { string[] Parts = CodeInputField.text.Split(';'); if (Parts.Length <= 2) { return; } int Times = Math.Min(100, Math.Max(1, Convert.ToInt32(Parts[Parts.Length - 1]))); PSystem.AllAiConfig = CodeInputField.text; PNetworkManager.CreateSingleServer(PSystem.CurrentMap, PSystem.CurrentMode); PThread.Async(() => { for (int i = 0; i < Times; ++i) { string Time = DateTime.Now.ToLocalTime().ToString(); //PLogger.StartLogging(false); List <PGeneral> GeneralList = GenerateGenerals(PSystem.AllAiConfig); PNetworkManager.Game.Room.PlayerList.ForEach((PRoom.PlayerInRoom Player) => Player.PlayerType = PPlayerType.AI); PNetworkManager.Game.StartGame(GeneralList); PThread.WaitUntil(() => PNetworkManager.Game.ReadyToStartGameFlag); PUIManager.AddNewUIAction("增加结果序列", () => { PUIManager.GetUI <PTestUI>().ResultInputField.text += "Time: " + Time + "; Position: " + string.Join(",", PNetworkManager.Game.PlayerList.ConvertAll((PPlayer Player) => Player.General.Name)) + "; Winners: " + PNetworkManager.Game.Winners(true) + "\n"; }); } }); }); #endregion }
private void OnClickJoinBtn() { PNetworkManager.LanGame(1); }
public override void Open() { base.Open(); #region 初始化选择地图下拉框 PSystem.MapList.ForEach((PMap Map) => { ChooseMapDropdown.options.Add(new Dropdown.OptionData { text = Map.Name }); }); #endregion #region 初始化选择模式下拉框 PMode.ListModes().ForEach((PMode Mode) => { ChooseModeDropdown.options.Add(new Dropdown.OptionData { text = Mode.Name }); }); #endregion ResetDropdowns(); QuickModeToggle.isOn = PPlayer.Config.QuickMode; #region 返回按钮:回到InitialUI ReturnButton.onClick.AddListener(() => { PUIManager.AddNewUIAction("返回:转到IUI", () => PUIManager.ChangeUI <PInitialUI>()); }); #endregion #region 确定按钮:创建服务器 EnterButton.onClick.AddListener(() => { int MapValue = ChooseMapDropdown.value; int ModeValue = ChooseModeDropdown.value; PSystem.AllAi = false; try { PNetworkManager.CreateServer(PSystem.MapList[MapValue], PMode.ListModes().Find((PMode Mode) => Mode.Name.Equals(ChooseModeDropdown.options[ModeValue].text))); } catch (Exception e) { PLogger.Log("建立服务器错误"); PLogger.Log(e.ToString()); } // 等待客户端接收到信息 }); #endregion #region 测试按钮:开启AI测试界面 TestButton.onClick.AddListener(() => { int MapValue = ChooseMapDropdown.value; int ModeValue = ChooseModeDropdown.value; PSystem.AllAi = true; try { PNetworkManager.CreateServer(PSystem.MapList[MapValue], PMode.ListModes().Find((PMode Mode) => Mode.Name.Equals(ChooseModeDropdown.options[ModeValue].text))); } catch (Exception e) { PLogger.Log("建立服务器错误"); PLogger.Log(e.ToString()); } //int MapValue = ChooseMapDropdown.value; //int ModeValue = ChooseModeDropdown.value; //PSystem.AllAiConfig = string.Empty; //PSystem.CurrentMode = PMode.ListModes().Find((PMode Mode) => Mode.Name.Equals(ChooseModeDropdown.options[ModeValue].text)); //PSystem.CurrentMap = PSystem.MapList[MapValue]; //PUIManager.AddNewUIAction("测试:转到TUI", () => PUIManager.ChangeUI<PTestUI>()); }); #endregion QuickModeToggle.onValueChanged.AddListener((bool value) => { PPlayer.Config.QuickMode = value; }); }
public PServer() { PacketSeq = 0; #region 启动服务器线程,侦听客户端的连接请求 ServerThread = new Thread(() => { #region 获取IP地址并启动监听器 IPAddress IPv4Address = PNetworkConfig.IP; Listener = new TcpListener(IPv4Address, PNetworkConfig.ServerPort); Listener.Start(); #endregion while (true) { TcpClient client = Listener.AcceptTcpClient(); PLogger.Log("收到连接请求:" + client.Client.RemoteEndPoint.ToString()); #region 判断列表是否已满,发送接受或拒绝命令给请求连接的客户端 if (CommanderList.Count < maxConnectionNumber) { #region 发送接受命令,建立和该客户端通信的命令器 lock (CommanderList) { PClientCommander commander = new PClientCommander(client); commander.Send(new PAcceptOrder()); CommanderList.Add(commander); } #endregion } else { #region 建立一个临时的命令器发送拒绝命令 new Thread(() => { PClientCommander tempCommander = new PClientCommander(client); tempCommander.Send(new PRejectOrder()); Thread.Sleep(20); tempCommander.Stop(); }) { IsBackground = true }.Start(); #endregion } #endregion } }) { IsBackground = true }; ServerThread.Start(); #endregion #region 启动信息处理线程,每10ms处理一次来自其他客户端的消息 MessageProcessor = new Thread(() => { while (true) { Thread.Sleep(10); foreach (PClientCommander commander in CommanderList) { while (commander.ReceiveNumber > 0) { string message = commander.Receive(); if (message != null) { ProcessMessage(message, commander.RemoteIPAddress); } } } } }) { IsBackground = true }; MessageProcessor.Start(); #endregion #region 启动保护线程检测掉线事件 ProtectorThread = new Thread(() => { while (true) { bool Disconnect = false; for (int i = CommanderList.Count - 1; i >= 0; --i) { if (CommanderList[i] != null) { if (!CommanderList[i].Connected) { CommanderList[i].Stop(); string DisconnectIP = CommanderList[i].RemoteIPAddress; PLogger.Log("网络断开:" + DisconnectIP); PNetworkManager.Game.Room.RemovePlayer(CommanderList[i].RemoteIPAddress); CommanderList.RemoveAt(i); Disconnect = true; } } } if (Disconnect) { if (Game.StartGameFlag) { Game.ShutDown(); PNetworkManager.AbortServer(); PUIManager.AddNewUIAction("客户端断开-返回InitialUI", () => { PUIManager.ChangeUI <PInitialUI>(); }); } else { TellClients(new PRoomDataOrder(Game.Room.ToString())); } } Thread.Sleep(20); } }) { IsBackground = true }; ProtectorThread.Start(); #endregion ChooseManager = new PChooseManager(); }