From 757c56c1ea42700ba8f0d4b0247fd15ea67c6c99 Mon Sep 17 00:00:00 2001 From: rawer470 Date: Thu, 15 Aug 2024 15:00:02 +0300 Subject: [PATCH 1/4] UpdateServer --- .../NetworkManager/ServerNetworkManager.cs | 44 ++++++++++++------- ZoFo/GameCore/Server.cs | 17 ++++++- 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs index 899f610..5dd9979 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs @@ -21,44 +21,54 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager private Socket socket; private List clients; private List updates; - delegate void OnDataSend(string data); // + public delegate void OnDataSend(string data); + public event OnDataSend GetDataSend; // event + Dictionary managerThread; + public void Init() //create Socket { endPoint = new IPEndPoint(ip, port); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } - - public void SendData() + public void SendData() //отправляет клиенту Data { - + string data = JsonSerializer.Serialize(updates); + var databytes = Encoding.UTF8.GetBytes(data); + foreach (var item in clients) + { + item.SendAsync(databytes); + } + } + public void AddData(IUpdateData data)//добавляет в лист updates новую data + { + updates.Add(data); } - public void AddData(IUpdateData data) { } //Поток 2 - public void StartWaitingForPlayers()//Слушает игроков, которые хотят подключиться + + public void StartWaitingForPlayers(object players)//Слушает игроков, которые хотят подключиться { + int playNumber = (int)players; socket.Bind(endPoint); - socket.Listen(10); - for (int i = 0; i < 10; i++) + socket.Listen(playNumber); + for (int i = 0; i < playNumber; i++) { Socket client = socket.Accept(); clients.Add(client); //добавляем клиентов в лист } - - StartListening(); + } - public void StartListening()//начать слушать клиентов в самой игре активируют Ивент + private void StartListening(object socket)//начать слушать клиентов в самой игре активируют Ивент { + // obj to Socket + Socket client = (Socket)socket; var buff = new byte[1024]; - foreach (var client in clients) - { - var answ = client.Receive(buff); - string response = Encoding.UTF8.GetString(buff, 0, answ); - // List updateDatas = - } + var answ = client.Receive(buff); + string response = Encoding.UTF8.GetString(buff, 0, answ); + GetDataSend(response); } } } diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index 948ee0e..a508a19 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -2,7 +2,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.Json; using System.Threading.Tasks; +using ZoFo.GameCore.GameManagers.NetworkManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates; using ZoFo.GameCore.GameObjects; namespace ZoFo.GameCore @@ -10,9 +13,19 @@ namespace ZoFo.GameCore public class Server { private List gameObjects; - // private List<> entity; //entity + private ServerNetworkManager networkManager; + // private List<> entity; //entity + public Server() + { + networkManager = new ServerNetworkManager(); + networkManager.GetDataSend += OnDataSend; + } - public void OnDataSend(string data) { } + public void OnDataSend(string data) + { + List updateDatas = JsonSerializer.Deserialize>(data); + //ТУТ Switch case будет честное слово + } public void CreateRoom() { } public void StartGame() { } public void EndGame() { } From 898b734c9e39a37c54940acee6e474441342d824 Mon Sep 17 00:00:00 2001 From: MARKPRO44 <119742977+MARKPRO4444@users.noreply.github.com> Date: Thu, 15 Aug 2024 15:13:47 +0300 Subject: [PATCH 2/4] Client --- ZoFo/GameCore/Client.cs | 18 +++++++++++++++++- .../NetworkManager/ClientNetworkManager.cs | 4 ++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ZoFo/GameCore/Client.cs b/ZoFo/GameCore/Client.cs index f8a9288..d765f10 100644 --- a/ZoFo/GameCore/Client.cs +++ b/ZoFo/GameCore/Client.cs @@ -1,9 +1,25 @@ +using System.Collections.Generic; +using System.Text.Json; +using ZoFo.GameCore.GameManagers.NetworkManager; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates; + namespace ZoFo.GameCore { public class Client { - public void OnDataSend(string Data){ } + ClientNetworkManager networkManager; + public Client() + { + networkManager = new ClientNetworkManager(); + networkManager.GetDataSent += OnDataSend; + } + + public void OnDataSend(string data) + { + List updateDatas = JsonSerializer.Deserialize>(data); + // Тут будет switch + } public void GameEndedUnexpectedly(){ } diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs index 033cc30..70617a7 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -15,8 +15,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager private int port = 7632; private EndPoint endPoint; private Socket socket; - delegate void OnDataSent(string Data); - event OnDataSent GetDataSent; // event + public delegate void OnDataSent(string Data); + public event OnDataSent GetDataSent; // event public void Init() //create endPoint, socket { endPoint = new IPEndPoint(iPAddress, port); From 55151bae11b1172f3163ddf0a00abcaacd9d44b9 Mon Sep 17 00:00:00 2001 From: rawer470 Date: Thu, 15 Aug 2024 15:58:58 +0300 Subject: [PATCH 3/4] CloseConnection --- .../NetworkManager/ServerNetworkManager.cs | 44 +++++++++++++++---- ZoFo/GameCore/Server.cs | 12 +++-- 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs index 5dd9979..1e013a1 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ServerNetworkManager.cs @@ -1,4 +1,5 @@ -using Microsoft.Xna.Framework.Graphics.PackedVector; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Graphics.PackedVector; using System; using System.Collections.Generic; using System.Linq; @@ -24,12 +25,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager public delegate void OnDataSend(string data); public event OnDataSend GetDataSend; // event Dictionary managerThread; - + public void Init() //create Socket { endPoint = new IPEndPoint(ip, port); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + managerThread = new Dictionary(); } public void SendData() //отправляет клиенту Data { @@ -45,9 +47,25 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager updates.Add(data); } - + public void CloseConnection() + { + foreach (var item in clients) + { + item.Shutdown(SocketShutdown.Both); + item.Close(); + } + foreach (var item in managerThread) + { + foreach (var socket in clients) + { + managerThread[socket].Interrupt(); + } + } + managerThread.Clear(); + clients.Clear(); + } //Поток 2 - + public void StartWaitingForPlayers(object players)//Слушает игроков, которые хотят подключиться { int playNumber = (int)players; @@ -56,19 +74,27 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager for (int i = 0; i < playNumber; i++) { Socket client = socket.Accept(); + Thread thread = new Thread(StartListening); + thread.Start(client); + managerThread.Add(client, thread); clients.Add(client); //добавляем клиентов в лист } - + } private void StartListening(object socket)//начать слушать клиентов в самой игре активируют Ивент { // obj to Socket Socket client = (Socket)socket; - var buff = new byte[1024]; - var answ = client.Receive(buff); - string response = Encoding.UTF8.GetString(buff, 0, answ); - GetDataSend(response); + while (client.Connected) + { + var buff = new byte[1024]; + var answ = client.Receive(buff); + string response = Encoding.UTF8.GetString(buff, 0, answ); + GetDataSend(response); + } + Thread.Sleep(-1); + } } } diff --git a/ZoFo/GameCore/Server.cs b/ZoFo/GameCore/Server.cs index a508a19..91cd151 100644 --- a/ZoFo/GameCore/Server.cs +++ b/ZoFo/GameCore/Server.cs @@ -6,6 +6,7 @@ using System.Text.Json; using System.Threading.Tasks; using ZoFo.GameCore.GameManagers.NetworkManager; using ZoFo.GameCore.GameManagers.NetworkManager.Updates; +using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient; using ZoFo.GameCore.GameObjects; namespace ZoFo.GameCore @@ -26,9 +27,14 @@ namespace ZoFo.GameCore List updateDatas = JsonSerializer.Deserialize>(data); //ТУТ Switch case будет честное слово } - public void CreateRoom() { } - public void StartGame() { } - public void EndGame() { } + public void CreateRoom(int players) { + networkManager.StartWaitingForPlayers(players); + } + // public void StartGame() { } принудительный запуск + public void EndGame() { + UpdateGameEnded gameEnded = new UpdateGameEnded(); + networkManager.AddData(gameEnded); + } } From 48f43baf2f70aaa086007e597e32265881238ee6 Mon Sep 17 00:00:00 2001 From: MARKPRO44 <119742977+MARKPRO4444@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:02:17 +0300 Subject: [PATCH 4/4] GlobalMerge2 --- .../NetworkManager/ClientNetworkManager.cs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs index 70617a7..355342f 100644 --- a/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs +++ b/ZoFo/GameCore/GameManagers/NetworkManager/ClientNetworkManager.cs @@ -28,6 +28,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager } + public void StopConnection() + { + socket.Shutdown(SocketShutdown.Both); + socket.Close(); + } + public void JoinRoom() // multyplayer { SendData(); @@ -45,11 +51,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager { socket.Connect(endPoint); - byte[] bytes = new byte[2048]; - - var countAnsw = socket.Receive(bytes); - - string updates = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновления отосланные сервером + while(socket.Connected) + { + byte[] bytes = new byte[2048]; + var countAnsw = socket.Receive(bytes); + string update = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновление отосланные сервером + GetDataSent(update); + } } } } \ No newline at end of file