diff --git a/ServerProject-DONT-IMPORT-INTO-UNITY/Dockerfile b/ServerProject-DONT-IMPORT-INTO-UNITY/Dockerfile index 151629c..5f92663 100644 --- a/ServerProject-DONT-IMPORT-INTO-UNITY/Dockerfile +++ b/ServerProject-DONT-IMPORT-INTO-UNITY/Dockerfile @@ -10,6 +10,31 @@ RUN dotnet publish \ FROM mcr.microsoft.com/dotnet/runtime:5.0-alpine WORKDIR /lrm COPY --from=builder /build/ . -ENV LRM_CONFIG_PATH="/config/config.json" + +ENV NO_CONFIG="true" +ENV TRANSPORT_CLASS="kcp2k.KcpTransport" +ENV AUTH_KEY="Secret Auth Key" +ENV TRANSPORT_PORT="7777" +ENV UPDATE_LOOP_TIME="10" +ENV UPDATE_HEARTBEAT_INTERVAL="100" +ENV RANDOMLY_GENERATED_ID_LENGTH="5" +ENV USE_ENDPOINT="true" +ENV ENDPOINT_PORT="8080" +ENV ENDPOINT_SERVERLIST="true" +ENV ENABLE_NATPUNCH_SERVER="true" +ENV NAT_PUNCH_PORT="7776" +ENV USE_LOAD_BALANCER="false" +ENV LOAD_BALANCER_AUTH_KEY="AuthKey" +ENV LOAD_BALANCER_ADDRESS="127.0.0.1" +ENV LOAD_BALANCER_PORT="7070" +ENV LOAD_BALANCER_REGION="1" +ENV KCP_NODELAY="true" +ENV KCP_INTERVAL="10" +ENV KCP_FAST_RESEND="2" +ENV KCP_CONGESTION_WINDOW="false" +ENV KCP_SEND_WINDOW_SIZE="4096" +ENV KCP_RECEIVE_WINDOW_SIZE="4096" +ENV KCP_CONNECTION_TIMEOUT="10000" + CMD [ "./LRM" ] ENTRYPOINT [ "./LRM" ] diff --git a/ServerProject-DONT-IMPORT-INTO-UNITY/LRM/Program/Program.cs b/ServerProject-DONT-IMPORT-INTO-UNITY/LRM/Program/Program.cs index 3a5b6a3..bcb79cf 100644 --- a/ServerProject-DONT-IMPORT-INTO-UNITY/LRM/Program/Program.cs +++ b/ServerProject-DONT-IMPORT-INTO-UNITY/LRM/Program/Program.cs @@ -25,7 +25,9 @@ namespace LightReflectiveMirror GetPublicIP(); - if (!File.Exists(CONFIG_PATH)) + bool noConfig = bool.TryParse(Environment.GetEnvironmentVariable("NO_CONFIG") ?? "false", out noConfig) ? false : noConfig; + + if (!File.Exists(CONFIG_PATH) && !noConfig) { File.WriteAllText(CONFIG_PATH, JsonConvert.SerializeObject(new Config(), Formatting.Indented)); WriteLogMessage("A config.json file was generated. Please configure it to the proper settings and re-run!", ConsoleColor.Yellow); @@ -34,9 +36,31 @@ namespace LightReflectiveMirror } else { - conf = JsonConvert.DeserializeObject(File.ReadAllText(CONFIG_PATH)); - - ConfigureDocker(); + if (!noConfig) + { + conf = JsonConvert.DeserializeObject(File.ReadAllText(CONFIG_PATH)); + ConfigureDocker(); + } + else + { + conf = new Config(); + conf.TransportClass = Environment.GetEnvironmentVariable("TRANSPORT_CLASS") ?? "kcp2k.KcpTransport"; + conf.AuthenticationKey = Environment.GetEnvironmentVariable("AUTH_KEY") ?? "Secret Auth Key"; + conf.TransportPort = ushort.Parse(Environment.GetEnvironmentVariable("TRANSPORT_PORT") ?? "7777"); + conf.UpdateLoopTime = int.Parse(Environment.GetEnvironmentVariable("UPDATE_LOOP_TIME") ?? "10"); + conf.UpdateHeartbeatInterval = int.Parse(Environment.GetEnvironmentVariable("UPDATE_HEARTBEAT_INTERVAL") ?? "100"); + conf.RandomlyGeneratedIDLength = int.Parse(Environment.GetEnvironmentVariable("RANDOMLY_GENERATED_ID_LENGTH") ?? "5"); + conf.UseEndpoint = bool.Parse(Environment.GetEnvironmentVariable("USE_ENDPOINT") ?? "true"); + conf.EndpointPort = ushort.Parse(Environment.GetEnvironmentVariable("ENDPOINT_PORT") ?? "8080"); + conf.EndpointServerList = bool.Parse(Environment.GetEnvironmentVariable("ENDPOINT_SERVERLIST") ?? "true"); + conf.EnableNATPunchtroughServer = bool.Parse(Environment.GetEnvironmentVariable("ENABLE_NATPUNCH_SERVER") ?? "true"); + conf.NATPunchtroughPort = ushort.Parse(Environment.GetEnvironmentVariable("NAT_PUNCH_PORT") ?? "7776"); + conf.UseLoadBalancer = bool.Parse(Environment.GetEnvironmentVariable("USE_LOAD_BALANCER") ?? "false"); + conf.LoadBalancerAuthKey = Environment.GetEnvironmentVariable("LOAD_BALANCER_AUTH_KEY") ?? "AuthKey"; + conf.LoadBalancerAddress = Environment.GetEnvironmentVariable("LOAD_BALANCER_ADDRESS") ?? "127.0.0.1"; + conf.LoadBalancerPort = ushort.Parse(Environment.GetEnvironmentVariable("LOAD_BALANCER_PORT") ?? "7070"); + conf.LoadBalancerRegion = (LRMRegions)int.Parse(Environment.GetEnvironmentVariable("LOAD_BALANCER_REGION") ?? "1"); + } WriteLogMessage("Loading Assembly... ", ConsoleColor.White, true); try diff --git a/ServerProject-DONT-IMPORT-INTO-UNITY/MultiCompiled/KCP/KcpTransport.cs b/ServerProject-DONT-IMPORT-INTO-UNITY/MultiCompiled/KCP/KcpTransport.cs index 19d347c..ab0c629 100644 --- a/ServerProject-DONT-IMPORT-INTO-UNITY/MultiCompiled/KCP/KcpTransport.cs +++ b/ServerProject-DONT-IMPORT-INTO-UNITY/MultiCompiled/KCP/KcpTransport.cs @@ -43,13 +43,28 @@ namespace kcp2k { KCPConfig conf = new KCPConfig(); - if (!File.Exists("KCPConfig.json")) + + bool noConfig = bool.TryParse(Environment.GetEnvironmentVariable("NO_CONFIG") ?? "false", out noConfig) ? false : noConfig; + + if (!File.Exists("KCPConfig.json") && !noConfig) { File.WriteAllText("KCPConfig.json", JsonConvert.SerializeObject(conf, Formatting.Indented)); } else { - conf = JsonConvert.DeserializeObject(File.ReadAllText("KCPConfig.json")); + if (noConfig) + { + conf = new KCPConfig(); + conf.NoDelay = bool.Parse(Environment.GetEnvironmentVariable("KCP_NODELAY") ?? "true"); + conf.Interval = uint.Parse(Environment.GetEnvironmentVariable("KCP_INTERVAL") ?? "10"); + conf.FastResend = int.Parse(Environment.GetEnvironmentVariable("KCP_FAST_RESEND") ?? "2"); + conf.CongestionWindow = bool.Parse(Environment.GetEnvironmentVariable("KCP_CONGESTION_WINDOW") ?? "false"); + conf.SendWindowSize = uint.Parse(Environment.GetEnvironmentVariable("KCP_SEND_WINDOW_SIZE") ?? "4096"); + conf.ReceiveWindowSize = uint.Parse(Environment.GetEnvironmentVariable("KCP_RECEIVE_WINDOW_SIZE") ?? "4096"); + conf.ConnectionTimeout = int.Parse(Environment.GetEnvironmentVariable("KCP_CONNECTION_TIMEOUT") ?? "10000"); + } + else + conf = JsonConvert.DeserializeObject(File.ReadAllText("KCPConfig.json")); } NoDelay = conf.NoDelay;