Remove fake/periodic notifications (spam)
The mock emitted random "a friend is online / event is live" notifications on a 35s timer and the live service forwarded them. Dropped both — only real notifications now fire (friend requests, achievements, daily reward, payment, match-ended, and server hub events). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -475,34 +475,12 @@ export class MockOnlineService implements OnlineService {
|
|||||||
/* --------------------------- notifications ------------------------- */
|
/* --------------------------- notifications ------------------------- */
|
||||||
|
|
||||||
private notifCbs = new Set<(n: AppNotification) => void>();
|
private notifCbs = new Set<(n: AppNotification) => void>();
|
||||||
private notifTimer: ReturnType<typeof setInterval> | null = null;
|
|
||||||
|
|
||||||
|
// Real notifications only — no periodic fake/"liveliness" spam.
|
||||||
onNotification(cb: (n: AppNotification) => void): Unsubscribe {
|
onNotification(cb: (n: AppNotification) => void): Unsubscribe {
|
||||||
this.notifCbs.add(cb);
|
this.notifCbs.add(cb);
|
||||||
if (this.notifTimer == null) {
|
|
||||||
const samples: Array<Pick<AppNotification, "kind" | "titleFa" | "titleEn" | "icon">> = [
|
|
||||||
{ kind: "system", titleFa: "یک دوست آنلاین شد", titleEn: "A friend is online", icon: "👋" },
|
|
||||||
{ kind: "system", titleFa: "مسابقهی امروز شروع شد", titleEn: "Today's event is live", icon: "🏆" },
|
|
||||||
{ kind: "invite", titleFa: "یک نفر دنبال همبازیه", titleEn: "Someone is looking for a partner", icon: "🎴" },
|
|
||||||
];
|
|
||||||
this.notifTimer = setInterval(() => {
|
|
||||||
if (this.notifCbs.size === 0) return;
|
|
||||||
const s = pick(samples);
|
|
||||||
const n: AppNotification = {
|
|
||||||
id: rid("ntf"),
|
|
||||||
ts: Date.now(),
|
|
||||||
read: false,
|
|
||||||
...s,
|
|
||||||
};
|
|
||||||
for (const c of this.notifCbs) c(n);
|
|
||||||
}, 35000);
|
|
||||||
}
|
|
||||||
return () => {
|
return () => {
|
||||||
this.notifCbs.delete(cb);
|
this.notifCbs.delete(cb);
|
||||||
if (this.notifCbs.size === 0 && this.notifTimer) {
|
|
||||||
clearInterval(this.notifTimer);
|
|
||||||
this.notifTimer = null;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,6 @@ export class SignalrService implements OnlineService {
|
|||||||
private chatCbs = new Set<(id: string, m: ChatMessage[]) => void>();
|
private chatCbs = new Set<(id: string, m: ChatMessage[]) => void>();
|
||||||
private forfeitCbs = new Set<(r: ForfeitRequest | null) => void>();
|
private forfeitCbs = new Set<(r: ForfeitRequest | null) => void>();
|
||||||
private cachedProfile: UserProfile | null = null;
|
private cachedProfile: UserProfile | null = null;
|
||||||
private mockNotifUnsub?: () => void;
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
if (typeof window !== "undefined") {
|
if (typeof window !== "undefined") {
|
||||||
@@ -385,10 +384,9 @@ export class SignalrService implements OnlineService {
|
|||||||
onChat(cb: (id: string, m: ChatMessage[]) => void) { this.chatCbs.add(cb); return () => this.chatCbs.delete(cb); }
|
onChat(cb: (id: string, m: ChatMessage[]) => void) { this.chatCbs.add(cb); return () => this.chatCbs.delete(cb); }
|
||||||
|
|
||||||
onNotification(cb: (n: AppNotification) => void): Unsubscribe {
|
onNotification(cb: (n: AppNotification) => void): Unsubscribe {
|
||||||
|
// Real notifications only — server hub "notification" events + app-generated
|
||||||
|
// ones (friend requests, achievements, daily, payment). No fake spam.
|
||||||
this.notifCbs.add(cb);
|
this.notifCbs.add(cb);
|
||||||
// also forward the mock's periodic notifications for liveliness
|
|
||||||
if (!this.mockNotifUnsub)
|
|
||||||
this.mockNotifUnsub = this.mock.onNotification((n) => this.notifCbs.forEach((c) => c(n)));
|
|
||||||
return () => this.notifCbs.delete(cb);
|
return () => this.notifCbs.delete(cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user