diff --git a/Common/Database/User.cs b/Common/Database/User.cs index 52c1b1d..4deb060 100644 --- a/Common/Database/User.cs +++ b/Common/Database/User.cs @@ -1,5 +1,4 @@ -using MongoDB.Bson.Serialization.Attributes; -using MongoDB.Bson; +using MongoDB.Bson; using Common.Resources.Proto; using MongoDB.Driver; @@ -8,7 +7,7 @@ namespace Common.Database public class User { public static readonly IMongoCollection collection = Global.db.GetCollection("Users"); - + public static UserScheme CreateUser(string name) { UserScheme user = new() diff --git a/Common/Program.cs b/Common/Program.cs index a367ad5..4fcd45a 100644 --- a/Common/Program.cs +++ b/Common/Program.cs @@ -1,4 +1,5 @@ -using Config.Net; +using Common.Utils; +using Config.Net; using MongoDB.Driver; namespace Common @@ -6,6 +7,7 @@ namespace Common public static class Global { public static IConfig config = new ConfigurationBuilder().UseJsonFile("config.json").Build(); + public static Logger c = new("Global"); public static MongoClient MongoClient = new MongoClient(config.DatabaseUri); public static IMongoDatabase db = MongoClient.GetDatabase("PemukulPaku"); @@ -14,7 +16,7 @@ namespace Common public interface IConfig { - [Option(DefaultValue = VerboseLevel.Warns)] + [Option(DefaultValue = VerboseLevel.Normal)] VerboseLevel VerboseLevel { get; } [Option(DefaultValue = false)] @@ -57,8 +59,8 @@ namespace Common public enum VerboseLevel { - Errors = 0, - Warns = 1, + Silent = 0, + Normal = 1, Debug = 2 } } \ No newline at end of file diff --git a/Common/Utils/Logger.cs b/Common/Utils/Logger.cs new file mode 100644 index 0000000..0249da2 --- /dev/null +++ b/Common/Utils/Logger.cs @@ -0,0 +1,58 @@ +namespace Common.Utils +{ + public class Logger + { + private readonly string _name; + private readonly ConsoleColor _color; + + public Logger(string name, ConsoleColor color = ConsoleColor.Cyan) + { + _name = name; + _color = color; + } + + public void Log(params string[] message) + { + Console.ForegroundColor = ConsoleColor.White; + Console.Write(DateTime.Now.ToString("HH:mm:ss ")); + Console.ResetColor(); + Console.Write("<"); + Console.ForegroundColor = _color; + Console.Write(_name); + Console.ResetColor(); + Console.Write("> "); + Console.WriteLine(string.Join("\t", message)); + Console.ResetColor(); + } + + public void Warn(params string[] message) + { + Console.ForegroundColor = ConsoleColor.White; + Console.Write(DateTime.Now.ToString("HH:mm:ss ")); + Console.ResetColor(); + Console.Write("<"); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.Write(_name); + Console.ResetColor(); + Console.Write("> "); + Console.WriteLine(string.Join("\t", message)); + Console.ResetColor(); + } + + public void Error(params string[] message) + { + Console.ForegroundColor = ConsoleColor.White; + Console.Write(DateTime.Now.ToString("HH:mm:ss ")); + Console.ResetColor(); + Console.Write("<"); + Console.ForegroundColor = ConsoleColor.Red; + Console.Write(_name); + Console.ResetColor(); + Console.Write("> "); + Console.BackgroundColor = ConsoleColor.Cyan; + Console.BackgroundColor = ConsoleColor.DarkRed; + Console.WriteLine(string.Join("\t", message)); + Console.ResetColor(); + } + } +} diff --git a/Gameserver/Server.cs b/Gameserver/Server.cs new file mode 100644 index 0000000..b3d411e --- /dev/null +++ b/Gameserver/Server.cs @@ -0,0 +1,34 @@ +using System.Net.Sockets; +using System.Net; +using Common; +using Common.Utils; + +namespace PemukulPaku.Gameserver +{ + public class Server + { + public static Logger c = new("TCP", ConsoleColor.Blue); + + public static void Start() + { + TcpListener Listener = new(IPAddress.Parse("0.0.0.0"), (int)Global.config.Gameserver.Port); + + try + { + Listener.Start(); + c.Log($"TCP server started on port {Global.config.Gameserver.Port}"); + + while (true) + { + TcpClient Client = Listener.AcceptTcpClient(); + c.Warn($"{Client.Client.RemoteEndPoint} connected!"); + NetworkStream stream = Client.GetStream(); + } + } + catch (Exception ex) + { + c.Error("TCP server error: " + ex.Message); + } + } + } +} diff --git a/HttpServer/Program.cs b/HttpServer/Program.cs index d458630..c5c3e1e 100644 --- a/HttpServer/Program.cs +++ b/HttpServer/Program.cs @@ -1,10 +1,13 @@ using Common; +using Common.Utils; using HttpServer.Controllers; namespace HttpServer { public class Program { + private static readonly Logger c = new("HTTP", ConsoleColor.Green); + public static void Main() { Thread.CurrentThread.IsBackground = true; @@ -20,7 +23,38 @@ namespace HttpServer AccountController.AddHandlers(app); ConfigController.AddHandlers(app); + app.UseMiddleware(); + c.Log($"HTTP server started on port 80 & 443"); // A lie app.Run(); } + + private class RequestLoggingMiddleware + { + private readonly RequestDelegate _next; + private static readonly string[] SurpressedRoutes = new string[] { "/report", "/sdk/dataUpload" }; + + public RequestLoggingMiddleware(RequestDelegate next) + { + _next = next; + } + + public async Task Invoke(HttpContext context) + { + try + { + await _next(context); + } + finally + { + if ((int)Global.config.VerboseLevel > (int)VerboseLevel.Normal) + { + c.Log($"{context.Response.StatusCode} {context.Request.Method.ToUpper()} {context.Request.Path}"); + }else if(((int)Global.config.VerboseLevel > (int)VerboseLevel.Silent) && (Array.IndexOf(SurpressedRoutes, context.Request.Path.ToString()) == -1)) + { + c.Log($"{context.Response.StatusCode} {context.Request.Method.ToUpper()} {context.Request.Path}"); + } + } + } + } } } \ No newline at end of file diff --git a/Program.cs b/Program.cs index 1314649..85b17fc 100644 --- a/Program.cs +++ b/Program.cs @@ -1,6 +1,7 @@ using Common.Resources.Proto; using Common; using System.Net.NetworkInformation; +using PemukulPaku.Gameserver; namespace PemukulPaku { @@ -8,15 +9,17 @@ namespace PemukulPaku { public static void Main() { - Console.WriteLine("Hello!"); + Global.c.Log("Starting..."); + + Global.config.Gameserver.Host = NetworkInterface.GetAllNetworkInterfaces().Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback && i.OperationalStatus == OperationalStatus.Up).First().GetIPProperties().UnicastAddresses.Where(a => a.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).First().Address.ToString(); + GetPlayerTokenRsp getPlayerTokenRsp = new() { Msg = "Hello!" }; - new Thread(HttpServer.Program.Main).Start(); - Global.config.Gameserver.Host = NetworkInterface.GetAllNetworkInterfaces().Where(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback && i.OperationalStatus == OperationalStatus.Up).First().GetIPProperties().UnicastAddresses.Where(a => a.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork).First().Address.ToString(); - Console.WriteLine(Global.config.Gameserver.Host); + new Thread(HttpServer.Program.Main).Start(); + new Thread(Server.Start).Start(); Console.ReadKey(true); }