Action verwerk systeem grotendeels herschreven met als doelen:
- duplicate code vermijden (Main en Application extenden de ActionListener) - naamgeving duidelijker maken (oude ActionListener heet nu ActionProvider) - omslachtige gedoe met via reflectie opvragen van methode fixen (switch statements) - mogelijkheid tot langere dan instantane actions (ActionListener zijn threads) Het is noodzakelijk om het volgende op orde te brengen: - omslachtige target systeem - statussen en logs om debuggen en controle eenvoudig te maken - mogelijkheid tot repeterende acties
This commit is contained in:
@@ -334,7 +334,14 @@ public class iTunes {
|
||||
public boolean getMute() {
|
||||
return iTunes.getPropertyAsBoolean("Mute");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Toggle the mute state.
|
||||
*/
|
||||
public void toggleMute() {
|
||||
setMute(!getMute());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current player state.
|
||||
* @return Returns the current player state.
|
||||
|
||||
@@ -1,11 +1,5 @@
|
||||
package pm;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import pm.exception.ActionException;
|
||||
import pm.exception.action.InvokeActionException;
|
||||
import pm.exception.action.NotImplementedActionException;
|
||||
import pm.exception.action.TargetNotSetException;
|
||||
|
||||
public enum Action {
|
||||
@@ -21,7 +15,7 @@ public enum Action {
|
||||
REWIND ("rewind"),
|
||||
MUTE ("mute"),
|
||||
VOLUME_UP ("volumeUp"),
|
||||
VULUME_DOWN ("volumeDown");
|
||||
VOLUME_DOWN ("volumeDown");
|
||||
|
||||
|
||||
protected String action;
|
||||
@@ -42,27 +36,4 @@ public enum Action {
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
||||
public Method getMethod(Object object) throws NotImplementedActionException {
|
||||
try {
|
||||
return object.getClass().getMethod(action);
|
||||
} catch (SecurityException e) {
|
||||
} catch (NoSuchMethodException e) {}
|
||||
throw new NotImplementedActionException();
|
||||
}
|
||||
|
||||
public void invoke(Object object) throws ActionException {
|
||||
try {
|
||||
getMethod(object).invoke(object);
|
||||
return;
|
||||
} catch (IllegalArgumentException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
throw new InvokeActionException();
|
||||
// Todo: informatie doorgeven over wat er precies is foutgegaan
|
||||
}
|
||||
}
|
||||
|
||||
7
java/src/pm/Application.java
Normal file
7
java/src/pm/Application.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package pm;
|
||||
|
||||
import pm.listener.ActionListener;
|
||||
|
||||
public abstract class Application extends ActionListener {
|
||||
public void exit() {}
|
||||
}
|
||||
@@ -1,54 +1,26 @@
|
||||
package pm;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
import pm.application.Application;
|
||||
import pm.application.Winamp.WinampApplication;
|
||||
import pm.application.example.ExampleApplication;
|
||||
import pm.application.iTunes.iTunesApplication;
|
||||
import pm.application.voorbeeld.VoorbeeldApplication;
|
||||
import pm.device.Device;
|
||||
import pm.device.javainput.extreme3d.Extreme3DDevice;
|
||||
import pm.device.javainput.rumblepad.RumblepadDevice;
|
||||
import pm.device.jintellitype.JIntellitypeDevice;
|
||||
import pm.device.wiimote.WiimoteDevice;
|
||||
import pm.exception.ActionException;
|
||||
import pm.exception.action.NotImplementedActionException;
|
||||
import pm.exception.action.UnknownTargetException;
|
||||
import pm.exception.action.TargetNotSetException;
|
||||
import pm.listener.ActionListener;
|
||||
import pm.listener.ActionProvider;
|
||||
import pm.util.ArrayCycle;
|
||||
|
||||
public class Main {
|
||||
protected static final int SLEEP = 100;
|
||||
|
||||
public class Main extends ActionListener {
|
||||
ArrayCycle<Application> applicationCycle;
|
||||
ArrayList<Device> deviceList;
|
||||
Queue<Action> actionQueue;
|
||||
|
||||
boolean run;
|
||||
|
||||
public Main() {
|
||||
super();
|
||||
applicationCycle = new ArrayCycle<Application>();
|
||||
deviceList = new ArrayList<Device>();
|
||||
actionQueue = new ConcurrentLinkedQueue<Action>();
|
||||
ActionListener.initialise(actionQueue);
|
||||
}
|
||||
|
||||
public void add(Application application) {
|
||||
applicationCycle.add(application);
|
||||
}
|
||||
|
||||
public boolean remove(Application application) {
|
||||
return applicationCycle.remove(application);
|
||||
}
|
||||
|
||||
public void add(Device device) {
|
||||
deviceList.add(device);
|
||||
}
|
||||
|
||||
public boolean remove(Device device) {
|
||||
return deviceList.remove(device);
|
||||
ActionProvider.initialise(actionQueue);
|
||||
}
|
||||
|
||||
public void start() throws Exception {
|
||||
@@ -60,10 +32,10 @@ public class Main {
|
||||
for (Device device : deviceList) {
|
||||
device.start();
|
||||
}
|
||||
|
||||
add(new VoorbeeldApplication());
|
||||
|
||||
add(new ExampleApplication());
|
||||
add(new iTunesApplication());
|
||||
add(new WinampApplication());
|
||||
//add(new WinampApplication());
|
||||
applicationCycle.next();
|
||||
for (Application application : applicationCycle) {
|
||||
application.start();
|
||||
@@ -71,38 +43,6 @@ public class Main {
|
||||
run();
|
||||
}
|
||||
|
||||
public void run() throws ActionException {
|
||||
run = true;
|
||||
while (run) {
|
||||
if (actionQueue.isEmpty()) {
|
||||
try {
|
||||
Thread.sleep(SLEEP);
|
||||
} catch (InterruptedException e) {}
|
||||
} else {
|
||||
Action action = actionQueue.poll();
|
||||
Object object;
|
||||
System.out.println("Action: " + action + " Target: " + action.getTarget());
|
||||
switch (action.getTarget()) {
|
||||
case MAIN:
|
||||
object = this;
|
||||
break;
|
||||
case APPLICATION:
|
||||
object = applicationCycle.current();
|
||||
System.out.println("Current application: " + object.getClass());
|
||||
break;
|
||||
default:
|
||||
throw new UnknownTargetException();
|
||||
}
|
||||
try {
|
||||
action.invoke(object);
|
||||
} catch (NotImplementedActionException e) {
|
||||
e.printStackTrace();
|
||||
// Todo: log.write(...)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void exit() {
|
||||
run = false;
|
||||
for (Device device : deviceList) {
|
||||
@@ -114,6 +54,45 @@ public class Main {
|
||||
System.out.println("Main exit...");
|
||||
}
|
||||
|
||||
protected void action(Action action) {
|
||||
try {
|
||||
System.out.println("Action: " + action + " Target: " + action.getTarget());
|
||||
switch (action.getTarget()) {
|
||||
case MAIN:
|
||||
switch (action) {
|
||||
case EXIT:
|
||||
exit();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case APPLICATION:
|
||||
applicationCycle.current().add(action);
|
||||
break;
|
||||
default:
|
||||
//throw new UnknownTargetException();
|
||||
}
|
||||
} catch (TargetNotSetException e) {}
|
||||
}
|
||||
|
||||
/* Add / remove methods */
|
||||
protected void add(Application application) {
|
||||
applicationCycle.add(application);
|
||||
}
|
||||
|
||||
protected boolean remove(Application application) {
|
||||
return applicationCycle.remove(application);
|
||||
}
|
||||
|
||||
protected void add(Device device) {
|
||||
deviceList.add(device);
|
||||
}
|
||||
|
||||
protected boolean remove(Device device) {
|
||||
return deviceList.remove(device);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
new Main().start();
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
package pm.application;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
|
||||
import pm.Action;
|
||||
|
||||
public abstract class Application { //WinampController.
|
||||
Queue<Action> actionQueue;
|
||||
|
||||
public Application() {
|
||||
actionQueue = new LinkedList<Action>();
|
||||
}
|
||||
|
||||
public void start() {}
|
||||
public void exit() {}
|
||||
}
|
||||
@@ -1,102 +1,69 @@
|
||||
package pm.application.Winamp;
|
||||
|
||||
import pm.application.Application;
|
||||
import pm.Action;
|
||||
import pm.Application;
|
||||
import pm.exception.ApplicationException;
|
||||
import pm.exception.application.ApplicationStartException;
|
||||
|
||||
import com.qotsa.exception.InvalidHandle;
|
||||
import com.qotsa.exception.InvalidParameter;
|
||||
import com.qotsa.jni.controller.WinampController;
|
||||
|
||||
public class WinampApplication extends Application {
|
||||
|
||||
protected boolean connected;
|
||||
|
||||
protected boolean muted;
|
||||
protected int volume;
|
||||
|
||||
public WinampApplication() {
|
||||
connected = false;
|
||||
}
|
||||
|
||||
public void start() throws Exception {
|
||||
if (!connected) {
|
||||
public void start() throws ApplicationException {
|
||||
try {
|
||||
WinampController.run();
|
||||
connected = true;
|
||||
volume = WinampController.getVolume();
|
||||
muted = volume == 0;
|
||||
} catch (Exception e) {
|
||||
throw new ApplicationStartException();
|
||||
}
|
||||
}
|
||||
|
||||
public void exit() throws InvalidHandle {
|
||||
if (connected) {
|
||||
public void exit() {
|
||||
try {
|
||||
WinampController.exit();
|
||||
connected = false;
|
||||
}
|
||||
} catch (InvalidHandle e) {}
|
||||
}
|
||||
|
||||
/* Actions */
|
||||
public void play() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.play();
|
||||
}
|
||||
}
|
||||
|
||||
public void pause() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.pause();
|
||||
}
|
||||
}
|
||||
|
||||
public void resume() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.resume();
|
||||
}
|
||||
}
|
||||
|
||||
public void next() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.nextTrack();
|
||||
}
|
||||
}
|
||||
|
||||
public void previous() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.previousTrack();
|
||||
}
|
||||
}
|
||||
|
||||
public void forward() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.fwd5Secs();
|
||||
}
|
||||
}
|
||||
|
||||
public void rewind() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.rew5Secs();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void mute() throws InvalidHandle, InvalidParameter {
|
||||
if (connected) {
|
||||
if(muted) {
|
||||
WinampController.setVolume(volume);
|
||||
muted = false;
|
||||
} else {
|
||||
volume = WinampController.getVolume();
|
||||
WinampController.setVolume(0);
|
||||
muted = true;
|
||||
protected void action(Action action) {
|
||||
System.out.println("WinampApplication: " + action);
|
||||
try {
|
||||
switch (action) {
|
||||
case PLAY:
|
||||
WinampController.play();
|
||||
case NEXT:
|
||||
WinampController.nextTrack();
|
||||
break;
|
||||
case PREVIOUS:
|
||||
WinampController.previousTrack();
|
||||
break;
|
||||
case FORWARD:
|
||||
WinampController.fwd5Secs();
|
||||
break;
|
||||
case REWIND:
|
||||
WinampController.rew5Secs();
|
||||
break;
|
||||
case MUTE:
|
||||
if(muted) {
|
||||
WinampController.setVolume(volume);
|
||||
} else {
|
||||
volume = WinampController.getVolume();
|
||||
WinampController.setVolume(0);
|
||||
}
|
||||
muted = !muted;
|
||||
break;
|
||||
case VOLUME_UP:
|
||||
WinampController.increaseVolume();
|
||||
break;
|
||||
case VOLUME_DOWN:
|
||||
WinampController.decreaseVolume();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void volumeUp() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.increaseVolume();
|
||||
}
|
||||
}
|
||||
|
||||
public void volumeDown() throws InvalidHandle {
|
||||
if (connected) {
|
||||
WinampController.decreaseVolume();
|
||||
}
|
||||
} catch (InvalidHandle e) {
|
||||
} catch (InvalidParameter e) {}
|
||||
}
|
||||
}
|
||||
|
||||
15
java/src/pm/application/example/ExampleApplication.java
Normal file
15
java/src/pm/application/example/ExampleApplication.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package pm.application.example;
|
||||
|
||||
import pm.Action;
|
||||
import pm.Application;
|
||||
|
||||
public class ExampleApplication extends Application {
|
||||
protected void action(Action action) {
|
||||
System.out.println("ExampleApplication: " + action);
|
||||
switch (action) {
|
||||
case TEST:
|
||||
System.out.println("test");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package pm.application.iTunes;
|
||||
|
||||
import pm.application.Application;
|
||||
import pm.Action;
|
||||
import pm.Application;
|
||||
|
||||
import com.dt.iTunesController.ITCOMDisabledReason;
|
||||
import com.dt.iTunesController.ITTrack;
|
||||
@@ -8,168 +9,68 @@ import com.dt.iTunesController.iTunes;
|
||||
import com.dt.iTunesController.iTunesEventsInterface;
|
||||
|
||||
public class iTunesApplication extends Application implements iTunesEventsInterface {
|
||||
|
||||
protected final int VOLUME_CHANGE_RATE = 5;
|
||||
protected final int SEEK_TIME = 1000;
|
||||
|
||||
protected static final int POSTION_CHANGE_RATE = 5;
|
||||
protected static final int VOLUME_CHANGE_RATE = 5;
|
||||
protected static final int SEEK_TIME = 1000;
|
||||
|
||||
protected iTunes iTunes;
|
||||
protected boolean connected;
|
||||
|
||||
public iTunesApplication() {
|
||||
super();
|
||||
iTunes = new iTunes();
|
||||
connected = false;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
if (!connected) {
|
||||
iTunes.connect();
|
||||
iTunes.addEventHandler(this);
|
||||
connected = true;
|
||||
}
|
||||
|
||||
public void start() throws Exception {
|
||||
iTunes.connect();
|
||||
iTunes.addEventHandler(this);
|
||||
super.start();
|
||||
}
|
||||
|
||||
public void exit() {
|
||||
if (connected) {
|
||||
iTunes.quit();
|
||||
}
|
||||
iTunes.quit();
|
||||
}
|
||||
|
||||
protected void action(Action action) {
|
||||
System.out.println("iTunesApplication: " + action);
|
||||
switch (action) {
|
||||
case PLAY:
|
||||
iTunes.playPause();
|
||||
case NEXT:
|
||||
iTunes.nextTrack();
|
||||
break;
|
||||
case PREVIOUS:
|
||||
iTunes.previousTrack();
|
||||
break;
|
||||
case FORWARD:
|
||||
iTunes.setPlayerPosition(iTunes.getPlayerPosition() + POSTION_CHANGE_RATE);
|
||||
break;
|
||||
case REWIND:
|
||||
iTunes.setPlayerPosition(iTunes.getPlayerPosition() - POSTION_CHANGE_RATE);
|
||||
break;
|
||||
case MUTE:
|
||||
iTunes.toggleMute();
|
||||
break;
|
||||
case VOLUME_UP:
|
||||
iTunes.setSoundVolume(getVolume() + VOLUME_CHANGE_RATE);
|
||||
break;
|
||||
case VOLUME_DOWN:
|
||||
iTunes.setSoundVolume(getVolume() - VOLUME_CHANGE_RATE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Actions */
|
||||
public void play() {
|
||||
if (connected) {
|
||||
iTunes.playPause();
|
||||
}
|
||||
protected int getVolume() {
|
||||
return iTunes.getSoundVolume();
|
||||
}
|
||||
|
||||
public void pause() {
|
||||
if (connected) {
|
||||
iTunes.playPause();
|
||||
}
|
||||
}
|
||||
|
||||
public void resume() {
|
||||
if (connected) {
|
||||
iTunes.resume();
|
||||
}
|
||||
}
|
||||
|
||||
public void next() {
|
||||
if (connected) {
|
||||
iTunes.nextTrack();
|
||||
}
|
||||
}
|
||||
|
||||
public void previous() {
|
||||
if (connected) {
|
||||
iTunes.previousTrack();
|
||||
}
|
||||
}
|
||||
|
||||
public void forward() {
|
||||
if (connected) {
|
||||
iTunes.fastForward();
|
||||
//sleep(SEEK_TIME);
|
||||
resume();
|
||||
}
|
||||
}
|
||||
|
||||
public void rewind() {
|
||||
if (connected) {
|
||||
iTunes.rewind();
|
||||
//sleep(SEEK_TIME);
|
||||
resume();
|
||||
}
|
||||
}
|
||||
|
||||
protected void sleep(int time) {
|
||||
try {
|
||||
Thread.sleep(time);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void mute() {
|
||||
if (connected) {
|
||||
iTunes.setMute(iTunes.getMute());
|
||||
}
|
||||
}
|
||||
|
||||
protected int volume() {
|
||||
if (connected) {
|
||||
return iTunes.getSoundVolume();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public void volumeUp() {
|
||||
if (connected) {
|
||||
iTunes.setSoundVolume(volume() + VOLUME_CHANGE_RATE);
|
||||
}
|
||||
}
|
||||
|
||||
public void volumeDown() {
|
||||
if (connected) {
|
||||
iTunes.setSoundVolume(volume() - VOLUME_CHANGE_RATE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* iTunesEventInterface => naar eigen class? */
|
||||
@Override
|
||||
public void onDatabaseChangedEvent(int[][] deletedObjectIDs,
|
||||
int[][] changedObjectIDs) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerPlayEvent(ITTrack iTrack) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerStopEvent(ITTrack iTrack) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCOMCallsEnabledEvent() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQuittingEvent() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAboutToPromptUserToQuitEvent() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSoundVolumeChangedEvent(int newVolume) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
public void onDatabaseChangedEvent(int[][] deletedObjectIDs, int[][] changedObjectIDs) {}
|
||||
public void onPlayerPlayEvent(ITTrack iTrack) {}
|
||||
public void onPlayerStopEvent(ITTrack iTrack) {}
|
||||
public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack) {}
|
||||
public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason) {}
|
||||
public void onCOMCallsEnabledEvent() {}
|
||||
public void onQuittingEvent() {}
|
||||
public void onAboutToPromptUserToQuitEvent() {}
|
||||
public void onSoundVolumeChangedEvent(int newVolume) {}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package pm.application.voorbeeld;
|
||||
|
||||
import pm.application.Application;
|
||||
|
||||
public class VoorbeeldApplication extends Application {
|
||||
public void start() {
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
System.out.println("stop");
|
||||
}
|
||||
|
||||
public void test() {
|
||||
System.out.println("test");
|
||||
}
|
||||
}
|
||||
@@ -3,11 +3,11 @@ package pm.device;
|
||||
import pm.Action;
|
||||
import pm.Macro;
|
||||
import pm.exception.MacroException;
|
||||
import pm.listener.ActionListener;
|
||||
import pm.listener.ActionProvider;
|
||||
import pm.listener.MacroListener;
|
||||
import pm.macro.Event;
|
||||
|
||||
public abstract class Device extends ActionListener {
|
||||
public abstract class Device extends ActionProvider {
|
||||
protected MacroListener macroListener;
|
||||
|
||||
public Device() {
|
||||
|
||||
@@ -48,7 +48,7 @@ public class RumblepadDevice extends JavaInputDevice {
|
||||
Action.REWIND.setTarget(Target.APPLICATION));
|
||||
add(
|
||||
new Press(RumblepadButton.NINE),
|
||||
Action.VULUME_DOWN.setTarget(Target.APPLICATION));
|
||||
Action.VOLUME_DOWN.setTarget(Target.APPLICATION));
|
||||
add(
|
||||
new Press(RumblepadButton.TEN),
|
||||
Action.VOLUME_UP.setTarget(Target.APPLICATION));
|
||||
|
||||
5
java/src/pm/exception/ApplicationException.java
Normal file
5
java/src/pm/exception/ApplicationException.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package pm.exception;
|
||||
|
||||
public class ApplicationException extends Exception {
|
||||
protected static final long serialVersionUID = 1L;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package pm.exception.application;
|
||||
|
||||
import pm.exception.ApplicationException;
|
||||
|
||||
public class ApplicationStartException extends ApplicationException {
|
||||
protected static final long serialVersionUID = 1L;
|
||||
}
|
||||
@@ -1,17 +1,45 @@
|
||||
package pm.listener;
|
||||
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
import pm.Action;
|
||||
|
||||
public class ActionListener {
|
||||
protected static Queue<Action> actionQueue;
|
||||
public abstract class ActionListener implements Runnable {
|
||||
protected static final int SLEEP = 100;
|
||||
|
||||
public static void initialise(Queue<Action> actionQueue) {
|
||||
ActionListener.actionQueue = actionQueue;
|
||||
protected Queue<Action> actionQueue;
|
||||
protected boolean run;
|
||||
|
||||
public ActionListener() {
|
||||
actionQueue = new ConcurrentLinkedQueue<Action>();
|
||||
}
|
||||
|
||||
public void start() throws Exception {
|
||||
new Thread(this).start();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
run = true;
|
||||
while (run) {
|
||||
if (actionQueue.isEmpty()) {
|
||||
sleep(SLEEP);
|
||||
} else {
|
||||
Action action = actionQueue.poll();
|
||||
action(action);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void add(Action action) {
|
||||
actionQueue.add(action);
|
||||
}
|
||||
|
||||
protected void sleep(int time) {
|
||||
try {
|
||||
Thread.sleep(time);
|
||||
} catch (InterruptedException e) {}
|
||||
}
|
||||
|
||||
abstract protected void action(Action action);
|
||||
}
|
||||
|
||||
18
java/src/pm/listener/ActionProvider.java
Normal file
18
java/src/pm/listener/ActionProvider.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package pm.listener;
|
||||
|
||||
import java.util.Queue;
|
||||
|
||||
import pm.Action;
|
||||
|
||||
public class ActionProvider {
|
||||
protected static Queue<Action> actionQueue;
|
||||
|
||||
public static void initialise(Queue<Action> actionQueue) {
|
||||
ActionProvider.actionQueue = actionQueue;
|
||||
}
|
||||
|
||||
public void add(Action action) {
|
||||
System.out.println(action);
|
||||
actionQueue.add(action);
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import pm.exception.MacroException;
|
||||
import pm.macro.Active;
|
||||
import pm.macro.Event;
|
||||
|
||||
public class MacroListener extends ActionListener {
|
||||
public class MacroListener extends ActionProvider {
|
||||
public ArrayList<Macro> macroList;
|
||||
public HashMap<Macro, Action> actionMap;
|
||||
public ArrayList<Active> activeList;
|
||||
|
||||
Reference in New Issue
Block a user