diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index 94e27a0..3a3216e 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -43,9 +43,9 @@ namespace ZoFo.GameCore } public void GameEndedUnexpectedly() { } - public void JoinRoom(string ip) + public void JoinRoom(string ip,int port) { - networkManager.JoinRoom(ip); + networkManager.JoinRoom(ip,port); } public void JoinYourself() { networkManager.JoinYourself(); } @@ -66,7 +66,7 @@ namespace ZoFo.GameCore } } - internal void GotData(IUpdateData update) + internal void GotData(UpdateData update) { if (update is UpdateTileCreated) { diff --git a/ZoFo/GameCore/GUI/SelectModeMenu.cs b/ZoFo/GameCore/GUI/SelectModeMenu.cs index 2ddf7f4..6ae2edc 100644 --- a/ZoFo/GameCore/GUI/SelectModeMenu.cs +++ b/ZoFo/GameCore/GUI/SelectModeMenu.cs @@ -41,12 +41,8 @@ public class SelectModeMenu : AbstractGUI // single Server server = new Server(); Client client = new Client(); -<<<<<<< HEAD server.CreateRoom(1); client.JoinYourself(); - -======= ->>>>>>> e9698a8669e52b8738987a7a6ccb79c6726f91ac AppManager.Instance.SetServer(server); AppManager.Instance.SetClient(client); AppManager.Instance.ChangeState(GameState.HostPlaying); @@ -74,14 +70,7 @@ public class SelectModeMenu : AbstractGUI { AppManager.Instance.SetGUI(new SelectingServerGUI()); // multi - Server server = new Server(); //Server Logic MultiPlayer - Client client = new Client(); - server.CreateRoom(5); - client.JoinRoom("127.0.0.1"); //указать айпишник - AppManager.Instance.SetServer(server); - AppManager.Instance.SetClient(client); - string key = client.IsConnected.ToString(); - AppManager.Instance.debugHud.Set(key, "MultiPlayer"); + // ваш код здесь }; Elements.Add(optionButton); diff --git a/ZoFo/GameCore/GUI/SelectingServerGUI.cs b/ZoFo/GameCore/GUI/SelectingServerGUI.cs index a108a29..ad36b4f 100644 --- a/ZoFo/GameCore/GUI/SelectingServerGUI.cs +++ b/ZoFo/GameCore/GUI/SelectingServerGUI.cs @@ -79,10 +79,15 @@ public class SelectingServerGUI : AbstractGUI }; hostButton.LeftButtonPressed += () => { - AppManager.Instance.SetGUI(new WaitingForPlayersGUI(true)); - // host + // host + Server server = new Server(); //Server Logic MultiPlayer + server.CreateRoom(5); + AppManager.Instance.SetServer(server); + string key = server.MyIp; + AppManager.Instance.debugHud.Set(key, "MultiPlayer"); // ваш код здесь + AppManager.Instance.SetGUI(new WaitingForPlayersGUI(true)); }; Elements.Add(hostButton); diff --git a/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs b/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs index 5c9250d..4c5c6b5 100644 --- a/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs +++ b/ZoFo/GameCore/GUI/WaitingForPlayersGUI.cs @@ -17,6 +17,7 @@ public class WaitingForPlayersGUI : AbstractGUI { private DrawableUIElement menuBackground; private bool isHost; + private Label ip; public WaitingForPlayersGUI(bool isHost) { @@ -26,13 +27,13 @@ public class WaitingForPlayersGUI : AbstractGUI { int width = AppManager.Instance.CurentScreenResolution.X; int height = AppManager.Instance.CurentScreenResolution.Y; - + menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures\\GUI\\background\\Waiting" }; Elements.Add(menuBackground); menuBackground.LoadTexture(AppManager.Instance.Content); - - Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 7, (int)(width / 4), (int)(height / 20)), text = "Waiting", fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font"}); - + // string pcIp = + ip = new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 7, (int)(width / 4), (int)(height / 20)), text = AppManager.Instance.server.MyIp, fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font3" }; + Elements.Add(ip); if (isHost) { Button startButton = new Button(Manager) @@ -47,7 +48,7 @@ public class WaitingForPlayersGUI : AbstractGUI startButton.LeftButtonPressed += () => { // start - + // ваш код здесь }; Elements.Add(startButton); diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs index c178154..12ad84d 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -15,7 +15,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager { public class ClientNetworkManager { - private int port = 7632; + private int port = 0; private EndPoint endPoint; private Socket socket; List updates = new List(); @@ -60,13 +60,14 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager /// /// /// - public void JoinRoom(string ip) // multyplayer + public void JoinRoom(string ip, int port) // multyplayer { endPoint = new IPEndPoint(IPAddress.Parse(ip), port); socket.Connect(endPoint); SendData(); Thread listen = new Thread(StartListening); + listen.IsBackground = true; listen.Start(); } @@ -79,6 +80,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager socket.Connect(endPoint); SendData(); Thread listen = new Thread(StartListening); + listen.IsBackground = true; listen.Start(); } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs index 0686800..dbe149d 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs @@ -16,16 +16,17 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager { public class ServerNetworkManager { - private IPAddress ip =IPAddress.Parse("127.0.0.1"); //IPAddress.Any - private int port = 7632; + private IPAddress ip = IPAddress.Parse("127.0.0.1"); + private const int port = 0; private IPEndPoint endPoint; private Socket socket; private List clients; - public List updates; + public List updates; public delegate void OnDataSend(string data); public event OnDataSend GetDataSend; // event Dictionary managerThread; Thread serverTheread; + public IPEndPoint InfoConnect => endPoint; public ServerNetworkManager() { Init(); } @@ -34,6 +35,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager /// private void Init() { + ip = GetIp(); endPoint = new IPEndPoint(ip, port); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); managerThread = new Dictionary(); @@ -43,10 +45,21 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager socket.Bind(endPoint); } + /// + /// Получает IP устройства + /// + /// + public static IPAddress GetIp() + { + string hostName = Dns.GetHostName(); // Retrive the Name of HOST + string myIP = Dns.GetHostByName(hostName).AddressList[1].ToString();// Get the IP + return IPAddress.Parse(myIP); + } + /// /// отправляет клиенту Data /// - public void SendData() + public void SendData() { for (int i = 0; i < updates.Count; i++) { @@ -76,7 +89,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager /// /// По сути конец игры и отключение игроков /// - public void CloseConnection() + public void CloseConnection() { foreach (var item in clients) { @@ -104,11 +117,11 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager public void Start(object players) { serverTheread = new Thread(StartWaitingForPlayers); + serverTheread.IsBackground = true; serverTheread.Start(players); } //Потоки Клиентов - /// /// Слушает игроков, которые хотят подключиться /// @@ -116,12 +129,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager public void StartWaitingForPlayers(object players) { int playNumber = (int)players; - + socket.Listen(playNumber); for (int i = 0; i < playNumber; i++) { Socket client = socket.Accept(); Thread thread = new Thread(StartListening); + thread.IsBackground = true; thread.Start(client); managerThread.Add(client, thread); clients.Add(client); //добавляем клиентов в лист diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 72329d9..edc1022 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -19,6 +19,7 @@ namespace ZoFo.GameCore { private ServerNetworkManager networkManager; private int ticks = 0; + public string MyIp { get { return networkManager.InfoConnect.ToString(); } } public Server() { networkManager = new ServerNetworkManager(); @@ -29,7 +30,7 @@ namespace ZoFo.GameCore //TODO Comment pls public void OnDataSend(string data) { - List updateDatas = JsonSerializer.Deserialize>(data); + List updateDatas = JsonSerializer.Deserialize>(data); for (int i = 0; i < updateDatas.Count; i++) { ProcessIUpdateData(updateDatas[i]); @@ -39,7 +40,7 @@ namespace ZoFo.GameCore /// Обработка апдейтсов, которые нам прислал клиент /// /// - public void ProcessIUpdateData(IUpdateData updateData) + public void ProcessIUpdateData(UpdateData updateData) { //ТУТ Switch case будет честное слово