* added IntervalWorker

* added CustomAppender for logging
* minor modifications
This commit is contained in:
2013-07-30 10:45:27 +02:00
parent 23634cf00e
commit a918758ee3
16 changed files with 743 additions and 638 deletions

View File

@@ -10,5 +10,6 @@
<classpathentry kind="lib" path="wiiusej.jar"/>
<classpathentry kind="lib" path="lib/commons-collections-3.2.1.jar"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@@ -1,4 +1,8 @@
log4j.rootLogger=TRACE, CA
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
log4j.appender.CUSTOM=test.CustomAppender
log4j.appender.CUSTOM.Bla=1234
log4j.appender.CUSTOM.layout=org.apache.log4j.PatternLayout
log4j.appender.CUSTOM.layout.ConversionPattern=[%d{MMM dd HH:mm:ss}] %-5p (%F:%L) - %m%n

Binary file not shown.

Binary file not shown.

BIN
java/mimis.exe Normal file

Binary file not shown.

View File

@@ -1,24 +1,25 @@
package mimis;
import mimis.exception.worker.ActivateException;
import mimis.util.swing.Dialog;
public class Client extends Main {
public static final String IP = "127.0.0.1";
public static final int PORT = 6789;
public Client(String ip, int port) {
super();
//eventRouter = new GlobalRouter(ip, port);
}
public void activate() throws ActivateException {
super.activate();
}
public static void main(String[] args) {
String ip = Dialog.question("Server IP:", IP);
int port = Integer.valueOf(Dialog.question("Server Port:", PORT));
new Client(ip, port).start();
}
package mimis;
import mimis.exception.worker.ActivateException;
import mimis.router.GlobalRouter;
import mimis.util.swing.Dialog;
public class Client extends Main {
public static final String IP = "127.0.0.1";
public static final int PORT = 6789;
public Client(String ip, int port) {
super();
router = new GlobalRouter(ip, port);
}
public void activate() throws ActivateException {
super.activate();
}
public static void main(String[] args) {
String ip = Dialog.question("Server IP:", IP);
int port = Integer.valueOf(Dialog.question("Server Port:", PORT));
new Client(ip, port).start();
}
}

View File

@@ -5,8 +5,6 @@ import java.util.ServiceLoader;
import javax.swing.UIManager;
import mimis.application.Application;
import mimis.device.Device;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.input.Task;
@@ -28,20 +26,18 @@ public class Main extends Mimis {
}
public static Component[] getApplications() {
ArrayList<Component> componentList = new ArrayList<Component>();
for (Application application : ServiceLoader.load(mimis.application.Application.class)) {
if (application instanceof Component) {
componentList.add((Component) application);
}
}
return componentList.toArray(new Component[]{});
return getComponents(mimis.application.Application.class);
}
public static Component[] getDevices() {
return getComponents(mimis.device.Device.class);
}
public static Component[] getComponents(Class<?> clazz) {
ArrayList<Component> componentList = new ArrayList<Component>();
for (Device device : ServiceLoader.load(mimis.device.Device.class)) {
if (device instanceof Component) {
componentList.add((Component) device);
for (Object object : ServiceLoader.load(clazz)) {
if (object instanceof Component) {
componentList.add((Component) object);
}
}
return componentList.toArray(new Component[]{});
@@ -95,6 +91,8 @@ public class Main extends Mimis {
case PREVIOUS:
applicationManager.currentChanged();
break;
default:
break;
}
}

View File

@@ -1,79 +1,81 @@
package mimis;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.input.Feedback;
import mimis.input.Task;
import mimis.manager.Manager;
import mimis.parser.Parser;
import mimis.router.Router;
import mimis.util.ArrayCycle;
import mimis.value.Action;
import mimis.value.Target;
import mimis.worker.Component;
public abstract class Mimis extends Component {
protected Component[] currentArray;
protected Manager manager;
protected ArrayCycle<Component> componentCycle;
public Mimis(Component... currentArray) {
this.currentArray = initialize(false, currentArray);
componentCycle = new ArrayCycle<Component>(currentArray);
router = new Router();
manager = new Manager(initialize(true, router, new Parser()));
}
public void activate() throws ActivateException {
manager.start();
super.activate();
}
protected void deactivate() throws DeactivateException {
super.deactivate();
manager.stop();
}
public void exit() {
super.exit();
manager.exit();
}
public Component[] initialize(boolean start, Component... componentArray) {
for (Component component : componentArray) {
component.setRouter(router);
if (start) {
component.start();
}
}
return componentArray;
}
public void task(Task task) {
if (task.getTarget().equals(Target.CURRENT)) {
componentCycle.current().add(task);
} else {
super.task(task);
}
}
public void end(Action action) {
switch (action) {
case CURRENT:
route(new Feedback("Current component: " + componentCycle.current().getTitle()));
break;
case NEXT:
log.debug("Next component");
route(new Feedback("Next component: " + componentCycle.next().getTitle()));
break;
case PREVIOUS:
log.debug("Previous component");
route(new Feedback("Previous component: " + componentCycle.previous().getTitle()));
break;
case EXIT:
exit();
break;
}
}
}
package mimis;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.input.Feedback;
import mimis.input.Task;
import mimis.manager.Manager;
import mimis.parser.Parser;
import mimis.router.Router;
import mimis.util.ArrayCycle;
import mimis.value.Action;
import mimis.value.Target;
import mimis.worker.Component;
public abstract class Mimis extends Component {
protected Component[] currentArray;
protected Manager manager;
protected ArrayCycle<Component> componentCycle;
public Mimis(Component... currentArray) {
this.currentArray = initialize(false, currentArray);
componentCycle = new ArrayCycle<Component>(currentArray);
router = new Router();
manager = new Manager(initialize(true, router, new Parser()));
}
public void activate() throws ActivateException {
manager.start();
super.activate();
}
protected void deactivate() throws DeactivateException {
super.deactivate();
manager.stop();
}
public void exit() {
super.exit();
manager.exit();
}
public Component[] initialize(boolean start, Component... componentArray) {
for (Component component : componentArray) {
component.setRouter(router);
if (start) {
component.start();
}
}
return componentArray;
}
public void task(Task task) {
if (task.getTarget().equals(Target.CURRENT)) {
componentCycle.current().add(task);
} else {
super.task(task);
}
}
public void end(Action action) {
switch (action) {
case CURRENT:
route(new Feedback("Current component: " + componentCycle.current().getTitle()));
break;
case NEXT:
log.debug("Next component");
route(new Feedback("Next component: " + componentCycle.next().getTitle()));
break;
case PREVIOUS:
log.debug("Previous component");
route(new Feedback("Previous component: " + componentCycle.previous().getTitle()));
break;
case EXIT:
exit();
break;
default:
break;
}
}
}

View File

@@ -1,177 +1,177 @@
package mimis.application.itunes;
import mimis.application.Application;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.value.Action;
import mimis.worker.Component;
import mimis.worker.Worker;
import com.dt.iTunesController.ITCOMDisabledReason;
import com.dt.iTunesController.ITTrack;
import com.dt.iTunesController.iTunes;
import com.dt.iTunesController.iTunesEventsInterface;
public class iTunesApplication extends Component implements Application, iTunesEventsInterface {
protected static final String TITLE = "iTunes";
protected static final boolean EVENTS = false;
protected static final int VOLUME_CHANGE_RATE = 5;
protected static final int VOLUME_SLEEP = 100;
protected static final String PLAYLIST_LIKE = "Like";
protected static final String PLAYLIST_DISLIKE = "Dislike";
protected iTunes iTunes;
protected VolumeWorker volumeWorker;
protected boolean events;
public iTunesApplication() {
this(EVENTS);
}
public iTunesApplication(boolean events) {
super(TITLE);
this.events = events;
volumeWorker = new VolumeWorker();
}
protected synchronized void activate() throws ActivateException {
iTunes = new iTunes();
iTunes.connect();
if (events) {
iTunes.addEventHandler(this);
}
super.activate();
}
public synchronized boolean active() {
try {
iTunes.getMute();
active = true;
} catch (Exception e) {
active = false;
}
return active;
}
protected synchronized void deactivate() throws DeactivateException {
if (events) {
exit();
} else {
super.deactivate();
volumeWorker.stop();
try {
iTunes.release();
} catch (Exception e) {
log.error(e);
throw new DeactivateException();
}
}
}
public synchronized void exit() {
try {
iTunes.quit();
} catch (Exception e) {}
volumeWorker.exit();
super.exit();
}
protected void begin(Action action) {
log.trace("iTunesApplication begin: " + action);
if (!active) return;
switch (action) {
case FORWARD:
iTunes.fastForward();
break;
case REWIND:
iTunes.rewind();
break;
case VOLUME_UP:
volumeWorker.start(VOLUME_CHANGE_RATE);
break;
case VOLUME_DOWN:
volumeWorker.start(-VOLUME_CHANGE_RATE);
break;
}
}
protected void end(Action action) {
log.trace("iTunesApplication end: " + action);
if (!active) return;
switch (action) {
case PLAY:
iTunes.playPause();
break;
case NEXT:
iTunes.nextTrack();
break;
case PREVIOUS:
iTunes.previousTrack();
break;
case FORWARD:
iTunes.resume();
break;
case REWIND:
iTunes.resume();
break;
case MUTE:
iTunes.toggleMute();
break;
case VOLUME_UP:
case VOLUME_DOWN:
volumeWorker.stop();
break;
case SHUFFLE:
iTunes.toggleShuffle();
break;
case REPEAT:
iTunes.cycleSongRepeat();
break;
case LIKE:
iTunes.playlistAddCurrentTrack(PLAYLIST_LIKE);
break;
case DISLIKE:
iTunes.playlistAddCurrentTrack(PLAYLIST_DISLIKE);
break;
}
}
protected int getVolume() {
return iTunes.getSoundVolume();
}
public void onDatabaseChangedEvent(int[][] deletedObjectIDs, int[][] changedObjectIDs) {}
public void onPlayerPlayEvent(ITTrack iTrack) {
if (active) {
log.trace("iTunesEvent: play");
}
}
public void onPlayerStopEvent(ITTrack iTrack) {
if (active) {
log.trace("iTunesEvent: stop");
}
}
public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack) {}
public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason) {}
public void onCOMCallsEnabledEvent() {}
public void onQuittingEvent() {}
public void onAboutToPromptUserToQuitEvent() {}
public void onSoundVolumeChangedEvent(int newVolume) {}
protected class VolumeWorker extends Worker {
protected int volumeChangeRate;
public void start(int volumeChangeRate) {
super.start();
this.volumeChangeRate = volumeChangeRate;
}
public void work() {
iTunes.setSoundVolume(getVolume() + volumeChangeRate);
sleep(VOLUME_SLEEP);
}
};
package mimis.application.itunes;
import mimis.application.Application;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.value.Action;
import mimis.worker.Component;
import mimis.worker.Worker;
import com.dt.iTunesController.ITCOMDisabledReason;
import com.dt.iTunesController.ITTrack;
import com.dt.iTunesController.iTunes;
import com.dt.iTunesController.iTunesEventsInterface;
public class iTunesApplication extends Component implements Application, iTunesEventsInterface {
protected static final String TITLE = "iTunes";
protected static final boolean EVENTS = false;
protected static final int VOLUME_CHANGE_RATE = 5;
protected static final int VOLUME_SLEEP = 100;
protected static final String PLAYLIST_LIKE = "Like";
protected static final String PLAYLIST_DISLIKE = "Dislike";
protected iTunes iTunes;
protected VolumeWorker volumeWorker;
protected boolean events;
public iTunesApplication() {
this(EVENTS);
}
public iTunesApplication(boolean events) {
super(TITLE);
this.events = events;
volumeWorker = new VolumeWorker();
}
protected synchronized void activate() throws ActivateException {
iTunes = new iTunes();
iTunes.connect();
if (events) {
iTunes.addEventHandler(this);
}
super.activate();
}
public synchronized boolean active() {
try {
iTunes.getMute();
active = true;
} catch (Exception e) {
active = false;
}
return active;
}
protected synchronized void deactivate() throws DeactivateException {
if (events) {
exit();
} else {
super.deactivate();
volumeWorker.stop();
try {
iTunes.release();
} catch (Exception e) {
log.error(e);
throw new DeactivateException();
}
}
}
public synchronized void exit() {
try {
iTunes.quit();
} catch (Exception e) {}
volumeWorker.exit();
super.exit();
}
protected void begin(Action action) {
log.trace("iTunesApplication begin: " + action);
if (!active) return;
switch (action) {
case FORWARD:
iTunes.fastForward();
break;
case REWIND:
iTunes.rewind();
break;
case VOLUME_UP:
volumeWorker.start(VOLUME_CHANGE_RATE);
break;
case VOLUME_DOWN:
volumeWorker.start(-VOLUME_CHANGE_RATE);
break;
}
}
protected void end(Action action) {
log.trace("iTunesApplication end: " + action);
if (!active) return;
switch (action) {
case PLAY:
iTunes.playPause();
break;
case NEXT:
iTunes.nextTrack();
break;
case PREVIOUS:
iTunes.previousTrack();
break;
case FORWARD:
iTunes.resume();
break;
case REWIND:
iTunes.resume();
break;
case MUTE:
iTunes.toggleMute();
break;
case VOLUME_UP:
case VOLUME_DOWN:
volumeWorker.stop();
break;
case SHUFFLE:
iTunes.toggleShuffle();
break;
case REPEAT:
iTunes.cycleSongRepeat();
break;
case LIKE:
iTunes.playlistAddCurrentTrack(PLAYLIST_LIKE);
break;
case DISLIKE:
iTunes.playlistAddCurrentTrack(PLAYLIST_DISLIKE);
break;
}
}
protected int getVolume() {
return iTunes.getSoundVolume();
}
public void onDatabaseChangedEvent(int[][] deletedObjectIDs, int[][] changedObjectIDs) {}
public void onPlayerPlayEvent(ITTrack iTrack) {
if (active) {
log.trace("iTunesEvent: play");
}
}
public void onPlayerStopEvent(ITTrack iTrack) {
if (active) {
log.trace("iTunesEvent: stop");
}
}
public void onPlayerPlayingTrackChangedEvent(ITTrack iTrack) {}
public void onCOMCallsDisabledEvent(ITCOMDisabledReason reason) {}
public void onCOMCallsEnabledEvent() {}
public void onQuittingEvent() {}
public void onAboutToPromptUserToQuitEvent() {}
public void onSoundVolumeChangedEvent(int newVolume) {}
protected class VolumeWorker extends Worker {
protected int volumeChangeRate;
public void start(int volumeChangeRate) {
super.start();
this.volumeChangeRate = volumeChangeRate;
}
public void work() {
iTunes.setSoundVolume(getVolume() + volumeChangeRate);
sleep(VOLUME_SLEEP);
}
};
}

View File

@@ -1,81 +1,76 @@
package mimis.manager;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.border.TitledBorder;
import mimis.worker.Worker;
public class ButtonManager extends Manager {
protected static final String TITLE = "Workers";
protected String title;
protected Map<Worker, WorkerButton> buttonMap;
public ButtonManager(Worker... workerArray) {
this(TITLE, workerArray);
}
public ButtonManager(String title, Worker... workerArray) {
super(workerArray);
this.title = title;
createButtons();
}
public String getTitle() {
return title;
}
public WorkerButton[] getButtons() {
return buttonMap.values().toArray(new WorkerButton[]{});
}
protected void createButtons() {
buttonMap = new HashMap<Worker, WorkerButton>();
for (Worker worker : workerList) {
WorkerButton button = new WorkerButton(worker);
buttonMap.put(worker, button);
}
}
public JPanel createPanel() {
/* Initialize components */
GridBagLayout gridBagLayout = new GridBagLayout();
GridBagConstraints gridBagConstraints = new GridBagConstraints();
JPanel panel = new JPanel(gridBagLayout);
/* Set border */
TitledBorder border = new TitledBorder(getTitle());
border.setTitleJustification(TitledBorder.CENTER);
panel.setBorder(border);
/* Initialize constraints */
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
gridBagConstraints.weightx = 1;
gridBagConstraints.weighty = 1;
/* Add buttons */
for (JToggleButton button : getButtons()) {
gridBagLayout.setConstraints(button, gridBagConstraints);
panel.add(button);
}
return panel;
}
protected void work() {
long before = Calendar.getInstance().getTimeInMillis();
for (Worker worker : workerList) {
buttonMap.get(worker).setPressed(worker.active());
}
long after = Calendar.getInstance().getTimeInMillis();
int sleep = INTERVAL - (int) (after - before);
sleep(sleep);
}
}
package mimis.manager;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.border.TitledBorder;
import mimis.worker.Worker;
public class ButtonManager extends Manager {
protected static final String TITLE = "Workers";
protected String title;
protected Map<Worker, WorkerButton> buttonMap;
public ButtonManager(Worker... workerArray) {
this(TITLE, workerArray);
}
public ButtonManager(String title, Worker... workerArray) {
super(workerArray);
this.title = title;
createButtons();
}
public String getTitle() {
return title;
}
public WorkerButton[] getButtons() {
return buttonMap.values().toArray(new WorkerButton[]{});
}
protected void createButtons() {
buttonMap = new HashMap<Worker, WorkerButton>();
for (Worker worker : workerList) {
WorkerButton button = new WorkerButton(worker);
buttonMap.put(worker, button);
}
}
public JPanel createPanel() {
/* Initialize components */
GridBagLayout gridBagLayout = new GridBagLayout();
GridBagConstraints gridBagConstraints = new GridBagConstraints();
JPanel panel = new JPanel(gridBagLayout);
/* Set border */
TitledBorder border = new TitledBorder(getTitle());
border.setTitleJustification(TitledBorder.CENTER);
panel.setBorder(border);
/* Initialize constraints */
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
gridBagConstraints.weightx = 1;
gridBagConstraints.weighty = 1;
/* Add buttons */
for (JToggleButton button : getButtons()) {
gridBagLayout.setConstraints(button, gridBagConstraints);
panel.add(button);
}
return panel;
}
protected void work() {
for (Worker worker : workerList) {
buttonMap.get(worker).setPressed(worker.active());
}
}
}

View File

@@ -1,55 +1,51 @@
package mimis.manager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import mimis.exception.worker.DeactivateException;
import mimis.worker.Worker;
public class Manager extends Worker {
protected static final int INTERVAL = 1000;
protected ArrayList<Worker> workerList;
public Manager(Worker... workerArray) {
workerList = new ArrayList<Worker>();
add(workerArray);
}
public void add(Worker... workerArray) {
workerList.addAll(Arrays.asList(workerArray));
}
public void remove(Worker... workerArray) {
workerList.removeAll(Arrays.asList(workerArray));
}
protected void deactivate() throws DeactivateException {
super.deactivate();
for (Worker worker : workerList) {
worker.stop();
}
}
public void exit() {
super.exit();
package mimis.manager;
import java.util.ArrayList;
import java.util.Arrays;
import mimis.exception.worker.DeactivateException;
import mimis.worker.IntervalWorker;
import mimis.worker.Worker;
public class Manager extends IntervalWorker {
protected static final int INTERVAL = 1000;
protected ArrayList<Worker> workerList;
public Manager(Worker... workerArray) {
workerList = new ArrayList<Worker>();
add(workerArray);
}
public void add(Worker... workerArray) {
workerList.addAll(Arrays.asList(workerArray));
}
public void remove(Worker... workerArray) {
workerList.removeAll(Arrays.asList(workerArray));
}
protected void deactivate() throws DeactivateException {
super.deactivate();
for (Worker worker : workerList) {
worker.exit();
}
}
public int count() {
return workerList.size();
}
protected void work() {
long before = Calendar.getInstance().getTimeInMillis();
for (Worker worker : workerList) {
worker.active();
}
long after = Calendar.getInstance().getTimeInMillis();
int sleep = INTERVAL - (int) (after - before);
sleep(sleep);
}
}
worker.stop();
}
}
public void exit() {
super.exit();
for (Worker worker : workerList) {
worker.exit();
}
}
public int count() {
return workerList.size();
}
protected void work() {
for (Worker worker : workerList) {
worker.active();
}
}
}

View File

@@ -1,90 +1,89 @@
package mimis.router;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.input.Feedback;
import mimis.input.Task;
import mimis.worker.Component;
import mimis.worker.Worker;
public class GlobalRouter extends Component {
protected String ip;
protected int port;
protected Client client;
public GlobalRouter(String ip, int port) {
this.ip = ip;
this.port = port;
}
protected void activate() throws ActivateException {
try {
client = new Client(ip, port);
} catch (IOException e) {
log.error(e);
throw new ActivateException();
}
super.activate();
}
protected void deactivate() throws DeactivateException {
super.deactivate();
client.stop();
}
public void task(Task task) {
try {
client.send(task);
} catch (IOException e) {
log.error(e);
}
}
class Client extends Worker {
protected Socket socket;
protected ObjectInputStream objectInputStream;
protected ObjectOutputStream objectOutputStream;
public Client(String ip, int port) throws IOException {
socket = new Socket(ip, port);
objectInputStream = new ObjectInputStream(socket.getInputStream());
objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
}
public void work() {
try {
Object object;
do {
object = objectInputStream.readObject();
if (object instanceof Feedback) {
add((Feedback) object);
}
} while (object != null);
} catch (IOException e) {
log.error(e);
} catch (ClassNotFoundException e) {
log.error(e);
}
}
protected void deactivate() throws DeactivateException {
super.deactivate();
try {
objectInputStream.close();
objectOutputStream.close();
socket.close();
} catch (IOException e) {
log.error(e);
}
}
public void send(Object object) throws IOException {
objectOutputStream.writeObject(object);
}
}
}
package mimis.router;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import mimis.input.Feedback;
import mimis.input.Task;
import mimis.worker.Worker;
public class GlobalRouter extends Router {
protected String ip;
protected int port;
protected Client client;
public GlobalRouter(String ip, int port) {
this.ip = ip;
this.port = port;
}
protected void activate() throws ActivateException {
try {
client = new Client(ip, port);
} catch (IOException e) {
log.error(e);
throw new ActivateException();
}
super.activate();
}
protected void deactivate() throws DeactivateException {
super.deactivate();
client.stop();
}
public void task(Task task) {
try {
client.send(task);
} catch (IOException e) {
log.error(e);
}
}
class Client extends Worker {
protected Socket socket;
protected ObjectInputStream objectInputStream;
protected ObjectOutputStream objectOutputStream;
public Client(String ip, int port) throws IOException {
socket = new Socket(ip, port);
objectInputStream = new ObjectInputStream(socket.getInputStream());
objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
}
public void work() {
try {
Object object;
do {
object = objectInputStream.readObject();
if (object instanceof Feedback) {
add((Feedback) object);
}
} while (object != null);
} catch (IOException e) {
log.error(e);
} catch (ClassNotFoundException e) {
log.error(e);
}
}
protected void deactivate() throws DeactivateException {
super.deactivate();
try {
objectInputStream.close();
objectOutputStream.close();
socket.close();
} catch (IOException e) {
log.error(e);
}
}
public void send(Object object) throws IOException {
objectOutputStream.writeObject(object);
}
}
}

View File

@@ -0,0 +1,81 @@
package mimis.worker;
import java.util.Timer;
import java.util.TimerTask;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
public class IntervalWorker extends Worker {
protected static final boolean THREAD = true;
protected static final int INTERVAL = 500;
protected Timer timer;
public synchronized void start(boolean thread) {
if (!active) {
activate = true;
timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
IntervalWorker.this.run();
}}, 0, INTERVAL);
active = true;
}
if (!thread) {
try {
synchronized (this) {
wait();
}
} catch (InterruptedException e) {
log.info(e);
}
}
}
public synchronized void stop() {
if (active) {
timer.cancel();
deactivate = true;
run();
notifyAll();
}
}
public void run() {
if (activate && !active) {
try {
super.activate();
} catch (ActivateException e) {
log.error(e);
} finally {
activate = false;
}
} else if (deactivate && active) {
try {
super.deactivate();
} catch (DeactivateException e) {
log.error(e);
} finally {
deactivate = false;
}
}
if (active) {
work();
}
}
protected void work() {
System.out.println("(-:");
}
public static void main(String[] args) {
IntervalWorker intervalWorker = new IntervalWorker();
for (int i = 0; i < 3; ++i) {
intervalWorker.start(false);
System.out.println("--");
intervalWorker.sleep(200);
intervalWorker.stop();
}
}
}

