refactor: pong universe client and server application code separated

This commit is contained in:
Syntriax 2025-06-21 00:35:32 +03:00
parent abc467d1ea
commit 5df09f64e2
3 changed files with 52 additions and 44 deletions

View File

@ -4,23 +4,33 @@ using System.Linq;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using Pong;
using Syntriax.Engine.Core; using Syntriax.Engine.Core;
using Syntriax.Engine.Core.Debug; using Syntriax.Engine.Core.Debug;
using Syntriax.Engine.Core.Serialization;
using Syntriax.Engine.Integration.MonoGame; using Syntriax.Engine.Integration.MonoGame;
using Syntriax.Engine.Serializers.Yaml;
bool isServerEnabled = Environment.GetCommandLineArgs().FirstOrDefault(x => x.CompareTo("--server") == 0) is not null;
Universe universe = new(); Universe universe = new();
FileLogger fileLogger = new($"{Path.Combine(Directory.GetCurrentDirectory(), "logs", DateTime.UtcNow.ToString("yyyy-MM-dd_HH-mm-ss"))}.log"); ISerializer serializer = new YamlSerializer();
ILogger logger = new FileLogger($"logs/{DateTime.UtcNow:yyyy-MM-dd_HH-mm-ss}.log");
#if DEBUG #if DEBUG
universe.InstantiateUniverseObject().SetUniverseObject("Logger").BehaviourController.AddBehaviour<LoggerContainer>().Logger = new LoggerWrapper(fileLogger, new ConsoleLogger()); logger = new LoggerWrapper(logger, new ConsoleLogger());
#else
universe.InstantiateUniverseObject().SetUniverseObject("Logger").BehaviourController.AddBehaviour<LoggerContainer>().Logger = firstLogger;
#endif #endif
Pong.PongUniverse.ApplyPongUniverse(universe, isServerEnabled, isClientEnabled: true); universe.InstantiateUniverseObject().SetUniverseObject("Logger").BehaviourController.AddBehaviour<LoggerContainer>().Logger = logger;
bool isServerEnabled = Environment.GetCommandLineArgs().FirstOrDefault(x => x.CompareTo("--server") == 0) is not null;
if (isServerEnabled)
PongUniverse.ApplyPongServer(universe, 8888);
PongUniverse.ApplyPongClient(universe, "localhost", 8888);
PongUniverse.ApplyPongUniverse(universe);
universe.InstantiateUniverseObject().SetUniverseObject("Desktop HO") universe.InstantiateUniverseObject().SetUniverseObject("Desktop HO")
.BehaviourController.AddBehaviour<KeyboardInputsBehaviour>(); .BehaviourController.AddBehaviour<KeyboardInputsBehaviour>();

View File

@ -1,5 +1,4 @@
using System; using System;
using System.IO;
using System.Threading; using System.Threading;
using Syntriax.Engine.Core; using Syntriax.Engine.Core;
@ -7,11 +6,12 @@ using Syntriax.Engine.Core.Debug;
Universe universe = new(); Universe universe = new();
FileLogger fileLogger = new($"{Path.Combine(Directory.GetCurrentDirectory(), "logs", DateTime.UtcNow.ToString("yyyy-MM-dd_HH-mm-ss"))}.log"); FileLogger fileLogger = new($"logs/{DateTime.UtcNow:yyyy-MM-dd_HH-mm-ss}.log");
universe.InstantiateUniverseObject().SetUniverseObject("Logger").BehaviourController universe.InstantiateUniverseObject().SetUniverseObject("Logger").BehaviourController
.AddBehaviour<LoggerContainer>().Logger = new LoggerWrapper(fileLogger, new ConsoleLogger()); .AddBehaviour<LoggerContainer>().Logger = new LoggerWrapper(fileLogger, new ConsoleLogger());
Pong.PongUniverse.ApplyPongUniverse(universe, isServerEnabled: true, isClientEnabled: false); Pong.PongUniverse.ApplyPongServer(universe, int.Parse(Environment.GetEnvironmentVariable("PORT") ?? "8888"));
Pong.PongUniverse.ApplyPongUniverse(universe);
DateTime lastRun = DateTime.UtcNow; DateTime lastRun = DateTime.UtcNow;
TimeSpan interval = new(0, 0, 0, 0, 16); TimeSpan interval = new(0, 0, 0, 0, 16);

