Snapshot of base part

This commit is contained in:
2016-06-20 11:11:57 +01:00
parent 84f3da2941
commit 1317047268
6 changed files with 365 additions and 377 deletions

View File

@@ -1,14 +1,11 @@
package base.work; package base.work;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.util.Queue; import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
import base.exception.worker.ActivateException; import base.exception.worker.ActivateException;
import base.worker.ForegroundListener;
import base.worker.BackgroundListener; import base.worker.BackgroundListener;
import base.worker.ForegroundListener;
import base.worker.Worker; import base.worker.Worker;
import base.worker.pool.Listener; import base.worker.pool.Listener;
import base.worker.pool.ListenerPool; import base.worker.pool.ListenerPool;
@@ -26,6 +23,7 @@ public abstract class Listen<E> extends Work implements Listener<E> {
} }
protected Listen(Worker.Type workerType) { protected Listen(Worker.Type workerType) {
queue = new ConcurrentLinkedQueue<E>();
this.workerType = workerType; this.workerType = workerType;
switch (workerType) { switch (workerType) {
case DIRECT: case DIRECT:
@@ -37,7 +35,6 @@ public abstract class Listen<E> extends Work implements Listener<E> {
listener = new BackgroundListener<E>(this); listener = new BackgroundListener<E>(this);
break; break;
} }
queue = new ConcurrentLinkedQueue<E>();
} }
protected Listen(Worker worker) { protected Listen(Worker worker) {
@@ -55,6 +52,7 @@ public abstract class Listen<E> extends Work implements Listener<E> {
if (workerType.equals(Worker.Type.DIRECT)) { if (workerType.equals(Worker.Type.DIRECT)) {
input(element); input(element);
} else { } else {
queue.add(element);
listener.add(element); listener.add(element);
} }
} }
@@ -92,17 +90,7 @@ public abstract class Listen<E> extends Work implements Listener<E> {
} }
} }
public void input(Object object) { public void input(E element) {
MethodType methodType = MethodType.methodType(void.class, object.getClass()); System.err.println(element);
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodHandle methodHandle;
try {
methodHandle = lookup.findVirtual(getClass(), "input", methodType);
methodHandle.invoke(this, object);
} catch (Exception e) {
logger.error("", e);
} catch (Throwable e) {
logger.error("", e);
}
} }
} }

View File

@@ -48,17 +48,17 @@ public abstract class Work implements Control {
} }
public void start() { public void start() {
logger.debug("Work: start()"); logger.trace("Work: start()");
worker.start(); worker.start();
} }
public void stop() { public void stop() {
logger.debug("Work: stop()"); logger.trace("Work: stop()");
worker.stop(); worker.stop();
} }
public boolean active() { public boolean active() {
logger.debug("Work: active()"); logger.trace("Work: active()");
return worker.active(); return worker.active();
} }

View File

@@ -7,16 +7,15 @@ public class BackgroundListener<E> extends ThreadWorker implements Listener<E> {
protected Listen<E> listen; protected Listen<E> listen;
public BackgroundListener(Listen<E> listen) { public BackgroundListener(Listen<E> listen) {
super(listen); this(listen, true);
}
public BackgroundListener(Listen<E> listen, boolean thread) {
super(listen, thread);
this.listen = listen; this.listen = listen;
} }
public BackgroundListener(Listen<E> listen, boolean start) {
super(listen);
}
public void add(E element) { public void add(E element) {
listen.queue.add(element);
listen.notify(); listen.notify();
} }
} }

View File

@@ -39,7 +39,7 @@ public class ThreadWorker extends Worker implements Runnable {
} }
public void exit() { public void exit() {
work.stop();
run = false; run = false;
work.stop();
} }
} }

View File

@@ -29,7 +29,7 @@ public abstract class Worker {
} }
public boolean active() { public boolean active() {
logger.debug("Worker: active()"); logger.trace("Worker: active()");
return deactivate || active; return deactivate || active;
} }
@@ -44,7 +44,7 @@ public abstract class Worker {
public void runActivate() { public void runActivate() {
if (activate && !active) { if (activate && !active) {
logger.debug("Worker: runActivate()"); logger.trace("Worker: runActivate()");
try { try {
work.activate(); work.activate();
active = true; active = true;
@@ -58,7 +58,7 @@ public abstract class Worker {
public void runDeactivate() { public void runDeactivate() {
if (deactivate && active) { if (deactivate && active) {
logger.debug("Worker: runDeactivate()"); logger.trace("Worker: runDeactivate()");
try { try {
work.deactivate(); work.deactivate();
} catch (DeactivateException e) { } catch (DeactivateException e) {
@@ -72,11 +72,11 @@ public abstract class Worker {
public void runWork() { public void runWork() {
if (active) { if (active) {
logger.debug("Worker: runWork() > work"); logger.trace("Worker: runWork() > work");
work.work(); work.work();
} else if (run) { } else if (run) {
try { try {
logger.debug("Worker: runWork() > wait"); logger.trace("Worker: runWork() > wait");
synchronized (this) { synchronized (this) {
wait(); wait();
} }
@@ -103,7 +103,7 @@ public abstract class Worker {
public abstract void start(); public abstract void start();
public void stop() { public void stop() {
logger.debug("Worker: stop()"); logger.trace("Worker: stop()");
if (active && !activate) { if (active && !activate) {
deactivate = true; deactivate = true;
} }

View File

@@ -9,7 +9,8 @@ import org.junit.runners.Suite.SuiteClasses;
TestTcpSocketCommunication.class, TestTcpSocketCommunication.class,
TestTcpChannelCommunication.class, TestTcpChannelCommunication.class,
TestUdpUnicastCommunication.class, TestUdpUnicastCommunication.class,
TestUdpMulticastCommunication.class TestUdpMulticastCommunication.class,
TestUdpDuplexCommunication.class
}) })
public class AllTests {} public class AllTests {}