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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user