WorkServerWithGUI

This commit is contained in:
rawer470 2024-08-17 01:18:46 +03:00
parent ceb10ce7c4
commit a644d6c02a
7 changed files with 45 additions and 33 deletions

View file

@ -43,9 +43,9 @@ namespace ZoFo.GameCore
} }
public void GameEndedUnexpectedly() { } 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(); } 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) if (update is UpdateTileCreated)
{ {

View file

@ -41,12 +41,8 @@ public class SelectModeMenu : AbstractGUI
// single // single
Server server = new Server(); Server server = new Server();
Client client = new Client(); Client client = new Client();
<<<<<<< HEAD
server.CreateRoom(1); server.CreateRoom(1);
client.JoinYourself(); client.JoinYourself();
=======
>>>>>>> e9698a8669e52b8738987a7a6ccb79c6726f91ac
AppManager.Instance.SetServer(server); AppManager.Instance.SetServer(server);
AppManager.Instance.SetClient(client); AppManager.Instance.SetClient(client);
AppManager.Instance.ChangeState(GameState.HostPlaying); AppManager.Instance.ChangeState(GameState.HostPlaying);
@ -74,14 +70,7 @@ public class SelectModeMenu : AbstractGUI
{ {
AppManager.Instance.SetGUI(new SelectingServerGUI()); AppManager.Instance.SetGUI(new SelectingServerGUI());
// multi // 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); Elements.Add(optionButton);

View file

@ -79,10 +79,15 @@ public class SelectingServerGUI : AbstractGUI
}; };
hostButton.LeftButtonPressed += () => 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); Elements.Add(hostButton);

View file

@ -17,6 +17,7 @@ public class WaitingForPlayersGUI : AbstractGUI
{ {
private DrawableUIElement menuBackground; private DrawableUIElement menuBackground;
private bool isHost; private bool isHost;
private Label ip;
public WaitingForPlayersGUI(bool isHost) public WaitingForPlayersGUI(bool isHost)
{ {
@ -26,13 +27,13 @@ public class WaitingForPlayersGUI : AbstractGUI
{ {
int width = AppManager.Instance.CurentScreenResolution.X; int width = AppManager.Instance.CurentScreenResolution.X;
int height = AppManager.Instance.CurentScreenResolution.Y; 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" }; menuBackground = new DrawableUIElement(Manager) { rectangle = new Rectangle(0, 0, width, height), mainColor = Color.White, textureName = "Textures\\GUI\\background\\Waiting" };
Elements.Add(menuBackground); Elements.Add(menuBackground);
menuBackground.LoadTexture(AppManager.Instance.Content); menuBackground.LoadTexture(AppManager.Instance.Content);
// string pcIp =
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"}); 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) if (isHost)
{ {
Button startButton = new Button(Manager) Button startButton = new Button(Manager)
@ -47,7 +48,7 @@ public class WaitingForPlayersGUI : AbstractGUI
startButton.LeftButtonPressed += () => startButton.LeftButtonPressed += () =>
{ {
// start // start
// ваш код здесь // ваш код здесь
}; };
Elements.Add(startButton); Elements.Add(startButton);

View file

@ -15,7 +15,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
{ {
public class ClientNetworkManager public class ClientNetworkManager
{ {
private int port = 7632; private int port = 0;
private EndPoint endPoint; private EndPoint endPoint;
private Socket socket; private Socket socket;
List<UpdateData> updates = new List<UpdateData>(); List<UpdateData> updates = new List<UpdateData>();
@ -60,13 +60,14 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
/// </summary> /// </summary>
/// <param name="ip"></param> /// <param name="ip"></param>
/// <param name="port"></param> /// <param name="port"></param>
public void JoinRoom(string ip) // multyplayer public void JoinRoom(string ip, int port) // multyplayer
{ {
endPoint = new IPEndPoint(IPAddress.Parse(ip), port); endPoint = new IPEndPoint(IPAddress.Parse(ip), port);
socket.Connect(endPoint); socket.Connect(endPoint);
SendData(); SendData();
Thread listen = new Thread(StartListening); Thread listen = new Thread(StartListening);
listen.IsBackground = true;
listen.Start(); listen.Start();
} }
@ -79,6 +80,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
socket.Connect(endPoint); socket.Connect(endPoint);
SendData(); SendData();
Thread listen = new Thread(StartListening); Thread listen = new Thread(StartListening);
listen.IsBackground = true;
listen.Start(); listen.Start();
} }

View file

@ -16,16 +16,17 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
{ {
public class ServerNetworkManager public class ServerNetworkManager
{ {
private IPAddress ip =IPAddress.Parse("127.0.0.1"); //IPAddress.Any private IPAddress ip = IPAddress.Parse("127.0.0.1");
private int port = 7632; private const int port = 0;
private IPEndPoint endPoint; private IPEndPoint endPoint;
private Socket socket; private Socket socket;
private List<Socket> clients; private List<Socket> clients;
public List<IUpdateData> updates; public List<UpdateData> updates;
public delegate void OnDataSend(string data); public delegate void OnDataSend(string data);
public event OnDataSend GetDataSend; // event public event OnDataSend GetDataSend; // event
Dictionary<Socket, Thread> managerThread; Dictionary<Socket, Thread> managerThread;
Thread serverTheread; Thread serverTheread;
public IPEndPoint InfoConnect => endPoint;
public ServerNetworkManager() { Init(); } public ServerNetworkManager() { Init(); }
@ -34,6 +35,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
/// </summary> /// </summary>
private void Init() private void Init()
{ {
ip = GetIp();
endPoint = new IPEndPoint(ip, port); endPoint = new IPEndPoint(ip, port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
managerThread = new Dictionary<Socket, Thread>(); managerThread = new Dictionary<Socket, Thread>();
@ -43,10 +45,21 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
socket.Bind(endPoint); socket.Bind(endPoint);
} }
/// <summary>
/// Получает IP устройства
/// </summary>
/// <returns></returns>
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);
}
/// <summary> /// <summary>
/// отправляет клиенту Data /// отправляет клиенту Data
/// </summary> /// </summary>
public void SendData() public void SendData()
{ {
for (int i = 0; i < updates.Count; i++) for (int i = 0; i < updates.Count; i++)
{ {
@ -76,7 +89,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
/// <summary> /// <summary>
/// По сути конец игры и отключение игроков /// По сути конец игры и отключение игроков
/// </summary> /// </summary>
public void CloseConnection() public void CloseConnection()
{ {
foreach (var item in clients) foreach (var item in clients)
{ {
@ -104,11 +117,11 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public void Start(object players) public void Start(object players)
{ {
serverTheread = new Thread(StartWaitingForPlayers); serverTheread = new Thread(StartWaitingForPlayers);
serverTheread.IsBackground = true;
serverTheread.Start(players); serverTheread.Start(players);
} }
//Потоки Клиентов //Потоки Клиентов
/// <summary> /// <summary>
/// Слушает игроков, которые хотят подключиться /// Слушает игроков, которые хотят подключиться
/// </summary> /// </summary>
@ -116,12 +129,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public void StartWaitingForPlayers(object players) public void StartWaitingForPlayers(object players)
{ {
int playNumber = (int)players; int playNumber = (int)players;
socket.Listen(playNumber); socket.Listen(playNumber);
for (int i = 0; i < playNumber; i++) for (int i = 0; i < playNumber; i++)
{ {
Socket client = socket.Accept(); Socket client = socket.Accept();
Thread thread = new Thread(StartListening); Thread thread = new Thread(StartListening);
thread.IsBackground = true;
thread.Start(client); thread.Start(client);
managerThread.Add(client, thread); managerThread.Add(client, thread);
clients.Add(client); //добавляем клиентов в лист clients.Add(client); //добавляем клиентов в лист

View file

@ -19,6 +19,7 @@ namespace ZoFo.GameCore
{ {
private ServerNetworkManager networkManager; private ServerNetworkManager networkManager;
private int ticks = 0; private int ticks = 0;
public string MyIp { get { return networkManager.InfoConnect.ToString(); } }
public Server() public Server()
{ {
networkManager = new ServerNetworkManager(); networkManager = new ServerNetworkManager();
@ -29,7 +30,7 @@ namespace ZoFo.GameCore
//TODO Comment pls //TODO Comment pls
public void OnDataSend(string data) public void OnDataSend(string data)
{ {
List<IUpdateData> updateDatas = JsonSerializer.Deserialize<List<IUpdateData>>(data); List<UpdateData> updateDatas = JsonSerializer.Deserialize<List<UpdateData>>(data);
for (int i = 0; i < updateDatas.Count; i++) for (int i = 0; i < updateDatas.Count; i++)
{ {
ProcessIUpdateData(updateDatas[i]); ProcessIUpdateData(updateDatas[i]);
@ -39,7 +40,7 @@ namespace ZoFo.GameCore
/// Обработка апдейтсов, которые нам прислал клиент /// Обработка апдейтсов, которые нам прислал клиент
/// </summary> /// </summary>
/// <param name="updateData"></param> /// <param name="updateData"></param>
public void ProcessIUpdateData(IUpdateData updateData) public void ProcessIUpdateData(UpdateData updateData)
{ {
//ТУТ Switch case будет честное слово //ТУТ Switch case будет честное слово