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

View file

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

View file

@ -39,7 +39,16 @@ public class SelectModeMenu : AbstractGUI
singleButton.LeftButtonPressed += () =>
{
// 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);
@ -56,7 +65,12 @@ public class SelectModeMenu : AbstractGUI
{
AppManager.Instance.SetGUI(new SelectingServerGUI());
// 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);

View file

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

View file

@ -29,7 +29,10 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public ServerNetworkManager() { Init(); }
public void Init() //create Socket
/// <summary>
/// Initialize varibles and Sockets
/// </summary>
private void Init()
{
endPoint = new IPEndPoint(ip, port);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
@ -37,7 +40,9 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
clients = new List<Socket>();
updates = new List<IUpdateData>();
managerThread = new Dictionary<Socket, Thread>();
socket.Bind(endPoint);
}
/// <summary>
/// отправляет клиенту Data
/// </summary>
@ -50,6 +55,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
item.SendAsync(databytes);
}
}
/// <summary>
/// добавляет в лист updates новую data
/// </summary>
@ -57,8 +63,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
public void AddData(IUpdateData data)
{
updates.Add(data);
}
public void CloseConnection() //По сути коне игры и отключение игроков
}
/// <summary>
/// По сути конец игры и отключение игроков
/// </summary>
public void CloseConnection()
{
foreach (var item in clients)
{
@ -79,6 +89,10 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
clients.Clear();
}
/// <summary>
/// Начинает работу сервера (Ожидает подключений)
/// </summary>
/// <param name="players"></param>
public void Start(object players)
{
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;
socket.Bind(endPoint);
socket.Listen(playNumber);
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
Socket client = (Socket)socket;

View file

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