* pakket value gemaakt voor algemene enums

* LanTextClient in eigen pakket client gezet
* TextDevice en LanTextDevice nog generieker gemaakt:
- standaard thread model toegepast met start en stop methoden
- threads verplaatst buiten devices:
-- devices zouden run methode uit de task listener overriden
-- run methode uit tasklistener final gemaakt
This commit is contained in:
2011-02-22 22:26:01 +00:00
parent 24a49e5d49
commit ac1480d24c
31 changed files with 172 additions and 127 deletions

View File

@@ -11,15 +11,16 @@ import pm.application.windows.wmp.WMPApplication;
import pm.device.gui.GUIDevice;
import pm.device.javainput.rumblepad.RumblepadDevice;
import pm.device.jintellitype.JIntellitypeDevice;
import pm.device.lantextinput.LanTextDevice;
import pm.device.player.PlayerDevice;
import pm.device.textinput.TextDevice;
import pm.device.text.TextDevice;
import pm.device.text.lan.LanTextDevice;
import pm.device.wiimote.WiimoteDevice;
import pm.exception.application.ApplicationExitException;
import pm.exception.device.DeviceExitException;
import pm.exception.device.DeviceInitialiseException;
import pm.task.TaskManager;
import pm.task.TaskListener;
import pm.value.Action;
public class Main extends TaskListener {
//protected String[] deviceClassArray;
@@ -45,7 +46,7 @@ public class Main extends TaskListener {
//add(new RumblepadDevice());
//add(new WiimoteDevice());
//add(new GUIDevice());
//add(new TextDevice());
add(new TextDevice());
add(new LanTextDevice());
for (Device device : deviceList) {
try {

View File

@@ -1,5 +1,8 @@
package pm;
import pm.value.Action;
import pm.value.Target;
public class Task {
protected Action action;
protected Target target;

View File

@@ -1,7 +1,7 @@
package pm.application.example;
import pm.Action;
import pm.Application;
import pm.value.Action;
public class ExampleApplication extends Application {
protected void action(Action action) {

View File

@@ -1,8 +1,8 @@
package pm.application.itunes;
import pm.Action;
import pm.Application;
import pm.exception.application.ApplicationExitException;
import pm.value.Action;
import com.dt.iTunesController.ITCOMDisabledReason;
import com.dt.iTunesController.ITTrack;

View File

@@ -1,9 +1,9 @@
package pm.application.winamp;
import pm.Action;
import pm.Application;
import pm.exception.application.ApplicationExitException;
import pm.exception.application.ApplicationInitialiseException;
import pm.value.Action;
import com.qotsa.exception.InvalidHandle;
import com.qotsa.exception.InvalidParameter;

View File

@@ -9,6 +9,8 @@ import pm.exception.application.windows.SendCommandException;
import pm.exception.application.windows.SendKeyException;
import pm.util.Native;
import pm.util.Windows;
import pm.value.Key;
import pm.value.Type;
import com.eaio.nativecall.IntCall;
import com.eaio.nativecall.NativeCall;

View File

@@ -1,12 +1,12 @@
package pm.application.windows.gomplayer;
import pm.Action;
import pm.application.windows.Command;
import pm.application.windows.Type;
import pm.application.windows.Key;
import pm.application.windows.WindowsApplication;
import pm.exception.application.windows.SendCommandException;
import pm.exception.application.windows.SendKeyException;
import pm.value.Action;
import pm.value.Key;
import pm.value.Type;
public class GomPlayerApplication extends WindowsApplication {
protected final static String PROGRAM = "GOM.exe";

View File

@@ -1,10 +1,10 @@
package pm.application.windows.wmp;
import pm.Action;
import pm.application.windows.Command;
import pm.application.windows.WindowsApplication;
import pm.exception.application.ApplicationInitialiseException;
import pm.exception.application.windows.SendCommandException;
import pm.value.Action;
public class WMPApplication extends WindowsApplication {
protected final static String PROGRAM = "wmplayer.exe";

View File

@@ -1,19 +1,18 @@
package pm.device.lantextinput;
package pm.client;
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class LanTextClient {
static final String HOST = "127.0.0.1"; //localhost
static final String HOST = "127.0.0.1"; // localhost
static final int PORT = 1234;
protected boolean run;
protected Socket socket;
protected Scanner input;
protected PrintStream output;
LanTextClient(){
public LanTextClient(String host, int port) {
try {
socket = new Socket(HOST, PORT);
input = new Scanner(System.in);
@@ -22,13 +21,17 @@ public class LanTextClient {
e.printStackTrace();
}
}
protected void start(){
while(run){
public LanTextClient() {
this(HOST, PORT);
}
protected void start() {
while (true) {
output.println(input.nextLine());
}
}
public static void main(String[] argv) {
new LanTextClient().start();
}

View File

@@ -1,8 +1,8 @@
package pm.device.example;
import pm.Action;
import pm.Device;
import pm.Target;
import pm.value.Action;
import pm.value.Target;
public class ExampleDevice extends Device {
public void initialise() {

View File

@@ -5,10 +5,10 @@ import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import pm.Action;
import pm.Target;
import pm.Task;
import pm.task.TaskManager;
import pm.value.Action;
import pm.value.Target;
import layout.TableLayout;
import layout.TableLayoutConstraints;

View File

@@ -1,9 +1,7 @@
package pm.device.javainput.extreme3d;
import pm.Action;
import pm.Button;
import pm.Macro;
import pm.Target;
import pm.Task;
import pm.device.javainput.DirectionButton;
import pm.device.javainput.JavaInputDevice;
@@ -14,6 +12,8 @@ import pm.exception.event.UnknownDirectionException;
import pm.macro.event.Hold;
import pm.macro.event.Press;
import pm.macro.event.Release;
import pm.value.Action;
import pm.value.Target;
import de.hardcode.jxinput.event.JXInputButtonEvent;
import de.hardcode.jxinput.event.JXInputDirectionalEvent;

View File

@@ -1,8 +1,6 @@
package pm.device.javainput.rumblepad;
import pm.Action;
import pm.Button;
import pm.Target;
import pm.Task;
import pm.device.javainput.DirectionButton;
import pm.device.javainput.JavaInputDevice;
@@ -13,6 +11,8 @@ import pm.macro.event.Hold;
import pm.macro.event.Press;
import pm.task.Continuous;
import pm.task.Dynamic;
import pm.value.Action;
import pm.value.Target;
import de.hardcode.jxinput.event.JXInputButtonEvent;
import de.hardcode.jxinput.event.JXInputDirectionalEvent;

View File

@@ -4,8 +4,8 @@ import java.util.ArrayList;
import com.melloware.jintellitype.JIntellitype;
import pm.application.windows.Key;
import pm.macro.event.Press;
import pm.value.Key;
public class Hotkey extends Press {
protected static ArrayList<Hotkey> hotkeyList;

View File

@@ -6,16 +6,16 @@ import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.IntellitypeListener;
import com.melloware.jintellitype.JIntellitype;
import pm.Action;
import pm.Device;
import pm.Target;
import pm.Task;
import pm.application.windows.Key;
import pm.exception.EventException;
import pm.exception.device.DeviceInitialiseException;
import pm.macro.event.Press;
import pm.macro.event.Release;
import pm.task.Continuous;
import pm.value.Action;
import pm.value.Key;
import pm.value.Target;
public class JIntellitypeDevice extends Device implements HotkeyListener, IntellitypeListener {
protected ArrayList<Hotkey> hotkeyList;

View File

@@ -1,31 +0,0 @@
package pm.device.lantextinput;
import java.io.IOException;
import java.net.ServerSocket;
import pm.Device;
public class LanTextDevice extends Device implements Runnable {
static final int PORT = 1234;
protected ServerSocket socket;
public void initialise() {
try {
socket = new ServerSocket(PORT);
} catch (IOException e) {
e.printStackTrace();
}
new Thread(this).start();
}
public void run() {
while(true){
try {
new LanTextListener(socket.accept());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

View File

@@ -1,39 +0,0 @@
package pm.device.lantextinput;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
import pm.device.textinput.TextDevice;
public class LanTextListener extends TextDevice {
protected Socket socket;
public LanTextListener(Socket socket) {
this.socket = socket;
initialise();
}
public void initialise() {
try {
input = new Scanner(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
run = true;
new Thread(this).start();
}
protected boolean running() {
return run && socket.isConnected() && input.hasNext();
}
public void exit() {
run = false;
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@@ -1,21 +1,24 @@
package pm.device.textinput;
package pm.device.text;
import java.io.InputStream;
import java.util.Scanner;
import pm.Action;
import pm.Device;
import pm.Target;
import pm.Task;
import pm.task.TaskManager;
import pm.value.Action;
import pm.value.Target;
public class TextDevice extends Device implements Runnable {
static final int SLEEP = 100;
public class InputListener implements Runnable {
protected static final int SLEEP = 100;
protected boolean run;
protected Scanner input;
public void initialise() {
input = new Scanner(System.in);
public InputListener(InputStream inputStream) {
input = new Scanner(inputStream);
}
public void start() {
new Thread(this).start();
}
@@ -36,8 +39,12 @@ public class TextDevice extends Device implements Runnable {
}
}
}
protected boolean running() {
return run && input.hasNext();
}
public void stop() {
run = false;
}
}

View File

@@ -0,0 +1,19 @@
package pm.device.text;
import pm.Device;
public class TextDevice extends Device implements Runnable {
InputListener inputListener;
public TextDevice() {
inputListener = new InputListener(System.in);
}
public void initialise() {
inputListener.start();
}
public void exit() {
inputListener.stop();
}
}

View File

@@ -0,0 +1,27 @@
package pm.device.text.lan;
import java.io.IOException;
import java.net.ServerSocket;
import pm.Device;
import pm.exception.device.DeviceInitialiseException;
public class LanTextDevice extends Device {
static final int PORT = 1234;
protected ServerSocket socket;
protected SocketListener socketListener;
public void initialise() throws DeviceInitialiseException {
try {
socket = new ServerSocket(PORT);
socketListener = new SocketListener(socket);
socketListener.start();
} catch (IOException e) {
throw new DeviceInitialiseException();
}
}
public void exit() {
socketListener.stop();
}
}

View File

@@ -0,0 +1,47 @@
package pm.device.text.lan;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import pm.device.text.InputListener;
public class SocketListener implements Runnable {
protected boolean run;
protected ServerSocket server;
protected ArrayList<InputListener> inputListenerList;
public SocketListener(ServerSocket server) {
this.server = server;
inputListenerList = new ArrayList<InputListener>();
}
public void start() {
new Thread(this).start();
}
public void run() {
run = true;
while (run) {
try {
Socket socket = server.accept();
InputStream inputStream = socket.getInputStream();
InputListener inputListener = new InputListener(inputStream);
inputListenerList.add(inputListener);
inputListener.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void stop() {
run = false;
for (InputListener inputListener : inputListenerList) {
inputListener.stop();
}
}
}

View File

@@ -4,10 +4,8 @@ import org.wiigee.event.GestureEvent;
import org.wiigee.event.GestureListener;
import org.wiigee.util.Log;
import pm.Action;
import pm.Button;
import pm.Device;
import pm.Target;
import pm.Task;
import pm.device.javainput.rumblepad.RumblepadButton;
import pm.device.wiimote.gesture.GestureDevice;
@@ -18,6 +16,8 @@ import pm.macro.event.Press;
import pm.macro.event.Release;
import pm.task.Continuous;
import pm.task.Dynamic;
import pm.value.Action;
import pm.value.Target;
import wiiusej.Wiimote;
import wiiusej.values.Acceleration;

View File

@@ -1,8 +1,8 @@
package pm.task;
import pm.Action;
import pm.Target;
import pm.Task;
import pm.value.Action;
import pm.value.Target;
public class Continuous extends Task {
protected static final int SLEEP = 0;

View File

@@ -1,7 +1,7 @@
package pm.task;
import pm.Action;
import pm.Target;
import pm.value.Action;
import pm.value.Target;
public class Dynamic extends Continuous {
protected static final int RATE = 10;

View File

@@ -3,8 +3,8 @@ package pm.task;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import pm.Action;
import pm.Task;
import pm.value.Action;
public abstract class TaskListener implements Runnable {
protected static final int SLEEP = 100;
@@ -21,7 +21,7 @@ public abstract class TaskListener implements Runnable {
new Thread(this).start();
}
public void run() {
public final void run() {
run = true;
while (run) {
if (taskQueue.isEmpty()) {

View File

@@ -5,9 +5,9 @@ import java.util.ArrayList;
import pm.Application;
import pm.Device;
import pm.Main;
import pm.Target;
import pm.Task;
import pm.application.ApplicationCycle;
import pm.value.Target;
public class TaskManager {
protected static ArrayList<TaskListener> taskListenerList;

View File

@@ -9,29 +9,35 @@ exeptions en foutmeldingen nakijken/afhandelen/loggen
initialises en exits controleren op succes. tussendoor afgesloten apps en devs herkennen en restarten? op runtime nieuwe applicaties of devices toevoegen of sluiten.
feedback systeem implementeren, rumble voor zowel wiimote als rumblepad
nummerinfo weergeven, waar? via feedback?
javadoc maken, class diagram opstellen enz.....
meer applicaties implementeren, zoals VLC, WMP, Youtube? (interface naar flash?)
logo ontwerpen
client maken die remote devices kan beheren en lokaal acties kan uitvoeren
mogelijkheid tot webstart onderzoeken
alle listeners in gezamelijk pakket plaatsen?
algemene listener parent class / interface maken? die zou standaard thread functies implementeren / vereisen: start, run, stop
IN PROGRESS
-------------
naamgeving en indeling classes/packages controleren
+TaskGatherererer hernoemt naar TaskManager
+value package waar algemene (gedeelde) enums in komen
exporteren naar uitvoerbare jar file
+Eclipse kan exporteren, maar bij uitvoeren gebeurd er niets. Moet er een status scherm komen? (Een swing console bijvoorbeeld)
logo ontwerpen
+logo is af, favicon maken?
feedback systeem implementeren, rumble voor zowel wiimote als rumblepad
+feedback voor rumblepad komt er niet, te veel werk en gebruikte api lijkt niet eenvoudig aanpasbaar
DONE
-------------
lantextdevice generiek maken met normale textdevice

View File

@@ -1,4 +1,4 @@
package pm;
package pm.value;
public enum Action {
EXIT,

View File

@@ -1,4 +1,4 @@
package pm.application.windows;
package pm.value;
public enum Key {
/*

View File

@@ -1,4 +1,4 @@
package pm;
package pm.value;
public enum Target {
ALL, MAIN, DEVICES, APPLICATIONS, APPLICATION;

View File

@@ -1,4 +1,4 @@
package pm.application.windows;
package pm.value;
public enum Type {
UP (0x0101), // WM_KEYUP