Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 27 additions & 9 deletions src/Perpetuum.AdminTool/LocalServerRunner.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Net;
Expand All @@ -17,6 +18,8 @@ public class LocalServerRunner
private bool _stopProbing;
private LogHandler _log;
private LocalServerState _localServerState;

private Dictionary<string, dynamic> _loadedConfig;
public LocalServerState State
{
get => _localServerState;
Expand Down Expand Up @@ -93,13 +96,25 @@ public void Run(string gameRoot, string pathToExecutable)
// save localserverinfo file
SaveLocalServerInfo(gameRoot, pathToExecutable);

var listeningPort = GetPortFromIni(gameRoot);
_loadedConfig = ReadConfigFromDisk(gameRoot);

var listeningPort = _loadedConfig["listenerPort"];
if (listeningPort <= 0)
{
_log.StatusError($"Wasn't able to get listening port from {PERPETUUMINIFILE}. No port probe is started.");
return;
}

var adminOnlyMode = _loadedConfig["adminOnlyMode"];
if (!adminOnlyMode)
{
_log.Log("AdminOnlyMode: Disabled (Default)");
}
else
{
_log.Log("AdminOnlyMode: Enabled");
}

//RunNetStatProbe(listeningPort);
RunSocketProbe(listeningPort);
}
Expand Down Expand Up @@ -335,26 +350,29 @@ private string NextIndicatorText()
return _indicatorPhases[_indicatorTextIndex];
}

private int GetPortFromIni(string gameRoot)
private Dictionary<string, dynamic> ReadConfigFromDisk(string gameRoot)
{
var perpetuumIni = Path.Combine(gameRoot, PERPETUUMINIFILE);
if (!File.Exists(perpetuumIni))
{
_log.StatusError($"{PERPETUUMINIFILE} was not found in game root {gameRoot} folder. Check your settings!" );
return -1;
_log.StatusError($"{PERPETUUMINIFILE} was not found in game root {gameRoot} folder. Check your settings!");
}

var json = File.ReadAllText(perpetuumIni);
var portData = JsonConvert.DeserializeAnonymousType(json,new
var listenerPort = JsonConvert.DeserializeAnonymousType(json, new
{
ListenerPort = -1,
});
var adminOnlyMode = JsonConvert.DeserializeAnonymousType(json, new
{
StartServerInAdminOnlyMode = false,
});

_log.Log($"Relay port loaded from {PERPETUUMINIFILE}: {portData.ListenerPort}");
Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
result.Add("listenerPort", listenerPort.ListenerPort);
result.Add("adminOnlyMode", adminOnlyMode.StartServerInAdminOnlyMode);

return portData.ListenerPort;
return result;
}


}
}
2 changes: 2 additions & 0 deletions src/Perpetuum.RequestHandlers/RelayClose.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ public RelayClose(IRelayStateService relayStateService)

public void HandleRequest(IRequest request)
{
_relayStateService.ConfigOnlyAllowAdmins(true);
_relayStateService.State = RelayState.OpenForAdminsOnly;

Message.Builder.FromRequest(request).WithOk().Send();
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/Perpetuum.RequestHandlers/RelayOpen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ public RelayOpen(IRelayStateService relayStateService)

public void HandleRequest(IRequest request)
{
_relayStateService.ConfigOnlyAllowAdmins(false);
_relayStateService.State = RelayState.OpenForPublic;

Message.Builder.FromRequest(request).WithOk().Send();
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/Perpetuum/GlobalConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,7 @@ public class GlobalConfiguration
public bool EnableDev { get; set; }

public CorporationConfiguration Corporation { get; set; }

public bool StartServerInAdminOnlyMode { get; set; }
}
}
1 change: 1 addition & 0 deletions src/Perpetuum/Services/Relay/IRelayStateService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ public interface IRelayStateService
RelayState State { get; set; }
event Action<RelayState> StateChanged;
void SendStateToClient(ISession session);
void ConfigOnlyAllowAdmins(bool enabled);
}
}
11 changes: 11 additions & 0 deletions src/Perpetuum/Services/Relay/RelayInfoBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,25 @@ public RelayInfoBuilder(GlobalConfiguration globalConfiguration, IRelayStateServ

public RelayInfo Build()
{
if (_globalConfiguration.StartServerInAdminOnlyMode)
{
_relayStateService.State = RelayState.OpenForAdminsOnly;
}

var info = new RelayInfo
{
state = _relayStateService.State,
name = _globalConfiguration.RelayName,
usersCount = _sessionManager.Sessions.Count(),
maxUsers = _sessionManager.MaxSessions
};

return info;
}

public void ConfigOnlyAllowAdmins(bool enabled)
{
_globalConfiguration.StartServerInAdminOnlyMode = enabled;
}
}
}
6 changes: 6 additions & 0 deletions src/Perpetuum/Services/Relay/RelayStateService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,11 @@ private MessageBuilder CreateStateMessageBuilder()
var info = builder.Build();
return Message.Builder.SetCommand(Commands.State).WithData(info.ToDictionary());
}

public void ConfigOnlyAllowAdmins(bool enabled)
{
var factory = _relayInfoBuilderFactory();
factory.ConfigOnlyAllowAdmins(enabled);
}
}
}