feat(loader): file-backed per-instance identity store
This commit is contained in:
51
SVSimLoader/InstanceIdentityStore.cs
Normal file
51
SVSimLoader/InstanceIdentityStore.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
namespace SVSimLoader
|
||||
{
|
||||
/// <summary>
|
||||
/// File-backed store for the three account-identity PlayerPrefs keys (UDID, VIEWER_ID,
|
||||
/// SHORT_UDID), so a second client instance on the same machine gets its own identity
|
||||
/// instead of sharing the per-Windows-user registry store. Only these three keys are
|
||||
/// redirected; everything else (RES_VER, language, asset cache) stays in the shared store.
|
||||
/// Persisted as dependency-free key=value lines — the values are a GUID and two integers,
|
||||
/// which never contain '=' or newlines.
|
||||
/// </summary>
|
||||
public static class InstanceIdentityStore
|
||||
{
|
||||
public static readonly string[] Keys = { "UDID", "VIEWER_ID", "SHORT_UDID" };
|
||||
|
||||
private static string _path;
|
||||
private static readonly Dictionary<string, string> _values = new Dictionary<string, string>();
|
||||
|
||||
public static void Initialize(string path)
|
||||
{
|
||||
_path = path;
|
||||
_values.Clear();
|
||||
if (!File.Exists(_path)) return;
|
||||
foreach (var line in File.ReadAllLines(_path))
|
||||
{
|
||||
int eq = line.IndexOf('=');
|
||||
if (eq <= 0) continue;
|
||||
string key = line.Substring(0, eq);
|
||||
string val = line.Substring(eq + 1);
|
||||
if (System.Array.IndexOf(Keys, key) >= 0) _values[key] = val;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool TryGet(string key, out string value) => _values.TryGetValue(key, out value);
|
||||
|
||||
public static void Set(string key, string value)
|
||||
{
|
||||
_values[key] = value;
|
||||
Save();
|
||||
}
|
||||
|
||||
private static void Save()
|
||||
{
|
||||
var lines = new List<string>();
|
||||
foreach (var kv in _values) lines.Add(kv.Key + "=" + kv.Value);
|
||||
File.WriteAllLines(_path, lines.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user