Merge branch 'master' of https://github.com/Regalis11/Barotrauma into develop
This commit is contained in:
@@ -162,7 +162,7 @@ namespace Barotrauma.Networking
|
||||
set;
|
||||
}
|
||||
|
||||
private readonly Endpoint serverEndpoint;
|
||||
private readonly ImmutableArray<Endpoint> serverEndpoints;
|
||||
private readonly Option<int> ownerKey;
|
||||
|
||||
public bool IsServerOwner => ownerKey.IsSome();
|
||||
@@ -182,6 +182,9 @@ namespace Barotrauma.Networking
|
||||
public readonly NamedEvent<PermissionChangedEvent> OnPermissionChanged = new NamedEvent<PermissionChangedEvent>();
|
||||
|
||||
public GameClient(string newName, Endpoint endpoint, string serverName, Option<int> ownerKey)
|
||||
: this(newName, endpoint.ToEnumerable().ToImmutableArray(), serverName, ownerKey) { }
|
||||
|
||||
public GameClient(string newName, ImmutableArray<Endpoint> endpoints, string serverName, Option<int> ownerKey)
|
||||
{
|
||||
//TODO: gui stuff should probably not be here?
|
||||
this.ownerKey = ownerKey;
|
||||
@@ -270,7 +273,7 @@ namespace Barotrauma.Networking
|
||||
ServerSettings = new ServerSettings(this, "Server", 0, 0, 0, false, false, System.Net.IPAddress.Any);
|
||||
Voting = new Voting();
|
||||
|
||||
serverEndpoint = endpoint;
|
||||
serverEndpoints = endpoints;
|
||||
InitiateServerJoin(serverName);
|
||||
|
||||
//ServerLog = new ServerLog("");
|
||||
@@ -281,7 +284,7 @@ namespace Barotrauma.Networking
|
||||
|
||||
public ServerInfo CreateServerInfoFromSettings()
|
||||
{
|
||||
var serverInfo = ServerInfo.FromServerConnection(ClientPeer.ServerConnection, ServerSettings);
|
||||
var serverInfo = ServerInfo.FromServerEndpoints(ClientPeer.AllServerEndpoints, ServerSettings);
|
||||
GameMain.ServerListScreen.UpdateOrAddServerInfo(serverInfo);
|
||||
return serverInfo;
|
||||
}
|
||||
@@ -327,11 +330,14 @@ namespace Barotrauma.Networking
|
||||
ReadDataMessage,
|
||||
OnClientPeerDisconnect,
|
||||
OnConnectionInitializationComplete);
|
||||
return serverEndpoint switch
|
||||
{
|
||||
LidgrenEndpoint lidgrenEndpoint => new LidgrenClientPeer(lidgrenEndpoint, callbacks, ownerKey),
|
||||
SteamP2PEndpoint _ when ownerKey.TryUnwrap(out var key) => new SteamP2POwnerPeer(callbacks, key),
|
||||
SteamP2PEndpoint steamP2PServerEndpoint when ownerKey.IsNone() => new SteamP2PClientPeer(steamP2PServerEndpoint, callbacks),
|
||||
return serverEndpoints.First() switch
|
||||
{
|
||||
LidgrenEndpoint lidgrenEndpoint
|
||||
=> new LidgrenClientPeer(lidgrenEndpoint, callbacks, ownerKey),
|
||||
P2PEndpoint when ownerKey.TryUnwrap(out int key)
|
||||
=> new P2POwnerPeer(callbacks, key, serverEndpoints.Cast<P2PEndpoint>().ToImmutableArray()),
|
||||
P2PEndpoint when ownerKey.IsNone()
|
||||
=> new P2PClientPeer(serverEndpoints.Cast<P2PEndpoint>().ToImmutableArray(), callbacks),
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
}
|
||||
@@ -802,6 +808,9 @@ namespace Barotrauma.Networking
|
||||
case ServerPacketHeader.ACHIEVEMENT:
|
||||
ReadAchievement(inc);
|
||||
break;
|
||||
case ServerPacketHeader.ACHIEVEMENT_STAT:
|
||||
ReadAchievementStat(inc);
|
||||
break;
|
||||
case ServerPacketHeader.CHEATS_ENABLED:
|
||||
bool cheatsEnabled = inc.ReadBoolean();
|
||||
inc.ReadPadBits();
|
||||
@@ -812,7 +821,7 @@ namespace Barotrauma.Networking
|
||||
else
|
||||
{
|
||||
DebugConsole.CheatsEnabled = cheatsEnabled;
|
||||
SteamAchievementManager.CheatsEnabled = cheatsEnabled;
|
||||
AchievementManager.CheatsEnabled = cheatsEnabled;
|
||||
if (cheatsEnabled)
|
||||
{
|
||||
var cheatMessageBox = new GUIMessageBox(TextManager.Get("CheatsEnabledTitle"), TextManager.Get("CheatsEnabledDescription"));
|
||||
@@ -860,7 +869,7 @@ namespace Barotrauma.Networking
|
||||
|
||||
private void ReadStartGameFinalize(IReadMessage inc)
|
||||
{
|
||||
TaskPool.ListTasks();
|
||||
TaskPool.ListTasks(DebugConsole.Log);
|
||||
ushort contentToPreloadCount = inc.ReadUInt16();
|
||||
List<ContentFile> contentToPreload = new List<ContentFile>();
|
||||
for (int i = 0; i < contentToPreloadCount; i++)
|
||||
@@ -997,8 +1006,9 @@ namespace Barotrauma.Networking
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ClientPeer is SteamP2PClientPeer or SteamP2POwnerPeer)
|
||||
if (ClientPeer is P2PClientPeer or P2POwnerPeer)
|
||||
{
|
||||
Eos.EosSessionManager.LeaveSession();
|
||||
SteamManager.LeaveLobby();
|
||||
}
|
||||
|
||||
@@ -1007,10 +1017,7 @@ namespace Barotrauma.Networking
|
||||
|
||||
GameMain.GameSession?.Campaign?.CancelStartRound();
|
||||
|
||||
if (SteamManager.IsInitialized)
|
||||
{
|
||||
Steamworks.SteamFriends.ClearRichPresence();
|
||||
}
|
||||
UpdatePresence("");
|
||||
foreach (var fileTransfer in FileReceiver.ActiveTransfers.ToArray())
|
||||
{
|
||||
FileReceiver.StopTransfer(fileTransfer, deleteFile: true);
|
||||
@@ -1099,19 +1106,47 @@ namespace Barotrauma.Networking
|
||||
ClientPeer.ServerContentPackages = prevContentPackages;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnConnectionInitializationComplete()
|
||||
|
||||
private void UpdatePresence(string connectCommand)
|
||||
{
|
||||
#warning TODO: use store localization functionality
|
||||
var desc = TextManager.GetWithVariable("FriendPlayingOnServer", "[servername]", ServerName);
|
||||
|
||||
async Task updateEosPresence()
|
||||
{
|
||||
var epicIds = EosInterface.IdQueries.GetLoggedInEpicIds();
|
||||
if (!epicIds.FirstOrNone().TryUnwrap(out var epicAccountId)) { return; }
|
||||
|
||||
var setPresenceResult = await EosInterface.Presence.SetJoinCommand(
|
||||
epicAccountId: epicAccountId,
|
||||
desc: desc.Value,
|
||||
serverName: ServerName,
|
||||
joinCommand: connectCommand);
|
||||
DebugConsole.NewMessage($"Set connect command: {connectCommand}, result: {setPresenceResult}");
|
||||
}
|
||||
|
||||
TaskPool.Add(
|
||||
"UpdateEosPresence",
|
||||
updateEosPresence(),
|
||||
static _ => { });
|
||||
|
||||
if (SteamManager.IsInitialized)
|
||||
{
|
||||
Steamworks.SteamFriends.ClearRichPresence();
|
||||
Steamworks.SteamFriends.SetRichPresence("servername", ServerName);
|
||||
#warning TODO: use Steamworks localization functionality
|
||||
Steamworks.SteamFriends.SetRichPresence("status",
|
||||
TextManager.GetWithVariable("FriendPlayingOnServer", "[servername]", ServerName).Value);
|
||||
Steamworks.SteamFriends.SetRichPresence("connect",
|
||||
$"-connect \"{ToolBox.EscapeCharacters(ServerName)}\" {serverEndpoint}");
|
||||
if (!connectCommand.IsNullOrWhiteSpace())
|
||||
{
|
||||
Steamworks.SteamFriends.SetRichPresence("servername", ServerName);
|
||||
Steamworks.SteamFriends.SetRichPresence("status",
|
||||
desc.Value);
|
||||
Steamworks.SteamFriends.SetRichPresence("connect",
|
||||
connectCommand);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnConnectionInitializationComplete()
|
||||
{
|
||||
UpdatePresence($"-connect \"{ToolBox.EscapeCharacters(ServerName)}\" {string.Join(",", serverEndpoints.Select(e => e.StringRepresentation))}");
|
||||
|
||||
canStart = true;
|
||||
connected = true;
|
||||
@@ -1169,18 +1204,16 @@ namespace Barotrauma.Networking
|
||||
}
|
||||
|
||||
|
||||
private void ReadAchievement(IReadMessage inc)
|
||||
private static void ReadAchievement(IReadMessage inc)
|
||||
{
|
||||
Identifier achievementIdentifier = inc.ReadIdentifier();
|
||||
int amount = inc.ReadInt32();
|
||||
if (amount == 0)
|
||||
{
|
||||
SteamAchievementManager.UnlockAchievement(achievementIdentifier);
|
||||
}
|
||||
else
|
||||
{
|
||||
SteamAchievementManager.IncrementStat(achievementIdentifier, amount);
|
||||
}
|
||||
AchievementManager.UnlockAchievement(achievementIdentifier);
|
||||
}
|
||||
|
||||
private static void ReadAchievementStat(IReadMessage inc)
|
||||
{
|
||||
var netStat = INetSerializableStruct.Read<NetIncrementedStat>(inc);
|
||||
AchievementManager.IncrementStat(netStat.Stat, netStat.Amount);
|
||||
}
|
||||
|
||||
private static void ReadCircuitBoxMessage(IReadMessage inc)
|
||||
@@ -1887,8 +1920,9 @@ namespace Barotrauma.Networking
|
||||
}
|
||||
if (updateClientListId) { LastClientListUpdateID = listId; }
|
||||
|
||||
if (ClientPeer is SteamP2POwnerPeer)
|
||||
if (ClientPeer is P2POwnerPeer)
|
||||
{
|
||||
Eos.EosSessionManager.UpdateOwnedSession(ClientPeer.ServerConnection.Endpoint, ServerSettings);
|
||||
TaskPool.Add("WaitForPingDataAsync (owner)",
|
||||
Steamworks.SteamNetworkingUtils.WaitForPingDataAsync(), (task) =>
|
||||
{
|
||||
@@ -2031,8 +2065,9 @@ namespace Barotrauma.Networking
|
||||
ServerSettings.AllowSubVoting = allowSubVoting;
|
||||
ServerSettings.AllowModeVoting = allowModeVoting;
|
||||
|
||||
if (ClientPeer is SteamP2POwnerPeer)
|
||||
if (ClientPeer is P2POwnerPeer)
|
||||
{
|
||||
Eos.EosSessionManager.UpdateOwnedSession(ClientPeer.ServerConnection.Endpoint, ServerSettings);
|
||||
Steam.SteamManager.UpdateLobby(ServerSettings);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user