From 6ee0b4fc73992138c37ffc8fa605e6d8027aa519 Mon Sep 17 00:00:00 2001 From: rawer470 Date: Fri, 16 Aug 2024 10:41:25 +0300 Subject: [PATCH 1/4] ServerConflictUpdate --- ZoFo/GameCore/Server.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 02d7e05..2d520ce 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -47,15 +47,9 @@ namespace ZoFo.GameCore { UpdateGameEnded gameEnded = new UpdateGameEnded(); networkManager.AddData(gameEnded); -<<<<<<< Updated upstream networkManager.CloseConnection(); } - internal void Update(GameTime gameTime) -======= - } - - public void Update(GameTime gameTime) ->>>>>>> Stashed changes + public void Update(GameTime gameTime) { } From 2e9fccd99a44f3e5ae11ac70f5e7282ec85d9f98 Mon Sep 17 00:00:00 2001 From: MARKPRO44 <119742977+MARKPRO4444@users.noreply.github.com> Date: Fri, 16 Aug 2024 11:06:51 +0300 Subject: [PATCH 2/4] ClientJoin --- ZoFo/GameCore/Client.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index 5ee0546..81d137d 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -27,12 +27,18 @@ namespace ZoFo.GameCore public void GameEndedUnexpectedly(){ } - public void JoinRoom(){ } + public void JoinRoom(string ip) + { + networkManager.JoinRoom(ip); + } - public void JoinYourself(){ } + public void JoinYourself() + { + networkManager.JoinYourself(); + } internal void Update(GameTime gameTime) - { + { } internal void Draw(SpriteBatch spriteBatch) From 553677b0742963cb46163ede9f18dcbd426846de Mon Sep 17 00:00:00 2001 From: rawer470 Date: Fri, 16 Aug 2024 11:44:50 +0300 Subject: [PATCH 3/4] ConnectSinglePlayer --- ZoFo/GameCore/Client.cs | 2 +- ZoFo/GameCore/GUI/MainMenuGUI.cs | 36 ++++++++++-------- ZoFo/GameCore/GameManagers/AppManager.cs | 37 ++++++++++--------- .../NetworkManager/ClientNetworkManager.cs | 22 +++++++---- .../NetworkManager/ServerNetworkManager.cs | 21 +++++++---- ZoFo/GameCore/Server.cs | 2 +- 6 files changed, 70 insertions(+), 50 deletions(-) diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index 5ee0546..4fe0116 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -29,7 +29,7 @@ namespace ZoFo.GameCore public void JoinRoom(){ } - public void JoinYourself(){ } + public void JoinYourself(){ networkManager.JoinYourself(); } internal void Update(GameTime gameTime) { diff --git a/ZoFo/GameCore/GUI/MainMenuGUI.cs b/ZoFo/GameCore/GUI/MainMenuGUI.cs index 45c3e65..3412802 100644 --- a/ZoFo/GameCore/GUI/MainMenuGUI.cs +++ b/ZoFo/GameCore/GUI/MainMenuGUI.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Threading; using System.Xml; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; @@ -20,15 +21,15 @@ public class MainMenuGUI : 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\\MenuBackground" }; Elements.Add(menuBackground); menuBackground.LoadTexture(AppManager.Instance.Content); - - Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 5, (int)(width / 4), (int)(height / 20)), text = "ZoFo", fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font"}); - - - Button playButton = new Button(Manager) + + Elements.Add(new Label(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 8), height / 5, (int)(width / 4), (int)(height / 20)), text = "ZoFo", fontColor = Color.White, mainColor = Color.Transparent, scale = 0.9f, fontName = "Fonts\\Font" }); + + + Button playButton = new Button(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + height / 20 + height / 40, (int)(width / 5), (int)(height / 20)), text = "Play", @@ -37,12 +38,18 @@ public class MainMenuGUI : AbstractGUI mainColor = Color.Gray, fontName = "Fonts\\Font" }; - playButton.LeftButtonPressed += () => + playButton.LeftButtonPressed += () => { - + Server server = new Server(); + Client client = new Client(); + server.CreateRoom(1); + client.JoinYourself(); + AppManager.Instance.SetServer(server); + AppManager.Instance.SetClient(client); + AppManager.Instance.ChangeState(GameState.HostPlaying); }; Elements.Add(playButton); - Button optionButton = new Button(Manager) + Button optionButton = new Button(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + (height / 20 + height / 40) * 2, (int)(width / 5), (int)(height / 20)), text = "Options", @@ -51,12 +58,12 @@ public class MainMenuGUI : AbstractGUI mainColor = Color.Gray, fontName = "Fonts\\Font" }; - optionButton.LeftButtonPressed += () => + optionButton.LeftButtonPressed += () => { AppManager.Instance.SetGUI(new OptionsGUI()); }; Elements.Add(optionButton); - Button exitButton = new Button(Manager) + Button exitButton = new Button(Manager) { rectangle = new Rectangle(width / 2 - (int)(width / 10), height / 3 + (height / 20 + height / 40) * 3, (int)(width / 5), (int)(height / 20)), text = "Exit", @@ -65,15 +72,14 @@ public class MainMenuGUI : AbstractGUI mainColor = Color.Gray, fontName = "Fonts\\Font" }; - exitButton.LeftButtonPressed += () => + exitButton.LeftButtonPressed += () => { AppManager.Instance.Exit(); }; Elements.Add(exitButton); - - - } + + } public override void Update(GameTime gameTime) { base.Update(gameTime); diff --git a/ZoFo/GameCore/GameManagers/AppManager.cs b/ZoFo/GameCore/GameManagers/AppManager.cs index 3be4402..53c5ee4 100644 --- a/ZoFo/GameCore/GameManagers/AppManager.cs +++ b/ZoFo/GameCore/GameManagers/AppManager.cs @@ -20,9 +20,9 @@ namespace ZoFo.GameCore.GameManagers { private GraphicsDeviceManager _graphics; private SpriteBatch _spriteBatch; - - - + + + public static AppManager Instance { get; private set; } public GameState gamestate; public AbstractGUI currentGUI; @@ -31,13 +31,13 @@ namespace ZoFo.GameCore.GameManagers public Client client; public Server server; - + #region Managers - + public InputManager InputManager; public ItemManager.ItemManager ItemManager; - public AnimationBuilder animationBuilder{get;set; } + public AnimationBuilder animationBuilder { get; set; } #endregion @@ -45,16 +45,16 @@ namespace ZoFo.GameCore.GameManagers { _graphics = new GraphicsDeviceManager(this); SetResolution(CurentScreenResolution.X, CurentScreenResolution.Y); - FulscrreenSwitch(); - - + // FulscrreenSwitch(); + + Content.RootDirectory = "Content"; IsMouseVisible = true; Instance = this; InputManager = new InputManager(); - - + + currentGUI = new MainMenuGUI(); debugHud = new DebugHUD(); @@ -65,7 +65,7 @@ namespace ZoFo.GameCore.GameManagers { currentGUI.Initialize(); debugHud.Initialize(); - + base.Initialize(); @@ -86,9 +86,9 @@ namespace ZoFo.GameCore.GameManagers if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) Exit(); - + debugHud.Set("key", "value"); - + InputManager.Update(); currentGUI.Update(gameTime); switch (gamestate) @@ -113,7 +113,7 @@ namespace ZoFo.GameCore.GameManagers { GraphicsDevice.Clear(Color.CornflowerBlue); - + debugHud.Draw(_spriteBatch); currentGUI.Draw(_spriteBatch); @@ -121,7 +121,7 @@ namespace ZoFo.GameCore.GameManagers { case GameState.ClientPlaying: case GameState.HostPlaying: - client.Draw(_spriteBatch); + client.Draw(_spriteBatch); break; case GameState.NotPlaying: default: @@ -136,7 +136,7 @@ namespace ZoFo.GameCore.GameManagers } public void SetGUI(AbstractGUI gui) { - currentGUI = gui; + currentGUI = gui; currentGUI.Initialize(); currentGUI.LoadContent(); @@ -158,5 +158,8 @@ namespace ZoFo.GameCore.GameManagers { _graphics.IsFullScreen = !_graphics.IsFullScreen; } + + public void SetServer(Server server) { this.server = server; } + public void SetClient(Client client) { this.client = client; } } } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs index ea57f60..a44eade 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -5,6 +5,7 @@ using System.Net; using System.Net.Sockets; using System.Security.Cryptography.X509Certificates; using System.Text; +using System.Text.Json; using System.Threading; using System.Threading.Tasks; using ZoFo.GameCore.GameManagers.NetworkManager.Updates; @@ -20,6 +21,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager List updates = new List(); public delegate void OnDataSent(string Data); public event OnDataSent GetDataSent; // event + + public ClientNetworkManager() + { + Init(); + } + public void Init() //create endPoint, socket { socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); @@ -27,11 +34,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager public void SendData() { - while(socket.Connected) - { - byte[] bytes = Encoding.UTF8.GetBytes(updates.ToString()); + byte[] bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(updates)); //нужно сериализовать socket.Send(bytes); - } + } + + public void AddData(IUpdateData UpdateData) + { + updates.Add(UpdateData); } public void StopConnection() @@ -47,10 +56,9 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager /// public void JoinRoom(string ip) // multyplayer { + endPoint = new IPEndPoint(IPAddress.Parse(ip), port); - socket.Connect(endPoint); - SendData(); Thread listen = new Thread(StartListening); listen.Start(); @@ -62,9 +70,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager public void JoinYourself() // single player { endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), port); - socket.Connect(endPoint); - SendData(); Thread listen = new Thread(StartListening); listen.Start(); diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs index 27550ac..73e1291 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs @@ -16,7 +16,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager { public class ServerNetworkManager { - private IPAddress ip = IPAddress.Any; + private IPAddress ip =IPAddress.Parse("127.0.0.1"); //IPAddress.Any private int port = 7632; private IPEndPoint endPoint; private Socket socket; @@ -25,12 +25,18 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager public delegate void OnDataSend(string data); public event OnDataSend GetDataSend; // event Dictionary managerThread; + Thread serverTheread; + + public ServerNetworkManager() { Init(); } public void Init() //create Socket { endPoint = new IPEndPoint(ip, port); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); managerThread = new Dictionary(); + clients = new List(); + updates = new List(); + managerThread = new Dictionary(); } /// /// отправляет клиенту Data @@ -52,14 +58,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager { updates.Add(data); } -<<<<<<< Updated upstream public void CloseConnection() //По сути коне игры и отключение игроков -======= - /// - /// - /// - public void CloseConnection() ->>>>>>> Stashed changes { foreach (var item in clients) { @@ -80,6 +79,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager clients.Clear(); } + public void Start(object players) + { + serverTheread = new Thread(StartWaitingForPlayers); + serverTheread.Start(players); + } + //Потоки Клиентов public void StartWaitingForPlayers(object players)//Слушает игроков, которые хотят подключиться { diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 2d520ce..61756fb 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -39,7 +39,7 @@ namespace ZoFo.GameCore } public void CreateRoom(int players) //Создает комнату и запускает ожидание подключений { - networkManager.StartWaitingForPlayers(players); + networkManager.Start(players); } // public void StartGame() { } принудительный запуск From 343f063422690e368850f5ed58d5f4415fda85d2 Mon Sep 17 00:00:00 2001 From: rawer470 Date: Fri, 16 Aug 2024 12:19:54 +0300 Subject: [PATCH 4/4] AddComments --- ZoFo/GameCore/Client.cs | 8 -------- ZoFo/GameCore/GUI/MainMenuGUI.cs | 2 +- ZoFo/GameCore/Server.cs | 12 ++++++++++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index c42dad7..49b1813 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -32,15 +32,7 @@ namespace ZoFo.GameCore networkManager.JoinRoom(ip); } -<<<<<<< HEAD public void JoinYourself(){ networkManager.JoinYourself(); } -======= - public void JoinYourself() - { - networkManager.JoinYourself(); - } ->>>>>>> 2e9fccd99a44f3e5ae11ac70f5e7282ec85d9f98 - internal void Update(GameTime gameTime) { } diff --git a/ZoFo/GameCore/GUI/MainMenuGUI.cs b/ZoFo/GameCore/GUI/MainMenuGUI.cs index 3412802..9117807 100644 --- a/ZoFo/GameCore/GUI/MainMenuGUI.cs +++ b/ZoFo/GameCore/GUI/MainMenuGUI.cs @@ -40,7 +40,7 @@ public class MainMenuGUI : AbstractGUI }; playButton.LeftButtonPressed += () => { - Server server = new Server(); + Server server = new Server(); //Server Logic SinglePlayer Client client = new Client(); server.CreateRoom(1); client.JoinYourself(); diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 61756fb..c758fba 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -37,13 +37,21 @@ namespace ZoFo.GameCore { networkManager.AddData(data); } - public void CreateRoom(int players) //Создает комнату и запускает ожидание подключений + /// + /// Создает комнату и запускает ожидание подключений + /// + /// + public void CreateRoom(int players) { networkManager.Start(players); } // public void StartGame() { } принудительный запуск - public void EndGame() //Добавляет UpdateGameEnded и отключает игроков + + /// + /// Добавляет UpdateGameEnded и отключает игроков + /// + public void EndGame() { UpdateGameEnded gameEnded = new UpdateGameEnded(); networkManager.AddData(gameEnded);