View File

@@ -1,122 +1,123 @@
package mimis.worker;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public abstract class Worker implements Runnable {
protected Log log = LogFactory.getLog(getClass());
protected static final boolean THREAD = false;
protected static final int SLEEP = 100;
protected boolean thread = true;
protected boolean interrupt;
protected boolean run = false;
protected boolean active = false;
protected boolean activate = false;
protected boolean deactivate = false;
public Worker() {}
public Worker(boolean thread) {
this.thread = thread;
}
public synchronized final void start(boolean thread) {
if (!active) {
activate = true;
}
if (!run) {
run = true;
if (thread) {
log.debug("Start thread");
new Thread(this, getClass().getName()).start();
} else {
log.debug("Run directly");
run();
}
} else {
notifyAll();
}
}
public synchronized final void start() {
start(thread);
}
public synchronized final void stop() {
if (active) {
deactivate = true;
}
notifyAll();
}
public void exit() {
stop();
run = false;
}
protected void sleep(int time) {
try {
if (time > 0) {
Thread.sleep(time);
}
} catch (InterruptedException e) {
log.info(e);
}
}
protected void sleep() {
sleep(SLEEP);
}
public boolean active() {
return active;
}
protected void activate() throws ActivateException {
active = true;
}
protected void deactivate() throws DeactivateException {
active = false;
}
public final void run() {
while (run || deactivate) {
if (activate && !active) {
try {
activate();
} catch (ActivateException e) {
log.error(e);
} finally {
activate = false;
}
} else if (deactivate && active) {
try {
deactivate();
} catch (DeactivateException e) {
log.error(e);
} finally {
deactivate = false;
}
}
if (active) {
work();
} else if (run) {
try {
synchronized (this) {
wait();
}
} catch (InterruptedException e) {
log.info(e);
}
}
}
}
protected abstract void work();
}
package mimis.worker;
import mimis.exception.worker.ActivateException;
import mimis.exception.worker.DeactivateException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public abstract class Worker implements Runnable {
protected Log log = LogFactory.getLog(getClass());
protected static final boolean THREAD = true;
protected static final int SLEEP = 100;
protected boolean thread = true;
protected boolean run = false;
protected boolean active = false;
protected boolean activate = false;
protected boolean deactivate = false;
public Worker(boolean thread) {
this.thread = thread;
}
public Worker() {
this(THREAD);
}
public synchronized void start(boolean thread) {
if (!active) {
activate = true;
}
if (!run) {
run = true;
if (thread) {
log.debug("Start thread");
new Thread(this, getClass().getName()).start();
} else {
log.debug("Run directly");
run();
}
} else {
notifyAll();
}
}
public synchronized void start() {
start(thread);
}
public synchronized void stop() {
if (active) {
deactivate = true;
}
notifyAll();
}
public void exit() {
stop();
run = false;
}
protected void sleep(int time) {
try {
if (time > 0) {
Thread.sleep(time);
}
} catch (InterruptedException e) {
log.info(e);
}
}
protected void sleep() {
sleep(SLEEP);
}
public boolean active() {
return active;
}
protected void activate() throws ActivateException {
active = true;
}
protected void deactivate() throws DeactivateException {
active = false;
}
public void run() {
while (run || deactivate) {
if (activate && !active) {
try {
activate();
} catch (ActivateException e) {
log.error(e);
} finally {
activate = false;
}
} else if (deactivate && active) {
try {
deactivate();
} catch (DeactivateException e) {
log.error(e);
} finally {
deactivate = false;
}
}
if (active) {
work();
} else if (run) {
try {
synchronized (this) {
wait();
}
} catch (InterruptedException e) {
log.info(e);
}
}
}
}
protected abstract void work();
}

View File

@@ -0,0 +1,27 @@
package test;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
public class CustomAppender extends AppenderSkeleton {
protected int bla = 9999;
public void setBla(int bla) {
this.bla = bla;
}
public int getBla() {
return bla;
}
public boolean requiresLayout() {
return true;
}
public void close() {}
protected void append(LoggingEvent loggingEvent) {
System.out.print(layout.format(loggingEvent));
}
}

BIN
java/wiiusej.jar Normal file

Binary file not shown.