Action invoke systeem verbeterd en nette exceptions geintroduceerd.

This commit is contained in:
2011-02-03 14:41:12 +00:00
parent 76fdef60be
commit e9a3cd661f
12 changed files with 100 additions and 48 deletions

View File

@@ -4,20 +4,24 @@ import java.util.ArrayList;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import pm.action.Action;
import pm.applicatie.voorbeeld.Voorbeeld;
import pm.application.Application;
import pm.device.Device;
import pm.device.example.Example;
import pm.event.Event;
import pm.event.ApplicationEvent;
import pm.exception.ActionException;
import pm.exception.ActionNotImplementedException;
import pm.exception.EventException;
public class Main {
public static final int SLEEP = 100;
public class Main extends Application {
protected static final int SLEEP = 100;
ArrayList<Application> applicationList;
ArrayList<Device> deviceList;
Queue<Event> eventQueue;
boolean run;
Application currentApplication;
public Main() {
@@ -42,33 +46,51 @@ public class Main {
return deviceList.remove(device);
}
public void start() {
public void start() throws Exception {
addDevice(new Example(eventQueue));
Application application = new Voorbeeld();
addApplication(application);
currentApplication = application;
run();
}
public void run() {
while (true) {
public void run() throws ActionException, EventException {
run = true;
while (run) {
if (eventQueue.isEmpty()) {
try {
Thread.sleep(SLEEP);
} catch (InterruptedException e) {}
} else {
Event event = eventQueue.poll();
if (event instanceof ApplicationEvent) {
try {
currentApplication.invoke(event.getAction());
} catch (Exception e) {
e.printStackTrace();
}
Action action = event.getAction();
switch (event.getType()) {
case MAIN:
invoke(action);
break;
case APPLICATION:
try {
currentApplication.invoke(action);
} catch (ActionNotImplementedException e) {
// Todo: log.write(...)
}
break;
default:
throw new EventException("Unknown event type");
}
}
}
}
public void exit() {
run = false;
}
public static void main(String[] args) {
new Main().start();
try {
new Main().start();
} catch (Exception e) {
e.printStackTrace();
}
}
}