Tag: iLuvU

  • I luv u

    <!DOCTYPE html>
    <html lang="en-us">
    <head>
      <meta charset="UTF-8">
      <title>I love you</title>
      <style>
        body { background-color: lightpink; }
        .container { max-width: 800px; margin: 0 auto; padding: 20px; }
        button { padding: 10px; margin: 5px; }
        #log { border: 1px solid #ccc; padding: 10px; height: 200px; overflow-y: scroll; margin-top: 20px; background: deeppink; }
      </style>
    </head>
    <body>
      <div class="container">
        <h1>Web Worker Broadcast "I love you"</h1>
        <p>
          Click "Start Workers" to create ten web workers. Then click "Broadcast Message" to send a message to all of them at once.
        </p>
        <button id="start-button">Start Workers</button>
        <button id="broadcast-button" disabled>Broadcast Message</button>
        <button id="stop-button" disabled>Stop Workers</button>
    
        <h2>Message Log</h2>
        <div id="log"></div>
      </div>
      <script src="broadcast.js"></script>
    </body>
    </html>
    // I love you - broadcast.js
    document.addEventListener('DOMContentLoaded', () => {
      const startButton = document.getElementById('start-button');
      const broadcastButton = document.getElementById('broadcast-button');
      const stopButton = document.getElementById('stop-button');
      const log = document.getElementById('log');
    
      let workers = [];
      const NUM_WORKERS = 10;
      const channel = new BroadcastChannel('love-channel');
    
      function logMessage(text, color = 'black') {
        const p = document.createElement('p');
        p.textContent = `[${new Date().toLocaleTimeString()}] ${text}`;
        p.style.color = color;
        log.appendChild(p);
        log.scrollTop = log.scrollHeight;
      }
    
      // Set up the main page to listen for replies from the workers.
      channel.onmessage = (event) => {
        logMessage(`Main thread received from a worker: "${event.data}"`, 'green');
      };
    
      startButton.addEventListener('click', () => {
        if (workers.length === 0) {
          for (let i = 0; i < NUM_WORKERS; i++) {
            const worker = new Worker('worker.js');
            workers.push(worker);
            logMessage(`Created Worker ${i + 1}`, 'blue');
          }
          logMessage(`Total of ${NUM_WORKERS} workers created.`, 'blue');
          startButton.disabled = true;
          broadcastButton.disabled = false;
          stopButton.disabled = false;
        }
      });
    
      broadcastButton.addEventListener('click', () => {
        logMessage('Broadcasting "I love you" to all workers...', 'red');
        // The main page broadcasts a message to all listeners on the channel.
        channel.postMessage('I love you');
      });
    
      stopButton.addEventListener('click', () => {
        if (workers.length > 0) {
          workers.forEach((worker, index) => {
            worker.terminate();
            logMessage(`Terminated Worker ${index + 1}`, 'gray');
          });
          workers = [];
          channel.close(); // Important: close the channel when done.
          logMessage('All workers terminated and channel closed.', 'gray');
          startButton.disabled = false;
          broadcastButton.disabled = true;
          stopButton.disabled = true;
        }
      });
    });
    // I love you - worker.js
    const channel = new BroadcastChannel('love-channel');
    
    channel.onmessage = (event) => {
      // A worker receives the message from the channel.
      const message = event.data;
      console.log(`Worker received: "${message}"`);
    
      // The worker can also send a reply back to the channel.
      channel.postMessage(`"${message}" too!`);
    };