示例#1
0
 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
 }
示例#2
0
 public PShutDownOrder() : base("shut_down",
                                null,
                                (string[] args) => {
     PNetworkManager.AbortClient();
     PUIManager.AddNewUIAction("ShutDown-返回InitialUI", () => {
         PUIManager.ChangeUI <PInitialUI>();
     });
 }) {
 }
示例#3
0
 private void OnClickCreatBtn()
 {
     if (!RuntimeData.IsMyPokemonsFull())
     {
         return;
     }
     RuntimeData.SetCurrentMyIndex(0);
     RuntimeData.SetCurrentOppIndex(0);
     PNetworkManager.LanGame(0);
 }
示例#4
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();
 }
示例#5
0
 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
 }
示例#6
0
 private void OnClickJoinBtn()
 {
     PNetworkManager.LanGame(1);
 }
示例#7
0
 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;
     });
 }
示例#8
0
 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();
 }