Remove Password and Endpoint from OrderManager

This commit is contained in:
teinarss
2021-04-19 19:19:47 +02:00
committed by reaperrr
parent da4bf7f191
commit a1b3450b47
8 changed files with 43 additions and 32 deletions

View File

@@ -66,8 +66,14 @@ namespace OpenRA
if (recordReplay) if (recordReplay)
connection.StartRecording(() => { return TimestampedFilename(); }); connection.StartRecording(() => { return TimestampedFilename(); });
var om = new OrderManager(endpoint, password, connection); var om = new OrderManager(connection);
JoinInner(om); JoinInner(om);
CurrentServerSettings.Password = password;
CurrentServerSettings.Target = endpoint;
lastConnectionState = ConnectionState.PreConnecting;
ConnectionStateChanged(OrderManager, password, connection);
return om; return om;
} }
@@ -81,18 +87,16 @@ namespace OpenRA
{ {
OrderManager?.Dispose(); OrderManager?.Dispose();
OrderManager = om; OrderManager = om;
lastConnectionState = ConnectionState.PreConnecting;
ConnectionStateChanged(OrderManager);
} }
public static void JoinReplay(string replayFile) public static void JoinReplay(string replayFile)
{ {
JoinInner(new OrderManager(new ConnectionTarget(), "", new ReplayConnection(replayFile))); JoinInner(new OrderManager(new ReplayConnection(replayFile)));
} }
static void JoinLocal() static void JoinLocal()
{ {
JoinInner(new OrderManager(new ConnectionTarget(), "", new EchoConnection())); JoinInner(new OrderManager(new EchoConnection()));
} }
// More accurate replacement for Environment.TickCount // More accurate replacement for Environment.TickCount
@@ -104,7 +108,7 @@ namespace OpenRA
public static int LocalTick => OrderManager.LocalFrameNumber; public static int LocalTick => OrderManager.LocalFrameNumber;
public static event Action<ConnectionTarget> OnRemoteDirectConnect = _ => { }; public static event Action<ConnectionTarget> OnRemoteDirectConnect = _ => { };
public static event Action<OrderManager> ConnectionStateChanged = _ => { }; public static event Action<OrderManager, string, NetworkConnection> ConnectionStateChanged = (om, pass, conn) => { };
static ConnectionState lastConnectionState = ConnectionState.PreConnecting; static ConnectionState lastConnectionState = ConnectionState.PreConnecting;
public static int LocalClientId => OrderManager.Connection.LocalClientId; public static int LocalClientId => OrderManager.Connection.LocalClientId;
@@ -415,7 +419,7 @@ namespace OpenRA
{ {
// Clear static state if we have switched mods // Clear static state if we have switched mods
LobbyInfoChanged = () => { }; LobbyInfoChanged = () => { };
ConnectionStateChanged = om => { }; ConnectionStateChanged = (om, p, conn) => { };
BeforeGameStart = () => { }; BeforeGameStart = () => { };
OnRemoteDirectConnect = endpoint => { }; OnRemoteDirectConnect = endpoint => { };
delayedActions = new ActionQueue(); delayedActions = new ActionQueue();
@@ -652,7 +656,7 @@ namespace OpenRA
if (OrderManager.Connection.ConnectionState != lastConnectionState) if (OrderManager.Connection.ConnectionState != lastConnectionState)
{ {
lastConnectionState = OrderManager.Connection.ConnectionState; lastConnectionState = OrderManager.Connection.ConnectionState;
ConnectionStateChanged(OrderManager); ConnectionStateChanged(OrderManager, null, null);
} }
InnerLogicTick(OrderManager); InnerLogicTick(OrderManager);
@@ -997,4 +1001,10 @@ namespace OpenRA
} }
} }
} }
public static class CurrentServerSettings
{
public static string Password;
public static ConnectionTarget Target;
}
} }

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Network
void Receive(Action<int, byte[]> packetFn); void Receive(Action<int, byte[]> packetFn);
} }
class EchoConnection : IConnection public class EchoConnection : IConnection
{ {
protected struct ReceivedPacket protected struct ReceivedPacket
{ {
@@ -136,9 +136,9 @@ namespace OpenRA.Network
} }
} }
sealed class NetworkConnection : EchoConnection public sealed class NetworkConnection : EchoConnection
{ {
readonly ConnectionTarget target; public readonly ConnectionTarget Target;
TcpClient tcp; TcpClient tcp;
IPEndPoint endpoint; IPEndPoint endpoint;
readonly List<byte[]> queuedSyncPackets = new List<byte[]>(); readonly List<byte[]> queuedSyncPackets = new List<byte[]>();
@@ -153,7 +153,7 @@ namespace OpenRA.Network
public NetworkConnection(ConnectionTarget target) public NetworkConnection(ConnectionTarget target)
{ {
this.target = target; Target = target;
new Thread(NetworkConnectionConnect) new Thread(NetworkConnectionConnect)
{ {
Name = $"{GetType().Name} (connect to {target})", Name = $"{GetType().Name} (connect to {target})",
@@ -166,7 +166,7 @@ namespace OpenRA.Network
var queue = new BlockingCollection<TcpClient>(); var queue = new BlockingCollection<TcpClient>();
var atLeastOneEndpoint = false; var atLeastOneEndpoint = false;
foreach (var endpoint in target.GetConnectEndPoints()) foreach (var endpoint in Target.GetConnectEndPoints())
{ {
atLeastOneEndpoint = true; atLeastOneEndpoint = true;
new Thread(() => new Thread(() =>

View File

@@ -28,9 +28,6 @@ namespace OpenRA.Network
public Session.Client LocalClient => LobbyInfo.ClientWithIndex(Connection.LocalClientId); public Session.Client LocalClient => LobbyInfo.ClientWithIndex(Connection.LocalClientId);
public World World; public World World;
public readonly ConnectionTarget Endpoint;
public readonly string Password = "";
public string ServerError = null; public string ServerError = null;
public bool AuthenticationFailed = false; public bool AuthenticationFailed = false;
public ExternalMod ServerExternalMod = null; public ExternalMod ServerExternalMod = null;
@@ -94,10 +91,8 @@ namespace OpenRA.Network
Connection.Send(i, new List<byte[]>()); Connection.Send(i, new List<byte[]>());
} }
public OrderManager(ConnectionTarget endpoint, string password, IConnection conn) public OrderManager(IConnection conn)
{ {
Endpoint = endpoint;
Password = password;
Connection = conn; Connection = conn;
syncReport = new SyncReport(this); syncReport = new SyncReport(this);
AddChatLine += CacheChatLine; AddChatLine += CacheChatLine;

View File

@@ -17,7 +17,7 @@ using OpenRA.FileFormats;
namespace OpenRA.Network namespace OpenRA.Network
{ {
sealed class ReplayRecorder public sealed class ReplayRecorder
{ {
// Arbitrary value. // Arbitrary value.
const int CreateReplayFileMaxRetryCount = 128; const int CreateReplayFileMaxRetryCount = 128;

View File

@@ -218,7 +218,7 @@ namespace OpenRA.Network
Client = info, Client = info,
Mod = mod.Id, Mod = mod.Id,
Version = mod.Metadata.Version, Version = mod.Metadata.Version,
Password = orderManager.Password, Password = CurrentServerSettings.Password,
Fingerprint = localProfile.Fingerprint, Fingerprint = localProfile.Fingerprint,
OrdersProtocol = ProtocolVersion.Orders OrdersProtocol = ProtocolVersion.Orders
}; };

View File

@@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Action onConnect, onAbort; Action onConnect, onAbort;
Action<string> onRetry; Action<string> onRetry;
void ConnectionStateChanged(OrderManager om) void ConnectionStateChanged(OrderManager om, string password, NetworkConnection connection)
{ {
if (om.Connection.ConnectionState == ConnectionState.Connected) if (om.Connection.ConnectionState == ConnectionState.Connected)
{ {
@@ -35,6 +35,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Ui.OpenWindow(switchPanel, new WidgetArgs() Ui.OpenWindow(switchPanel, new WidgetArgs()
{ {
{ "orderManager", om }, { "orderManager", om },
{ "connection", connection },
{ "password", password },
{ "onAbort", onAbort }, { "onAbort", onAbort },
{ "onRetry", onRetry } { "onRetry", onRetry }
}); });
@@ -83,7 +85,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
bool passwordOffsetAdjusted; bool passwordOffsetAdjusted;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public ConnectionFailedLogic(Widget widget, OrderManager orderManager, Action onAbort, Action<string> onRetry) public ConnectionFailedLogic(Widget widget, OrderManager orderManager, NetworkConnection connection, string password, Action onAbort, Action<string> onRetry)
{ {
var panel = widget; var panel = widget;
var abortButton = panel.Get<ButtonWidget>("ABORT_BUTTON"); var abortButton = panel.Get<ButtonWidget>("ABORT_BUTTON");
@@ -95,13 +97,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
retryButton.Visible = onRetry != null; retryButton.Visible = onRetry != null;
retryButton.OnClick = () => retryButton.OnClick = () =>
{ {
var password = passwordField != null && passwordField.IsVisible() ? passwordField.Text : orderManager.Password; var pass = passwordField != null && passwordField.IsVisible() ? passwordField.Text : password;
Ui.CloseWindow(); Ui.CloseWindow();
onRetry(password); onRetry(pass);
}; };
widget.Get<LabelWidget>("CONNECTING_DESC").GetText = () => $"Could not connect to {orderManager.Endpoint}"; widget.Get<LabelWidget>("CONNECTING_DESC").GetText = () => $"Could not connect to {connection.Target}";
var connectionError = widget.Get<LabelWidget>("CONNECTION_ERROR"); var connectionError = widget.Get<LabelWidget>("CONNECTION_ERROR");
connectionError.GetText = () => orderManager.ServerError ?? orderManager.Connection.ErrorMessage ?? "Unknown error"; connectionError.GetText = () => orderManager.ServerError ?? orderManager.Connection.ErrorMessage ?? "Unknown error";
@@ -149,7 +151,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
public class ConnectionSwitchModLogic : ChromeLogic public class ConnectionSwitchModLogic : ChromeLogic
{ {
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public ConnectionSwitchModLogic(Widget widget, OrderManager orderManager, Action onAbort, Action<string> onRetry) public ConnectionSwitchModLogic(Widget widget, OrderManager orderManager, string password, NetworkConnection connection, Action onAbort, Action<string> onRetry)
{ {
var panel = widget; var panel = widget;
var abortButton = panel.Get<ButtonWidget>("ABORT_BUTTON"); var abortButton = panel.Get<ButtonWidget>("ABORT_BUTTON");
@@ -161,7 +163,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
switchButton.OnClick = () => switchButton.OnClick = () =>
{ {
var launchCommand = $"Launch.URI={new UriBuilder("tcp", orderManager.Connection.EndPoint.Address.ToString(), orderManager.Connection.EndPoint.Port)}"; var launchCommand = $"Launch.URI={new UriBuilder("tcp", connection.EndPoint.Address.ToString(), connection.EndPoint.Port)}";
Game.SwitchToExternalMod(orderManager.ServerExternalMod, new[] { launchCommand }, () => Game.SwitchToExternalMod(orderManager.ServerExternalMod, new[] { launchCommand }, () =>
{ {
orderManager.ServerError = "Failed to switch mod."; orderManager.ServerError = "Failed to switch mod.";

View File

@@ -28,6 +28,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Game.RunAfterTick(() => Ui.OpenWindow("CONNECTIONFAILED_PANEL", new WidgetArgs Game.RunAfterTick(() => Ui.OpenWindow("CONNECTIONFAILED_PANEL", new WidgetArgs
{ {
{ "orderManager", orderManager }, { "orderManager", orderManager },
{ "password", CurrentServerSettings.Password },
{ "connection", orderManager.Connection as NetworkConnection },
{ "onAbort", null }, { "onAbort", null },
{ "onRetry", null } { "onRetry", null }
})); }));

View File

@@ -72,9 +72,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
bool MapIsPlayable => (mapStatus & Session.MapStatus.Playable) == Session.MapStatus.Playable; bool MapIsPlayable => (mapStatus & Session.MapStatus.Playable) == Session.MapStatus.Playable;
// Listen for connection failures // Listen for connection failures
void ConnectionStateChanged(OrderManager om) void ConnectionStateChanged(OrderManager om, string password, NetworkConnection connection)
{ {
if (om.Connection.ConnectionState == ConnectionState.NotConnected) if (connection.ConnectionState == ConnectionState.NotConnected)
{ {
// Show connection failed dialog // Show connection failed dialog
Ui.CloseWindow(); Ui.CloseWindow();
@@ -89,12 +89,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}); });
}; };
Action<string> onRetry = password => ConnectionLogic.Connect(om.Endpoint, password, onConnect, onExit); Action<string> onRetry = pass => ConnectionLogic.Connect(connection.Target, pass, onConnect, onExit);
var switchPanel = om.ServerExternalMod != null ? "CONNECTION_SWITCHMOD_PANEL" : "CONNECTIONFAILED_PANEL"; var switchPanel = om.ServerExternalMod != null ? "CONNECTION_SWITCHMOD_PANEL" : "CONNECTIONFAILED_PANEL";
Ui.OpenWindow(switchPanel, new WidgetArgs() Ui.OpenWindow(switchPanel, new WidgetArgs()
{ {
{ "orderManager", om }, { "orderManager", om },
{ "connection", connection },
{ "password", password },
{ "onAbort", onExit }, { "onAbort", onExit },
{ "onRetry", onRetry } { "onRetry", onRetry }
}); });
@@ -762,7 +764,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
string secret = null; string secret = null;
if (orderManager.LobbyInfo.GlobalSettings.Dedicated) if (orderManager.LobbyInfo.GlobalSettings.Dedicated)
{ {
var endpoint = orderManager.Endpoint.GetConnectEndPoints().First(); var endpoint = CurrentServerSettings.Target.GetConnectEndPoints().First();
secret = string.Concat(endpoint.Address, "|", endpoint.Port); secret = string.Concat(endpoint.Address, "|", endpoint.Port);
} }