Organisator kann im selben Browser selbst mitspielen
Ein Aufrufer darf Organisator- und Spieler-Zugang kombinieren (Authorization + X-Player-Token). Berechtigungen prüfen jetzt einzelne Merkmale statt einer Rangstufe. In der Lobby gibt es „Selbst mitspielen?“, Teamlinks funktionieren auch im Organisator-Browser. Online-Status wird direkt nach dem Beitritt aktualisiert. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
470b12f232
commit
4152f9c0a6
15 files changed
+248
-59
No files matched your search
@@ -1,34 +1,51 @@
|
||||
// Zugangsdaten pro Match im Browser. Nach Neuladen oder Verbindungsabbruch
|
||||
// meldet sich der Client damit automatisch wieder an.
|
||||
//
|
||||
// Aufbau: { token, kind: 'organizer' | 'player' | 'spectator', playerToken? }
|
||||
// playerToken gibt es nur beim Organisator, wenn er selbst einem Team beigetreten ist.
|
||||
const KEY = (matchId) => `cs2mv:match:${matchId}`;
|
||||
const memory = new Map();
|
||||
|
||||
export function getAccess(matchId) {
|
||||
try {
|
||||
return JSON.parse(localStorage.getItem(KEY(matchId))) ?? null;
|
||||
return JSON.parse(localStorage.getItem(KEY(matchId))) ?? memory.get(matchId) ?? null;
|
||||
} catch {
|
||||
return null;
|
||||
return memory.get(matchId) ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
export function setAccess(matchId, access) {
|
||||
memory.set(matchId, access);
|
||||
try {
|
||||
localStorage.setItem(KEY(matchId), JSON.stringify(access));
|
||||
} catch {
|
||||
/* privater Modus – Zugang gilt dann nur für diese Sitzung */
|
||||
}
|
||||
memory.set(matchId, access);
|
||||
}
|
||||
|
||||
export function clearAccess(matchId) {
|
||||
memory.delete(matchId);
|
||||
try {
|
||||
localStorage.removeItem(KEY(matchId));
|
||||
} catch {
|
||||
/* ignorieren */
|
||||
}
|
||||
memory.delete(matchId);
|
||||
}
|
||||
|
||||
const memory = new Map();
|
||||
export function getToken(matchId) {
|
||||
return (getAccess(matchId) ?? memory.get(matchId))?.token ?? null;
|
||||
return getAccess(matchId)?.token ?? null;
|
||||
}
|
||||
|
||||
export function getPlayerToken(matchId) {
|
||||
return getAccess(matchId)?.playerToken ?? null;
|
||||
}
|
||||
|
||||
/** Spieler-Token neben dem Organisator-Zugang speichern bzw. entfernen (null). */
|
||||
export function setPlayerToken(matchId, playerToken) {
|
||||
const access = getAccess(matchId);
|
||||
if (!access) return;
|
||||
const next = { ...access };
|
||||
if (playerToken) next.playerToken = playerToken;
|
||||
else delete next.playerToken;
|
||||
setAccess(matchId, next);
|
||||
}
|
||||
Reference in new issue
Block a user