mirror of https://github.com/contiki-ng/mspsim
Added proxy for EventListener to support multiple listeners
This commit is contained in:
parent
6ab9662686
commit
6c7ccde06d
|
|
@ -164,6 +164,7 @@ public class ProfilerCommands implements CommandBundle {
|
|||
|
||||
ch.registerCommand("logevents", new BasicAsyncCommand("log events", "[chips...]") {
|
||||
Chip[] chips;
|
||||
EventListener eventListener;
|
||||
public int executeCommand(final CommandContext context) {
|
||||
if (context.getArgumentCount() == 0) {
|
||||
context.out.println("Available chips:");
|
||||
|
|
@ -187,19 +188,19 @@ public class ProfilerCommands implements CommandBundle {
|
|||
return 1;
|
||||
}
|
||||
}
|
||||
EventListener listener = new EventListener() {
|
||||
eventListener = new EventListener() {
|
||||
public void event(EventSource source, String event, Object data) {
|
||||
context.out.println("Event:" + source.getName() + ":" + event);
|
||||
}
|
||||
};
|
||||
for (Chip chip : chips) {
|
||||
chip.setEventListener(listener);
|
||||
chip.addEventListener(eventListener);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
public void stopCommand(CommandContext context) {
|
||||
for (Chip chip : chips) {
|
||||
chip.setEventListener(null);
|
||||
chip.removeEventListener(eventListener);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* Copyright (c) 2007, Swedish Institute of Computer Science.
|
||||
* Copyright (c) 2007-2012, Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
|
@ -27,16 +27,12 @@
|
|||
*
|
||||
* This file is part of MSPSim.
|
||||
*
|
||||
* $Id$
|
||||
*
|
||||
* -----------------------------------------------------------------
|
||||
*
|
||||
* Chip
|
||||
*
|
||||
* Author : Joakim Eriksson
|
||||
* Created : 17 jan 2008
|
||||
* Updated : $Date$
|
||||
* $Revision$
|
||||
*/
|
||||
package se.sics.mspsim.core;
|
||||
import java.io.PrintStream;
|
||||
|
|
@ -130,15 +126,20 @@ public abstract class Chip implements Loggable, EventSource {
|
|||
modeNames = names;
|
||||
}
|
||||
|
||||
|
||||
public void setEventListener(EventListener e) {
|
||||
eventListener = e;
|
||||
sendEvents = eventListener != null;
|
||||
public synchronized void addEventListener(EventListener listener) {
|
||||
eventListener = EventListener.Proxy.INSTANCE.add(eventListener, listener);
|
||||
sendEvents = eventListener != null;
|
||||
}
|
||||
|
||||
|
||||
public synchronized void removeEventListener(EventListener listener) {
|
||||
eventListener = EventListener.Proxy.INSTANCE.add(eventListener, listener);
|
||||
sendEvents = eventListener != null;
|
||||
}
|
||||
|
||||
protected void sendEvent(String event, Object data) {
|
||||
if (eventListener != null) {
|
||||
eventListener.event(this, event, data);
|
||||
EventListener listener = this.eventListener;
|
||||
if (listener != null) {
|
||||
listener.event(this, event, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,21 @@
|
|||
package se.sics.mspsim.core;
|
||||
|
||||
public interface EventListener {
|
||||
public void event(EventSource source, String event, Object data);
|
||||
}
|
||||
package se.sics.mspsim.core;
|
||||
import se.sics.mspsim.util.ProxySupport;
|
||||
|
||||
public interface EventListener {
|
||||
|
||||
public void event(EventSource source, String event, Object data);
|
||||
|
||||
public static class Proxy extends ProxySupport<EventListener> implements EventListener {
|
||||
public static final Proxy INSTANCE = new Proxy();
|
||||
|
||||
@Override
|
||||
public void event(EventSource source, String event, Object data) {
|
||||
EventListener[] listeners = this.listeners;
|
||||
for(EventListener listener : listeners) {
|
||||
listener.event(source, event, data);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -520,8 +520,8 @@ public class SimpleProfiler implements Profiler, EventListener {
|
|||
startTags.put(start, tagEntry);
|
||||
endTags.put(end, tagEntry);
|
||||
tagProfiles.put(tag, tagEntry);
|
||||
chip.setEventListener(this);
|
||||
chip2.setEventListener(this);
|
||||
chip.addEventListener(this);
|
||||
chip2.addEventListener(this);
|
||||
}
|
||||
|
||||
public void event(EventSource source, String event, Object data) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue