Merge branch 'ServerBranch' into Development

This commit is contained in:
SergoDobro 2024-08-16 15:12:39 +03:00 committed by GitHub
commit 10052927ae
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 59 additions and 17 deletions

View file

@ -13,6 +13,8 @@ namespace ZoFo.GameCore
public class Client public class Client
{ {
ClientNetworkManager networkManager; ClientNetworkManager networkManager;
public bool IsConnected { get { return networkManager.IsConnected; } }
public Client() public Client()
{ {
networkManager = new ClientNetworkManager(); networkManager = new ClientNetworkManager();
@ -24,19 +26,15 @@ namespace ZoFo.GameCore
List<IUpdateData> updateDatas = JsonSerializer.Deserialize<List<IUpdateData>>(data); List<IUpdateData> updateDatas = JsonSerializer.Deserialize<List<IUpdateData>>(data);
// тут будет switch // тут будет switch
} }
public void GameEndedUnexpectedly(){ } public void GameEndedUnexpectedly(){ }
public void JoinRoom(string ip) public void JoinRoom(string ip)
{ {
networkManager.JoinRoom(ip); networkManager.JoinRoom(ip);
} }
public void JoinYourself(){ networkManager.JoinYourself(); } public void JoinYourself(){ networkManager.JoinYourself(); }
internal void Update(GameTime gameTime) internal void Update(GameTime gameTime)
{ {
} }
internal void Draw(SpriteBatch spriteBatch) internal void Draw(SpriteBatch spriteBatch)
{ {
} }

View file

@ -39,8 +39,8 @@ public class MainMenuGUI : AbstractGUI
fontName = "Fonts\\Font" fontName = "Fonts\\Font"
}; };
playButton.LeftButtonPressed += () => playButton.LeftButtonPressed += () =>
{ {
AppManager.Instance.SetGUI(new SelectModeMenu()); AppManager.Instance.SetGUI(new SelectModeMenu());
}; };
Elements.Add(playButton); Elements.Add(playButton);
Button optionButton = new Button(Manager) Button optionButton = new Button(Manager)

View file

@ -39,7 +39,16 @@ public class SelectModeMenu : AbstractGUI
singleButton.LeftButtonPressed += () => singleButton.LeftButtonPressed += () =>
{ {
// single // single
Server server = new Server(); //Server Logic SinglePlayer
Client client = new Client();
server.CreateRoom(1);
client.JoinYourself();
AppManager.Instance.SetServer(server);
AppManager.Instance.SetClient(client);
AppManager.Instance.ChangeState(GameState.HostPlaying);
string key = client.IsConnected.ToString();
AppManager.Instance.debugHud.Set(key,"SinglePlayer");
// ваш код здесь // ваш код здесь
}; };
Elements.Add(singleButton); Elements.Add(singleButton);
@ -56,7 +65,12 @@ public class SelectModeMenu : AbstractGUI
{ {
AppManager.Instance.SetGUI(new SelectingServerGUI()); AppManager.Instance.SetGUI(new SelectingServerGUI());
// multi // multi
Server server = new Server(); //Server Logic SinglePlayer
Client client = new Client();
server.CreateRoom(1);
client.JoinYourself();
AppManager.Instance.SetServer(server);
AppManager.Instance.SetClient(client);
// ваш код здесь // ваш код здесь
}; };
Elements.Add(optionButton); Elements.Add(optionButton);

View file

