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...]") {
|
ch.registerCommand("logevents", new BasicAsyncCommand("log events", "[chips...]") {
|
||||||
Chip[] chips;
|
Chip[] chips;
|
||||||
|
EventListener eventListener;
|
||||||
public int executeCommand(final CommandContext context) {
|
public int executeCommand(final CommandContext context) {
|
||||||
if (context.getArgumentCount() == 0) {
|
if (context.getArgumentCount() == 0) {
|
||||||
context.out.println("Available chips:");
|
context.out.println("Available chips:");
|
||||||
|
|
@ -187,19 +188,19 @@ public class ProfilerCommands implements CommandBundle {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EventListener listener = new EventListener() {
|
eventListener = new EventListener() {
|
||||||
public void event(EventSource source, String event, Object data) {
|
public void event(EventSource source, String event, Object data) {
|
||||||
context.out.println("Event:" + source.getName() + ":" + event);
|
context.out.println("Event:" + source.getName() + ":" + event);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
for (Chip chip : chips) {
|
for (Chip chip : chips) {
|
||||||
chip.setEventListener(listener);
|
chip.addEventListener(eventListener);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
public void stopCommand(CommandContext context) {
|
public void stopCommand(CommandContext context) {
|
||||||
for (Chip chip : chips) {
|
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.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
|
@ -27,16 +27,12 @@
|
||||||
*
|
*
|
||||||
* This file is part of MSPSim.
|
* This file is part of MSPSim.
|
||||||
*
|
*
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* -----------------------------------------------------------------
|
* -----------------------------------------------------------------
|
||||||
*
|
*
|
||||||
* Chip
|
* Chip
|
||||||
*
|
*
|
||||||
* Author : Joakim Eriksson
|
* Author : Joakim Eriksson
|
||||||
* Created : 17 jan 2008
|
* Created : 17 jan 2008
|
||||||
* Updated : $Date$
|
|
||||||
* $Revision$
|
|
||||||
*/
|
*/
|
||||||
package se.sics.mspsim.core;
|
package se.sics.mspsim.core;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
|
|
@ -130,15 +126,20 @@ public abstract class Chip implements Loggable, EventSource {
|
||||||
modeNames = names;
|
modeNames = names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void addEventListener(EventListener listener) {
|
||||||
public void setEventListener(EventListener e) {
|
eventListener = EventListener.Proxy.INSTANCE.add(eventListener, listener);
|
||||||
eventListener = e;
|
sendEvents = eventListener != null;
|
||||||
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) {
|
protected void sendEvent(String event, Object data) {
|
||||||
if (eventListener != null) {
|
EventListener listener = this.eventListener;
|
||||||
eventListener.event(this, event, data);
|
if (listener != null) {
|
||||||
|
listener.event(this, event, data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,21 @@
|
||||||
package se.sics.mspsim.core;
|
package se.sics.mspsim.core;
|
||||||
|
import se.sics.mspsim.util.ProxySupport;
|
||||||
public interface EventListener {
|
|
||||||
public void event(EventSource source, String event, Object data);
|
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);
|
startTags.put(start, tagEntry);
|
||||||
endTags.put(end, tagEntry);
|
endTags.put(end, tagEntry);
|
||||||
tagProfiles.put(tag, tagEntry);
|
tagProfiles.put(tag, tagEntry);
|
||||||
chip.setEventListener(this);
|
chip.addEventListener(this);
|
||||||
chip2.setEventListener(this);
|
chip2.addEventListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void event(EventSource source, String event, Object data) {
|
public void event(EventSource source, String event, Object data) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue