mirror of https://github.com/abpframework/abp.git
5 changed files with 147 additions and 190 deletions
@ -1,62 +0,0 @@ |
|||||
// src/lib/workers/token-storage.worker.ts
|
|
||||
var tokenStore = /* @__PURE__ */ new Map(); |
|
||||
var ports = /* @__PURE__ */ new Set(); |
|
||||
function broadcastToOtherPorts(senderPort, message) { |
|
||||
const deadPorts = []; |
|
||||
ports.forEach((p) => { |
|
||||
if (p !== senderPort) { |
|
||||
try { |
|
||||
p.postMessage(message); |
|
||||
} catch (error) { |
|
||||
console.log("Dead port detected, removing..."); |
|
||||
deadPorts.push(p); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
deadPorts.forEach((p) => ports.delete(p)); |
|
||||
if (deadPorts.length > 0) { |
|
||||
console.log("Cleaned up dead ports. Total ports:", ports.size); |
|
||||
} |
|
||||
} |
|
||||
self.onconnect = (event) => { |
|
||||
const port = event.ports[0]; |
|
||||
ports.add(port); |
|
||||
console.log("Port connected. Total ports:", ports.size); |
|
||||
port.addEventListener("messageerror", () => { |
|
||||
ports.delete(port); |
|
||||
console.log("Port disconnected (error). Total ports:", ports.size); |
|
||||
}); |
|
||||
port.onmessage = (e) => { |
|
||||
const { action, key, value } = e.data; |
|
||||
switch (action) { |
|
||||
case "set": |
|
||||
if (key && value !== void 0) { |
|
||||
tokenStore.set(key, value); |
|
||||
broadcastToOtherPorts(port, { action: "set", key, value }); |
|
||||
} |
|
||||
break; |
|
||||
case "remove": |
|
||||
if (key) { |
|
||||
console.log("remove", key); |
|
||||
tokenStore.delete(key); |
|
||||
broadcastToOtherPorts(port, { action: "remove", key }); |
|
||||
} |
|
||||
break; |
|
||||
case "clear": |
|
||||
console.log("clear user"); |
|
||||
tokenStore.clear(); |
|
||||
broadcastToOtherPorts(port, { action: "clear" }); |
|
||||
break; |
|
||||
case "get": |
|
||||
console.log("get user"); |
|
||||
if (key) { |
|
||||
const value2 = tokenStore.get(key) ?? null; |
|
||||
port.postMessage({ action: "get", key, value: value2 }); |
|
||||
} |
|
||||
break; |
|
||||
default: |
|
||||
console.warn("Unknown action:", action); |
|
||||
} |
|
||||
}; |
|
||||
port.start(); |
|
||||
}; |
|
||||
@ -1,98 +0,0 @@ |
|||||
/// <reference lib="webworker" />
|
|
||||
|
|
||||
// Message types for type safety
|
|
||||
interface TokenMessage { |
|
||||
action: 'set' | 'remove' | 'clear' | 'get'; |
|
||||
key?: string; |
|
||||
value?: string; |
|
||||
} |
|
||||
|
|
||||
interface TokenResponse { |
|
||||
action: 'set' | 'remove' | 'clear' | 'get'; |
|
||||
key?: string; |
|
||||
value?: string | null; |
|
||||
} |
|
||||
|
|
||||
declare const self: SharedWorkerGlobalScope; |
|
||||
|
|
||||
const tokenStore = new Map<string, string>(); |
|
||||
const ports = new Set<MessagePort>(); |
|
||||
|
|
||||
// Broadcast message to all ports except the sender
|
|
||||
// Automatically cleans up dead ports
|
|
||||
function broadcastToOtherPorts(senderPort: MessagePort, message: TokenResponse): void { |
|
||||
const deadPorts: MessagePort[] = []; |
|
||||
|
|
||||
ports.forEach(p => { |
|
||||
if (p !== senderPort) { |
|
||||
try { |
|
||||
p.postMessage(message); |
|
||||
} catch (error) { |
|
||||
// Port is dead/closed, mark for removal
|
|
||||
console.log('Dead port detected, removing...'); |
|
||||
deadPorts.push(p); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
// Clean up dead ports
|
|
||||
deadPorts.forEach(p => ports.delete(p)); |
|
||||
|
|
||||
if (deadPorts.length > 0) { |
|
||||
console.log('Cleaned up dead ports. Total ports:', ports.size); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
self.onconnect = (event: MessageEvent) => { |
|
||||
const port = event.ports[0]; |
|
||||
ports.add(port); |
|
||||
console.log('Port connected. Total ports:', ports.size); |
|
||||
|
|
||||
// Clean up port when it's closed
|
|
||||
port.addEventListener('messageerror', () => { |
|
||||
ports.delete(port); |
|
||||
console.log('Port disconnected (error). Total ports:', ports.size); |
|
||||
}); |
|
||||
|
|
||||
port.onmessage = (e: MessageEvent<TokenMessage>) => { |
|
||||
const { action, key, value } = e.data; |
|
||||
|
|
||||
switch (action) { |
|
||||
case 'set': |
|
||||
if (key && value !== undefined) { |
|
||||
tokenStore.set(key, value); |
|
||||
broadcastToOtherPorts(port, { action: 'set', key, value }); |
|
||||
} |
|
||||
break; |
|
||||
|
|
||||
case 'remove': |
|
||||
if (key) { |
|
||||
console.log('remove', key); |
|
||||
tokenStore.delete(key); |
|
||||
broadcastToOtherPorts(port, { action: 'remove', key }); |
|
||||
} |
|
||||
break; |
|
||||
|
|
||||
case 'clear': |
|
||||
console.log('clear user'); |
|
||||
tokenStore.clear(); |
|
||||
broadcastToOtherPorts(port, { action: 'clear' }); |
|
||||
break; |
|
||||
|
|
||||
case 'get': |
|
||||
console.log('get user'); |
|
||||
if (key) { |
|
||||
const value = tokenStore.get(key) ?? null; |
|
||||
port.postMessage({ action: 'get', key, value } as TokenResponse); |
|
||||
} |
|
||||
break; |
|
||||
|
|
||||
default: |
|
||||
console.warn('Unknown action:', action); |
|
||||
} |
|
||||
}; |
|
||||
|
|
||||
port.start(); |
|
||||
}; |
|
||||
|
|
||||
export {}; |
|
||||
Loading…
Reference in new issue