@ -21,6 +21,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
List<IUpdateData> updates = new List<IUpdateData>(); List<IUpdateData> updates = new List<IUpdateData>();
public delegate void OnDataSent(string Data); public delegate void OnDataSent(string Data);
public event OnDataSent GetDataSent; // event public event OnDataSent GetDataSent; // event
public bool IsConnected { get { return socket.Connected; } }
public ClientNetworkManager() public ClientNetworkManager()
{ {
@ -64,8 +65,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
listen.Start(); listen.Start();
} }
/// <summary> /// <summary>
/// создается одиночная комната к которой ты подключаешься /// создается одиночная комната к которой ты подключаешься
/// </summary> /// </summary>
public void JoinYourself() // single player public void JoinYourself() // single player
{ {

View file

@ -29,7 +29,10 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public ServerNetworkManager() { Init(); } public ServerNetworkManager() { Init(); }
public void Init() //create Socket /// <summary>
/// Initialize varibles and Sockets
/// </summary>
private void Init()
{ {
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);
@ -37,7 +40,9 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
clients = new List<Socket>(); clients = new List<Socket>();
updates = new List<IUpdateData>(); updates = new List<IUpdateData>();
managerThread = new Dictionary<Socket, Thread>(); managerThread = new Dictionary<Socket, Thread>();
socket.Bind(endPoint);
} }
/// <summary> /// <summary>
/// отправляет клиенту Data /// отправляет клиенту Data
/// </summary> /// </summary>
@ -50,6 +55,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
item.SendAsync(databytes); item.SendAsync(databytes);
} }
} }
/// <summary> /// <summary>
/// добавляет в лист updates новую data /// добавляет в лист updates новую data
/// </summary> /// </summary>
@ -57,8 +63,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public void AddData(IUpdateData data) public void AddData(IUpdateData data)
{ {
updates.Add(data); updates.Add(data);
} }
public void CloseConnection() //По сути коне игры и отключение игроков
/// <summary>
/// По сути конец игры и отключение игроков
/// </summary>
public void CloseConnection()
{ {
foreach (var item in clients) foreach (var item in clients)
{ {
@ -79,6 +89,10 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
clients.Clear(); clients.Clear();
} }
/// <summary>
/// Начинает работу сервера (Ожидает подключений)
/// </summary>
/// <param name="players"></param>
public void Start(object players) public void Start(object players)
{ {
serverTheread = new Thread(StartWaitingForPlayers); serverTheread = new Thread(StartWaitingForPlayers);
@ -86,10 +100,15 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
} }
//Потоки Клиентов //Потоки Клиентов
public void StartWaitingForPlayers(object players)//Слушает игроков, которые хотят подключиться
/// <summary>
/// Слушает игроков, которые хотят подключиться
/// </summary>
/// <param name="players"></param>
public void StartWaitingForPlayers(object players)
{ {
int playNumber = (int)players; int playNumber = (int)players;
socket.Bind(endPoint);
socket.Listen(playNumber); socket.Listen(playNumber);
for (int i = 0; i < playNumber; i++) for (int i = 0; i < playNumber; i++)
{ {
@ -101,7 +120,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
} }
} }
private void StartListening(object socket)//начать слушать клиентов в самой игре активируют Ивент
/// <summary>
/// начать слушать клиентов в самой игре активируют Ивент
/// </summary>
/// <param name="socket"></param>
private void StartListening(object socket)
{ {
// obj to Socket // obj to Socket
Socket client = (Socket)socket; Socket client = (Socket)socket;

View file

@ -30,13 +30,14 @@ namespace ZoFo.GameCore
//ТУТ Switch case будет честное слово //ТУТ Switch case будет честное слово
} }
/// <summary> /// <summary>
/// Для красоты) Отдел Серверов /// Для красоты) Отдел Серверов
/// </summary> /// </summary>
/// <param name="data"></param> /// <param name="data"></param>
public void AddData(IUpdateData data)//добавляет в лист updates новую data public void AddData(IUpdateData data)//добавляет в лист updates новую data
{ {
networkManager.AddData(data); networkManager.AddData(data);
} }
/// <summary> /// <summary>
/// Создает комнату и запускает ожидание подключений /// Создает комнату и запускает ожидание подключений
/// </summary> /// </summary>
@ -61,6 +62,10 @@ namespace ZoFo.GameCore
{ {
} }
/// <summary>
/// Регистрирует игровой объект
/// </summary>
/// <param name="gameObject"></param>
public void RegisterEntity(GameObject gameObject) public void RegisterEntity(GameObject gameObject)
{ {
gameObjects.Add(gameObject); gameObjects.Add(gameObject);