rockbox/songdbj/org/tritonus/share/TNotifier.java
Michiel Van Der Kolk 9fee0ec4ca Songdb java version, source. only 1.5 compatible
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7101 a1c6a512-1295-4272-9138-f99709370657
2005-07-11 15:42:37 +00:00

140 lines
2.9 KiB
Java

/*
* 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<LineListener> m_listeners;
public NotifyEntry(EventObject event, Collection<LineListener> listeners)
{
m_event = event;
m_listeners = new ArrayList<LineListener>(listeners);
}
public void deliver()
{
// TDebug.out("%% TNotifier.NotifyEntry.deliver(): called.");
Iterator<LineListener> 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<NotifyEntry> m_entries;
public TNotifier()
{
super("Tritonus Notifier");
m_entries = new ArrayList<NotifyEntry>();
}
public void addEntry(EventObject event, Collection<LineListener> 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 ***/