From 9fee0ec4ca0c5b7a334cc29dbb58e76c7a4c736e Mon Sep 17 00:00:00 2001 From: Michiel Van Der Kolk Date: Mon, 11 Jul 2005 15:42:37 +0000 Subject: Songdb java version, source. only 1.5 compatible git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7101 a1c6a512-1295-4272-9138-f99709370657 --- songdbj/org/tritonus/share/TNotifier.java | 140 ++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 songdbj/org/tritonus/share/TNotifier.java (limited to 'songdbj/org/tritonus/share/TNotifier.java') diff --git a/songdbj/org/tritonus/share/TNotifier.java b/songdbj/org/tritonus/share/TNotifier.java new file mode 100644 index 0000000000..822b30c305 --- /dev/null +++ b/songdbj/org/tritonus/share/TNotifier.java @@ -0,0 +1,140 @@ +/* + * TNotifier.java + * + * This file is part of Tritonus: http://www.tritonus.org/ + */ + +/* + * Copyright (c) 1999 by Matthias Pfisterer + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +/* +|<--- this code is formatted to fit into 80 columns --->| +*/ + +package org.tritonus.share; + +import java.util.EventObject; +import java.util.Collection; +import java.util.ArrayList; +import java.util.List; +import java.util.Iterator; + +import javax.sound.sampled.LineListener; +import javax.sound.sampled.LineEvent; + + + +public class TNotifier +extends Thread +{ + public static class NotifyEntry + { + private EventObject m_event; + private List m_listeners; + + + + public NotifyEntry(EventObject event, Collection listeners) + { + m_event = event; + m_listeners = new ArrayList(listeners); + } + + + public void deliver() + { + // TDebug.out("%% TNotifier.NotifyEntry.deliver(): called."); + Iterator iterator = m_listeners.iterator(); + while (iterator.hasNext()) + { + LineListener listener = iterator.next(); + listener.update((LineEvent) m_event); + } + } + } + + + public static TNotifier notifier = null; + + static + { + notifier = new TNotifier(); + notifier.setDaemon(true); + notifier.start(); + } + + + + /** The queue of events to deliver. + * The entries are of class NotifyEntry. + */ + private List m_entries; + + + public TNotifier() + { + super("Tritonus Notifier"); + m_entries = new ArrayList(); + } + + + + public void addEntry(EventObject event, Collection listeners) + { + // TDebug.out("%% TNotifier.addEntry(): called."); + synchronized (m_entries) + { + m_entries.add(new NotifyEntry(event, listeners)); + m_entries.notifyAll(); + } + // TDebug.out("%% TNotifier.addEntry(): completed."); + } + + + public void run() + { + while (true) + { + NotifyEntry entry = null; + synchronized (m_entries) + { + while (m_entries.size() == 0) + { + try + { + m_entries.wait(); + } + catch (InterruptedException e) + { + if (TDebug.TraceAllExceptions) + { + TDebug.out(e); + } + } + } + entry = m_entries.remove(0); + } + entry.deliver(); + } + } +} + + +/*** TNotifier.java ***/ -- cgit v1.2.3