Structuur consequenter gemaakt met initialise en exit methoden. De start methode wordt gereserveerd voor wanneer er een Thread moet worden gestart. Exceptions georganiseerd, hierbij opletten op het doorgeven van exceptions vanuit Threads! Poging tot het dynamisch toevoegen van devices is niet helemaal gelukt.

This commit is contained in:
2011-02-11 19:32:47 +00:00
parent c25e293c85
commit 2061376efe
26 changed files with 203 additions and 110 deletions

View File

@@ -1,57 +1,67 @@
package pm;
import java.util.ArrayList;
import pm.application.example.ExampleApplication;
import pm.application.Winamp.WinampApplication;
import pm.application.iTunes.iTunesApplication;
import pm.device.Device;
import pm.device.javainput.rumblepad.RumblepadDevice;
import pm.device.jintellitype.JIntellitypeDevice;
import pm.exception.action.TargetNotSetException;
import pm.exception.application.ApplicationExitException;
import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
import pm.listener.ActionListener;
import pm.listener.ActionProvider;
import pm.util.ArrayCycle;
public class Main extends ActionListener {
ArrayCycle<Application> applicationCycle;
ArrayList<Device> deviceList;
boolean run;
//protected String[] deviceClassArray;
protected ArrayCycle<Application> applicationCycle;
protected ArrayList<Device> deviceList;
public Main() {
super();
/*deviceClassArray = new String[] {
"pm.device.jintellitype.JIntellitypeDevice",
"pm.device.javainput.rumblepad.RumblepadDevice",
"pm.device.javainput.extreme3d.Extreme3DDevice",
"pm.device.wiimote.WiimoteDevice"};*/
applicationCycle = new ArrayCycle<Application>();
deviceList = new ArrayList<Device>();
ActionProvider.initialise(actionQueue);
}
public void start() throws Exception {
//add(new ExampleDevice());
public void initialise() throws DeviceInitialiseException {
add(new JIntellitypeDevice());
add(new RumblepadDevice());
//add(new Extreme3DDevice());
//add(new JIntellitypeDevice());
//add(new WiimoteDevice());
for (Device device : deviceList) {
device.start();
device.initialise();
}
add(new ExampleApplication());
//add(new ExampleApplication());
add(new WinampApplication());
add(new iTunesApplication());
//add(new WinampApplication());
applicationCycle.next();
//applicationCycle.next();
for (Application application : applicationCycle) {
application.start();
}
run();
}
public void exit() {
run = false;
for (Device device : deviceList) {
device.exit();
}
for (Application application : applicationCycle) {
application.exit();
}
System.out.println("Main exit...");
try {
System.out.println("Exit devices...");
for (Device device : deviceList) {
device.exit();
}
System.out.println("Exit applications...");
for (Application application : applicationCycle) {
application.exit();
}
} catch (DeviceExitException e) {
} catch (ApplicationExitException e) {}
System.out.println("Exit main...");
stop();
}
protected void action(Action action) {
@@ -76,6 +86,27 @@ public class Main extends ActionListener {
} catch (TargetNotSetException e) {}
}
/*protected void addDevices() throws DeviceInitialiseException {
for (String deviceClass : deviceClassArray) {
try {
Object object = Class.forName(deviceClass).getConstructor((Class[]) null).newInstance();
if (object instanceof Application) {
Device device = (Device) object;
add(device);
try {
device.initialise();
} catch (DeviceNotFoundException e) {}
}
} catch (IllegalArgumentException e) {
} catch (SecurityException e) {
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {
} catch (ClassNotFoundException e) {}
}
}*/
/* Add / remove methods */
protected void add(Application application) {
applicationCycle.add(application);
@@ -95,7 +126,9 @@ public class Main extends ActionListener {
public static void main(String[] args) {
try {
new Main().start();
Main main = new Main();
main.initialise();
main.run();
} catch (Exception e) {
e.printStackTrace();
}