|
@@ -1,15 +1,13 @@
|
|
package at.acdp.urweb.rtde;
|
|
package at.acdp.urweb.rtde;
|
|
|
|
|
|
-import at.acdp.urweb.rtde.packets.IRtdeData;
|
|
|
|
-import at.acdp.urweb.rtde.packets.RtdeRequestProtocolVersion;
|
|
|
|
-import at.acdp.urweb.rtde.packets.RtdeRequestURVersion;
|
|
|
|
-import at.acdp.urweb.rtde.packets.RtdeTextMessage;
|
|
|
|
|
|
+import at.acdp.urweb.rtde.packets.*;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
import java.io.DataInputStream;
|
|
import java.io.DataInputStream;
|
|
import java.io.DataOutputStream;
|
|
import java.io.DataOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.net.Socket;
|
|
import java.net.Socket;
|
|
|
|
+import java.util.HashMap;
|
|
import java.util.concurrent.Semaphore;
|
|
import java.util.concurrent.Semaphore;
|
|
|
|
|
|
import static at.acdp.urweb.rtde.CommandType.*;
|
|
import static at.acdp.urweb.rtde.CommandType.*;
|
|
@@ -28,6 +26,8 @@ public class RTDEClient implements Runnable {
|
|
private DataOutputStream dos;
|
|
private DataOutputStream dos;
|
|
private DataInputStream dis;
|
|
private DataInputStream dis;
|
|
private Thread readThread;
|
|
private Thread readThread;
|
|
|
|
+ private RtdeSetupOutputs outputs;
|
|
|
|
+ private HashMap<String, String> lastData;
|
|
|
|
|
|
|
|
|
|
public RTDEClient(String ip, int port) {
|
|
public RTDEClient(String ip, int port) {
|
|
@@ -42,6 +42,10 @@ public class RTDEClient implements Runnable {
|
|
init();
|
|
init();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public HashMap<String, String> getLastData() {
|
|
|
|
+ return lastData;
|
|
|
|
+ }
|
|
|
|
+
|
|
public void request(IRtdeData data) throws IOException, InterruptedException {
|
|
public void request(IRtdeData data) throws IOException, InterruptedException {
|
|
if(readThread.getId()==Thread.currentThread().getId()) {
|
|
if(readThread.getId()==Thread.currentThread().getId()) {
|
|
logger.error("request() must not be called from readThread.");
|
|
logger.error("request() must not be called from readThread.");
|
|
@@ -49,6 +53,7 @@ public class RTDEClient implements Runnable {
|
|
waitingRequest=data;
|
|
waitingRequest=data;
|
|
data.send(dos);
|
|
data.send(dos);
|
|
waitingRequestSem.acquire();
|
|
waitingRequestSem.acquire();
|
|
|
|
+ waitingRequest=null;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -56,15 +61,27 @@ public class RTDEClient implements Runnable {
|
|
private void readSocket() throws IOException, InterruptedException {
|
|
private void readSocket() throws IOException, InterruptedException {
|
|
int length = dis.readShort();
|
|
int length = dis.readShort();
|
|
int type=dis.readByte();
|
|
int type=dis.readByte();
|
|
- if(type==waitingRequest.getType()) {
|
|
|
|
|
|
+ var wreq=waitingRequest;
|
|
|
|
+ if(wreq != null && type==wreq.getType()) {
|
|
waitingRequest.read(dis, length-3);
|
|
waitingRequest.read(dis, length-3);
|
|
|
|
+ if(type== RTDE_CONTROL_PACKAGE_SETUP_OUTPUTS) {
|
|
|
|
+ outputs= (RtdeSetupOutputs) waitingRequest;
|
|
|
|
+ }
|
|
waitingRequestSem.release();
|
|
waitingRequestSem.release();
|
|
} else switch(type) {
|
|
} else switch(type) {
|
|
case RTDE_TEXT_MESSAGE:
|
|
case RTDE_TEXT_MESSAGE:
|
|
var rpv = new RtdeTextMessage();
|
|
var rpv = new RtdeTextMessage();
|
|
- request(rpv);
|
|
|
|
|
|
+ rpv.read(dis, length-3);
|
|
logger.info("RTDE_TEXT_MESSAGE", rpv.text);
|
|
logger.info("RTDE_TEXT_MESSAGE", rpv.text);
|
|
break;
|
|
break;
|
|
|
|
+ case RTDE_DATA_PACKAGE:
|
|
|
|
+ var p = new RtdeDataPackage(outputs);
|
|
|
|
+ p.read(dis, length-3);
|
|
|
|
+ lastData=p.getPdata();
|
|
|
|
+ lastData.entrySet().forEach(entry->{
|
|
|
|
+ System.out.println(entry.getKey() + " " + entry.getValue());
|
|
|
|
+ });
|
|
|
|
+ break;
|
|
|
|
|
|
default: {
|
|
default: {
|
|
logger.warn(String.format("Unexpected package type: %d", type));
|
|
logger.warn(String.format("Unexpected package type: %d", type));
|