View File

@ -15,20 +15,11 @@ namespace Pong;
public static class PongUniverse public static class PongUniverse
{ {
public static IUniverse ApplyPongUniverse(Universe universe, bool isServerEnabled, bool isClientEnabled) public static IUniverse ApplyPongClient(Universe universe, string server, int port)
{
if (isServerEnabled)
{
LiteNetLibServer server = universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour<LiteNetLibServer>();
server.BehaviourController.AddBehaviour<NetworkManager>();
server.Start(8888, 2);
}
if (isClientEnabled)
{ {
LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour<LiteNetLibClient>(); LiteNetLibClient client = universe.InstantiateUniverseObject().SetUniverseObject("Client").BehaviourController.AddBehaviour<LiteNetLibClient>();
client.BehaviourController.AddBehaviour<NetworkManager>(); client.BehaviourController.AddBehaviour<NetworkManager>();
client.Connect("localhost", 8888); client.Connect(server, port);
DrawManager drawManager = universe.InstantiateUniverseObject().SetUniverseObject("Draw Manager").BehaviourController.AddBehaviour<DrawManager>(); DrawManager drawManager = universe.InstantiateUniverseObject().SetUniverseObject("Draw Manager").BehaviourController.AddBehaviour<DrawManager>();
universe.InstantiateUniverseObject().SetUniverseObject("Triangle Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour<TriangleBatcher>(); universe.InstantiateUniverseObject().SetUniverseObject("Triangle Batcher", drawManager.UniverseObject).BehaviourController.AddBehaviour<TriangleBatcher>();
@ -50,8 +41,21 @@ public static class PongUniverse
universe.InstantiateUniverseObject().SetUniverseObject("Score Right") universe.InstantiateUniverseObject().SetUniverseObject("Score Right")
.BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(250f, 250f), scale: Vector2D.One * .25f) .BehaviourController.AddBehaviour<Transform2D>().SetTransform(position: new Vector2D(250f, 250f), scale: Vector2D.One * .25f)
.BehaviourController.AddBehaviour<TextScoreBehaviour>(false); .BehaviourController.AddBehaviour<TextScoreBehaviour>(false);
return universe;
} }
public static IUniverse ApplyPongServer(Universe universe, int port)
{
LiteNetLibServer server = universe.InstantiateUniverseObject().SetUniverseObject("Server").BehaviourController.AddBehaviour<LiteNetLibServer>();
server.BehaviourController.AddBehaviour<NetworkManager>();
server.Start(port, 2);
return universe;
}
public static IUniverse ApplyPongUniverse(Universe universe)
{
universe.InstantiateUniverseObject().SetUniverseObject("Update Manager").BehaviourController.AddBehaviour<UpdateManager>(); universe.InstantiateUniverseObject().SetUniverseObject("Update Manager").BehaviourController.AddBehaviour<UpdateManager>();
universe.InstantiateUniverseObject().SetUniverseObject("Coroutine Manager").BehaviourController.AddBehaviour<CoroutineManager>(); universe.InstantiateUniverseObject().SetUniverseObject("Coroutine Manager").BehaviourController.AddBehaviour<CoroutineManager>();
universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour<TweenManager>(); universe.InstantiateUniverseObject().SetUniverseObject("Tween Manager").BehaviourController.AddBehaviour<TweenManager>();
@ -116,10 +120,4 @@ public static class PongUniverse
return universe; return universe;
} }
public static IUniverse GetPongUniverse(bool isServerEnabled, bool isClientEnabled)
{
Universe universe = new();
return ApplyPongUniverse(universe, isServerEnabled, isClientEnabled);
}
} }