WorkServerWithGUI
This commit is contained in:
parent
ceb10ce7c4
commit
a644d6c02a
7 changed files with 45 additions and 33 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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); //добавляем клиентов в лист
|
||||||
|
|
|
@ -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 будет честное слово
|
||||||
|
|
Loading…
Add table
Reference in a new issue