Wijzingen aangebracht in de ApplicationCycle structuur enz.

This commit is contained in:
Bram Veenboer
2011-02-18 12:07:47 +00:00
parent 23b0d7f0a1
commit b743d69c3f
8 changed files with 103 additions and 64 deletions

View File

@@ -2,10 +2,16 @@ package pm;
import pm.exception.application.ApplicationExitException; import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException; import pm.exception.application.ApplicationInitialiseException;
import pm.task.Continuous; import pm.task.TaskGatherer;
import pm.task.TaskListener; import pm.task.TaskListener;
public abstract class Application extends TaskListener { public abstract class Application extends TaskListener {
public Application() {
super();
TaskGatherer.add(this);
}
public void run() { public void run() {
try { try {
initialise(); initialise();
@@ -20,21 +26,4 @@ public abstract class Application extends TaskListener {
public void exit() throws ApplicationExitException { public void exit() throws ApplicationExitException {
stop(); stop();
} }
protected void task(Task task) {
Action action = task.getAction();
if (task instanceof Continuous) {
Continuous continuous = (Continuous) task;
do {
action(action);
continuous.nextIteration();
sleep(continuous.getSleep());
} while (run && !continuous.getStop());
continuous.reset();
} else {
action(action);
}
}
protected abstract void action(Action action);
} }

View File

@@ -1,5 +1,6 @@
package pm; package pm;
import pm.exception.application.ApplicationExitException;
import pm.exception.device.DeviceExitException; import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException; import pm.exception.device.DeviceInitialiseException;
import pm.macro.Event; import pm.macro.Event;
@@ -10,12 +11,16 @@ import pm.macro.event.Sequence;
import pm.macro.event.SequenceListener; import pm.macro.event.SequenceListener;
import pm.task.Continuous; import pm.task.Continuous;
import pm.task.Stopper; import pm.task.Stopper;
import pm.task.TaskGatherer;
import pm.task.TaskListener;
public abstract class Device { public abstract class Device extends TaskListener {
protected SequenceListener sequenceListener; protected SequenceListener sequenceListener;
public Device() { public Device() {
super();
sequenceListener = new SequenceListener(); sequenceListener = new SequenceListener();
TaskGatherer.add(this);
} }
/* Register macro's */ /* Register macro's */
@@ -72,6 +77,8 @@ public abstract class Device {
/* Device default methods */ /* Device default methods */
public void initialise() throws DeviceInitialiseException {} public void initialise() throws DeviceInitialiseException {}
public void exit() throws DeviceExitException {}
public void action(Action action) {} public void exit() throws DeviceExitException {
stop();
}
} }

View File

@@ -2,12 +2,15 @@ package pm;
import java.util.ArrayList; import java.util.ArrayList;
import pm.application.ApplicationCycle;
import pm.application.Winamp.WinampApplication; import pm.application.Winamp.WinampApplication;
import pm.application.example.ExampleApplication; import pm.application.example.ExampleApplication;
import pm.application.iTunes.iTunesApplication; import pm.application.iTunes.iTunesApplication;
import pm.device.gui.GUIDevice; import pm.device.gui.GUIDevice;
import pm.device.javainput.rumblepad.RumblepadDevice; import pm.device.javainput.rumblepad.RumblepadDevice;
import pm.device.jintellitype.JIntellitypeDevice; import pm.device.jintellitype.JIntellitypeDevice;
import pm.device.lantextinput.LanTextDevice;
import pm.device.textinput.TextDevice;
import pm.device.wiimote.WiimoteDevice; import pm.device.wiimote.WiimoteDevice;
import pm.exception.application.ApplicationExitException; import pm.exception.application.ApplicationExitException;
import pm.exception.device.DeviceExitException; import pm.exception.device.DeviceExitException;
@@ -18,9 +21,9 @@ import pm.util.ArrayCycle;
public class Main extends TaskListener { public class Main extends TaskListener {
//protected String[] deviceClassArray; //protected String[] deviceClassArray;
protected ArrayCycle<Application> applicationCycle; protected ApplicationCycle applicationCycle;
protected ArrayList<Device> deviceList; protected ArrayList<Device> deviceList;
public Main() { public Main() {
super(); super();
/*deviceClassArray = new String[] { /*deviceClassArray = new String[] {
@@ -28,16 +31,19 @@ public class Main extends TaskListener {
"pm.device.javainput.rumblepad.RumblepadDevice", "pm.device.javainput.rumblepad.RumblepadDevice",
"pm.device.javainput.extreme3d.Extreme3DDevice", "pm.device.javainput.extreme3d.Extreme3DDevice",
"pm.device.wiimote.WiimoteDevice"};*/ "pm.device.wiimote.WiimoteDevice"};*/
applicationCycle = new ArrayCycle<Application>(); applicationCycle = new ApplicationCycle();
deviceList = new ArrayList<Device>(); deviceList = new ArrayList<Device>();
TaskGatherer.initialise(taskQueue); TaskGatherer.initialise(applicationCycle);
TaskGatherer.add(this);
} }
public void initialise() throws DeviceInitialiseException { public void initialise() throws DeviceInitialiseException {
add(new JIntellitypeDevice()); add(new JIntellitypeDevice());
//add(new RumblepadDevice()); //add(new RumblepadDevice());
add(new WiimoteDevice()); //add(new WiimoteDevice());
//add(new GUIDevice()); //add(new GUIDevice());
//add(new TextDevice());
//add(new LanTextDevice());
for (Device device : deviceList) { for (Device device : deviceList) {
try { try {
device.initialise(); device.initialise();
@@ -90,32 +96,6 @@ public class Main extends TaskListener {
break; break;
} }
} }
protected void task(Task task) {
Action action = task.getAction();
Target target = task.getTarget();
System.out.println("Action: " + action + " Target: " + target);
try {
switch (target) {
case MAIN:
action(action);
break;
case DEVICE:
for (Device device : deviceList) {
device.action(action);
}
break;
case APPLICATION:
applicationCycle.current().add(task);
break;
}
} catch (Exception e) {
System.out.println("Action exception:");
e.printStackTrace();
}
}
/*protected void addDevices() throws DeviceInitialiseException { /*protected void addDevices() throws DeviceInitialiseException {
for (String deviceClass : deviceClassArray) { for (String deviceClass : deviceClassArray) {
try { try {

View File

@@ -1,5 +1,5 @@
package pm; package pm;
public enum Target { public enum Target {
MAIN, DEVICE, APPLICATION; ALL, MAIN, DEVICES, APPLICATIONS, APPLICATION;
} }

View File

@@ -0,0 +1,8 @@
package pm.application;
import pm.Application;
import pm.util.ArrayCycle;
public class ApplicationCycle extends ArrayCycle<Application> {
protected static final long serialVersionUID = 1L;
}

View File

@@ -4,6 +4,7 @@ import pm.Action;
import pm.Button; import pm.Button;
import pm.Macro; import pm.Macro;
import pm.Target; import pm.Target;
import pm.Task;
import pm.device.javainput.DirectionButton; import pm.device.javainput.DirectionButton;
import pm.device.javainput.JavaInputDevice; import pm.device.javainput.JavaInputDevice;
import pm.exception.MacroException; import pm.exception.MacroException;
@@ -24,14 +25,14 @@ public class Extreme3DDevice extends JavaInputDevice {
try { try {
add( add(
new Press(Extreme3DButton.TWELVE), new Press(Extreme3DButton.TWELVE),
Action.TEST.setTarget(Target.APPLICATION)); new Task(Action.TEST, Target.APPLICATION));
add( add(
new Macro( new Macro(
new Hold(Extreme3DButton.ONE), new Hold(Extreme3DButton.ONE),
new Press(Extreme3DButton.TWO), new Press(Extreme3DButton.TWO),
new Press(Extreme3DButton.ELEVEN), new Press(Extreme3DButton.ELEVEN),
new Release(Extreme3DButton.ONE)), new Release(Extreme3DButton.ONE)),
Action.EXIT.setTarget(Target.MAIN)); new Task(Action.EXIT, Target.MAIN));
} catch (MacroException e) { } catch (MacroException e) {
e.printStackTrace(); e.printStackTrace();
} }

View File

@@ -1,23 +1,61 @@
package pm.task; package pm.task;
import java.util.Queue; import java.util.ArrayList;
import pm.Application;
import pm.Device; import pm.Device;
import pm.Main;
import pm.Target;
import pm.Task; import pm.Task;
import pm.application.ApplicationCycle;
public class TaskGatherer { public class TaskGatherer {
protected static Queue<Task> taskQueue; protected static ArrayList<TaskListener> taskListenerList;
protected static ApplicationCycle applicationCycle;
public static void initialise(Queue<Task> taskQueue) {
TaskGatherer.taskQueue = taskQueue; public static void initialise(ApplicationCycle applicationCycle) {
taskListenerList = new ArrayList<TaskListener>();
TaskGatherer.applicationCycle = applicationCycle;
} }
public static void add(Application application) {
add(application);
applicationCycle.add(application);
}
public static void add(TaskListener taskListner) {
taskListenerList.add(taskListner);
}
public static void add(Task task) { public static void add(Task task) {
if (task instanceof Stopper) { if (task instanceof Stopper) {
Stopper stopper = (Stopper) task; Stopper stopper = (Stopper) task;
stopper.stop(); stopper.stop();
} else { } else {
taskQueue.add(task); Target target = task.getTarget();
for (TaskListener taskListener : taskListenerList) {
switch (target) {
case ALL:
taskListener.add(task);
case MAIN:
if (taskListener instanceof Main) {
taskListener.add(task);
}
break;
case DEVICES:
if (taskListener instanceof Device) {
taskListener.add(task);
}
break;
case APPLICATIONS:
if (taskListener instanceof Application) {
taskListener.add(task);
}
break;
case APPLICATION:
applicationCycle.current().add(task);
}
}
} }
} }
} }

View File

@@ -3,6 +3,7 @@ package pm.task;
import java.util.Queue; import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
import pm.Action;
import pm.Task; import pm.Task;
public abstract class TaskListener implements Runnable { public abstract class TaskListener implements Runnable {
@@ -47,5 +48,20 @@ public abstract class TaskListener implements Runnable {
} catch (InterruptedException e) {} } catch (InterruptedException e) {}
} }
abstract protected void task(Task task); protected void task(Task task) {
} Action action = task.getAction();
if (task instanceof Continuous) {
Continuous continuous = (Continuous) task;
do {
action(action);
continuous.nextIteration();
sleep(continuous.getSleep());
} while (run && !continuous.getStop());
continuous.reset();
} else {
action(action);
}
}
protected void action(Action action) {}
}