UNPKG

@toruslabs/broadcast-channel

Version:

A BroadcastChannel that works in New Browsers, Old Browsers, WebWorkers

60 lines (56 loc) 1.56 kB
'use strict'; var util = require('../util.js'); const microSeconds = util.microSeconds; const type = "simulate"; const SIMULATE_CHANNELS = new Set(); const SIMULATE_DELAY_TIME = 5; function create(channelName) { const state = { time: util.microSeconds(), name: channelName, messagesCallback: null }; SIMULATE_CHANNELS.add(state); return state; } function close(channelState) { SIMULATE_CHANNELS.delete(channelState); } function postMessage(channelState, messageJson) { return new Promise(resolve => { setTimeout(() => { const channelArray = Array.from(SIMULATE_CHANNELS); channelArray.forEach(channel => { if (channel.name === channelState.name && // has same name channel !== channelState && // not own channel !!channel.messagesCallback && // has subscribers channel.time < messageJson.time // channel not created after postMessage() call ) { channel.messagesCallback(messageJson); } }); resolve(); }, SIMULATE_DELAY_TIME); }); } function onMessage(channelState, fn) { channelState.messagesCallback = fn; } function canBeUsed() { return true; } function averageResponseTime() { return SIMULATE_DELAY_TIME; } exports.SIMULATE_DELAY_TIME = SIMULATE_DELAY_TIME; exports.averageResponseTime = averageResponseTime; exports.canBeUsed = canBeUsed; exports.close = close; exports.create = create; exports.microSeconds = microSeconds; exports.onMessage = onMessage; exports.postMessage = postMessage; exports.type = type;