mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-14 19:29:36 +01:00
* Multiple CEF instances on a single machine * remove unused * meh implementation * cefextension * me when partials, race conditions and extractiion of methods exists * Change remote debugging handling It now defaults to 9222 again. This doesn't seem to cause any issues when launching 3 clients. The debug port can be reconfigured via CVar if desired. Also disabled debugging by default outside dev builds. * Lower MaxAttempts to 15 100 was way too much and gave me anxiety idk. * Fix non-TOOLS default of remote debug port * Rewrite locking implementation. It is much smaller, less complicated and probably more robust too. Should be fully atomic (the previous one wasn't). * Undo unnecessary style changes --------- Co-authored-by: PJB3005 <pieterjan.briers+git@gmail.com>
52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
using System;
|
|
using System.IO;
|
|
using Robust.Client.Utility;
|
|
|
|
namespace Robust.Client.WebView.Cef;
|
|
|
|
internal sealed partial class WebViewManagerCef
|
|
{
|
|
private const string BaseCacheName = "cef_cache";
|
|
private const string LockFileName = "robust.lock";
|
|
private FileStream? _lockFileStream;
|
|
private const int MaxAttempts = 15; // This probably shouldn't be a cvar because the only reason you'd need it change for legit just botting the game.
|
|
|
|
private string FindAndLockCacheDirectory()
|
|
{
|
|
var rootDir = Path.Combine(UserDataDir.GetRootUserDataDir(_gameController), BaseCacheName);
|
|
|
|
for (var i = 0; i < MaxAttempts; i++)
|
|
{
|
|
var cacheDirPath = Path.Combine(rootDir, i.ToString());
|
|
|
|
if (TryLockCacheDir(i, cacheDirPath))
|
|
return cacheDirPath;
|
|
}
|
|
|
|
throw new Exception("Unable to locate available CEF cache directory!");
|
|
}
|
|
|
|
private bool TryLockCacheDir(int attempt, string path)
|
|
{
|
|
_sawmill.Verbose($"Trying to lock cache directory {attempt}");
|
|
|
|
// Does not fail if directory already exists.
|
|
Directory.CreateDirectory(path);
|
|
|
|
var lockFilePath = Path.Combine(path, LockFileName);
|
|
|
|
try
|
|
{
|
|
var file = File.Open(lockFilePath, FileMode.Create, FileAccess.ReadWrite, FileShare.None);
|
|
_lockFileStream = file;
|
|
_sawmill.Debug($"Successfully locked CEF cache directory {attempt}");
|
|
return true;
|
|
}
|
|
catch (IOException ex)
|
|
{
|
|
_sawmill.Error($"Failed to lock cache directory {attempt}: {ex}");
|
|
return false;
|
|
}
|
|
}
|
|
}
|