Browse Source

parse additional messages

Martin Kunz 5 years ago
parent
commit
278144f24c

+ 1 - 0
src/main/java/at/acdp/urweb/URBot.java

@@ -1,6 +1,7 @@
 package at.acdp.urweb;
 
 import at.acdp.urweb.sclient.data.MasterBoardData;
+import at.acdp.urweb.sclient.data.ScReadThread;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

+ 49 - 3
src/main/java/at/acdp/urweb/sclient/SecondaryClient.java

@@ -48,6 +48,16 @@ public class SecondaryClient {
             case MessageType.ROBOT_STATE:
                 readRobotState(di, size);
                 break;
+            case MessageType.PROGRAM_STATE_MESSAGE:
+                var psm=new ProgramStateMessage();
+                psm.read(di, size);
+                URLog.add(psm);
+                break;
+            case MessageType.MODBUS_INFO_MESSAGE:
+                var m=new ModbusInfoMessage();
+                m.read(di, size);
+                URLog.add(m);
+                break;
             default:
                 log.warn("unknown ptype: "+pType+", size: "+size);
                 byte[] pack=new byte[size-5];
@@ -166,7 +176,6 @@ public class SecondaryClient {
         di.readFully(data);
     }
 
-
     private AdditionalInfo readAdditionalInfo(CountDataInputStream di, int size) throws IOException {
         AdditionalInfo ai=new AdditionalInfo();
         ai.read(di, size);
@@ -191,13 +200,51 @@ public class SecondaryClient {
         byte source = di.readByte();
         int robotMessageType = di.readUnsignedByte();
         switch (robotMessageType) {
+            case RobotMessageType.RUNTIME_EXCEPTION:
+                var rte=new RobotRuntimeException();
+                rte.read(di, size);
+                URLog.add(rte);
+                log.debug(rte.toString());
+                break;
+            case RobotMessageType.KEY:
+                var rmk=new RobotMessageKey();
+                rmk.read(di, size);
+                URLog.add(rmk);
+                log.debug(rmk.toString());
+                break;
+            case RobotMessageType.PROGRAM_LABEL:
+                var rpl=new RobotProgramLabel();
+                rpl.read(di, size);
+                URLog.add(rpl);
+                log.debug(rpl.toString());
+                break;
+            case RobotMessageType.ERROR_CODE:
+                var rme=new RobotMessageError();
+                rme.read(di, size);
+                URLog.add(rme);
+                log.debug(rme.toString());
+                break;
+            case RobotMessageType.ZWOELF:
+                var zm=new ZwoelfMessageKey();
+                zm.read(di, size);
+                URLog.add(zm);
+                log.debug(zm.toString());
+                break;
+            case RobotMessageType.TEXT:
+                var t=new RobotMessageText();
+                t.read(di, size);
+                URLog.add(t);
+                log.debug(t.toString());
+                break;
             default:
-                log.info("unknown msg:  " + (int) robotMessageType);
+                log.info("unknown msg:  {} size: {}", (int) robotMessageType, size);
                 byte[] buf = new byte[size - 15];
                 di.readFully(buf);
+                break;
         }
     }
 
+
     void readRobotState(CountDataInputStream di, int size) throws IOException {
         int remaining=size-5;
         while(remaining>0)
@@ -235,7 +282,6 @@ public class SecondaryClient {
         return md;
     }
 
-
     public void writeCmd(String cmd) {
         try {
             System.out.println("send cmd:" + cmd);

+ 24 - 0
src/main/java/at/acdp/urweb/sclient/data/ModbusInfoMessage.java

@@ -0,0 +1,24 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+import com.eclipsesource.json.JsonObject;
+
+import java.io.IOException;
+
+public class ModbusInfoMessage  implements IRead, IJsonObject{
+    public String data;
+
+    @Override
+    public JsonObject toJSON() {
+        return new JsonObject()
+                .add("data", data)
+                ;
+    }
+
+    @Override
+    public void read(CountDataInputStream di, int size) throws IOException {
+        byte[] asd=new byte[size-5];
+        di.readFully(asd);
+        data=new String(asd);
+    }
+}

+ 23 - 0
src/main/java/at/acdp/urweb/sclient/data/ProgramStateMessage.java

@@ -0,0 +1,23 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+import com.eclipsesource.json.JsonObject;
+
+import java.io.IOException;
+
+public class ProgramStateMessage implements IRead, IJsonObject{
+    public String data;
+
+    @Override
+    public JsonObject toJSON() {
+        return new JsonObject()
+            .add("data", data);
+    }
+
+    @Override
+    public void read(CountDataInputStream di, int size) throws IOException {
+        byte[] asd=new byte[size-5];
+        di.readFully(asd);
+        data=new String(asd);
+    }
+}

+ 23 - 0
src/main/java/at/acdp/urweb/sclient/data/RobotMessageError.java

@@ -0,0 +1,23 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+import com.eclipsesource.json.JsonObject;
+
+import java.io.IOException;
+
+public class RobotMessageError implements IRead, IJsonObject{
+    public String data;
+
+    @Override
+    public JsonObject toJSON() {
+        return new JsonObject()
+            .add("data", data);
+    }
+
+    @Override
+    public void read(CountDataInputStream di, int size) throws IOException {
+        byte[] asd=new byte[size-15];
+        di.readFully(asd);
+        data=new String(asd);
+    }
+}

+ 23 - 0
src/main/java/at/acdp/urweb/sclient/data/RobotMessageKey.java

@@ -0,0 +1,23 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+import com.eclipsesource.json.JsonObject;
+
+import java.io.IOException;
+
+public class RobotMessageKey implements IRead, IJsonObject{
+    public String data;
+
+    @Override
+    public JsonObject toJSON() {
+        return new JsonObject()
+            .add("data", data);
+    }
+
+    @Override
+    public void read(CountDataInputStream di, int size) throws IOException {
+        byte[] asd=new byte[size-15];
+        di.readFully(asd);
+        data=new String(asd);
+    }
+}

+ 23 - 0
src/main/java/at/acdp/urweb/sclient/data/RobotMessageText.java

@@ -0,0 +1,23 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+import com.eclipsesource.json.JsonObject;
+
+import java.io.IOException;
+
+public class RobotMessageText implements IRead, IJsonObject{
+    public String data;
+
+    @Override
+    public JsonObject toJSON() {
+        return new JsonObject()
+            .add("data", data);
+    }
+
+    @Override
+    public void read(CountDataInputStream di, int size) throws IOException {
+        byte[] asd=new byte[size-15];
+        di.readFully(asd);
+        data=new String(asd);
+    }
+}

+ 1 - 0
src/main/java/at/acdp/urweb/sclient/data/RobotMessageType.java

@@ -10,4 +10,5 @@ public class RobotMessageType {
     public static final int REQUEST_VALUE=9;
     public static final int TEXT=0;
     public static final int RUNTIME_EXCEPTION=10;
+    public static final int ZWOELF = 12;
 }

+ 27 - 0
src/main/java/at/acdp/urweb/sclient/data/RobotProgramLabel.java

@@ -0,0 +1,27 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+import com.eclipsesource.json.JsonObject;
+
+import java.io.IOException;
+
+public class RobotProgramLabel implements IRead, IJsonObject{
+    public int row;
+    public String message;
+
+    @Override
+    public JsonObject toJSON() {
+        return new JsonObject()
+            .add("row", row)
+            .add("message", message);
+
+    }
+
+    @Override
+    public void read(CountDataInputStream di, int size) throws IOException {
+        row=di.readInt();
+        byte[] asd=new byte[size-15-4];
+        di.readFully(asd);
+        message=new String(asd);
+    }
+}

+ 31 - 0
src/main/java/at/acdp/urweb/sclient/data/RobotRuntimeException.java

@@ -0,0 +1,31 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+import com.eclipsesource.json.JsonObject;
+
+import java.io.IOException;
+
+public class RobotRuntimeException implements IJsonObject, IRead{
+    public int lineNumber;
+    public int columnNumber;
+    public String message;
+
+    @Override
+    public JsonObject toJSON() {
+        return new JsonObject()
+                .add("lineNumber", lineNumber)
+                .add("columnNumber", columnNumber)
+                .add("message", message)
+                ;
+    }
+
+    @Override
+    public void read(CountDataInputStream di, int size) throws IOException {
+        RobotRuntimeException re = new RobotRuntimeException();
+        re.lineNumber=di.readInt();
+        re.columnNumber=di.readInt();
+        byte[] bmsg=new byte[size-15-8];
+        di.readFully(bmsg);
+        re.message=bmsg.toString();
+    }
+}

+ 3 - 3
src/main/java/at/acdp/urweb/ScReadThread.java

@@ -1,4 +1,4 @@
-package at.acdp.urweb;
+package at.acdp.urweb.sclient.data;
 
 import at.acdp.urweb.sclient.SecondaryClient;
 import at.acdp.urweb.sclient.URLog;
@@ -16,7 +16,7 @@ public class ScReadThread implements Runnable {
     SecondaryClient rde;
 
 
-    ScReadThread(String ip) {
+    public ScReadThread(String ip) {
         this.ip=ip;
     }
 
@@ -37,7 +37,7 @@ public class ScReadThread implements Runnable {
     }
 
     private void read() throws IOException {
-        rde=new SecondaryClient(ip, 30002);
+        rde=new SecondaryClient(ip, 30001);
         VersionMessage vm = rde.connect();
         while(true) {
             rde.readPackage();

+ 23 - 0
src/main/java/at/acdp/urweb/sclient/data/ZwoelfMessageKey.java

@@ -0,0 +1,23 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+import com.eclipsesource.json.JsonObject;
+
+import java.io.IOException;
+
+public class ZwoelfMessageKey implements IRead, IJsonObject{
+    public String data;
+
+    @Override
+    public JsonObject toJSON() {
+        return new JsonObject()
+            .add("data", data);
+    }
+
+    @Override
+    public void read(CountDataInputStream di, int size) throws IOException {
+        byte[] asd=new byte[size-15];
+        di.readFully(asd);
+        data=new String(asd);
+    }
+}

+ 6 - 0
src/main/resources/webroot/index.html

@@ -107,6 +107,12 @@
                         break;
                     case 'ConfigurationData':
                         break;
+                    case 'ProgramStateMessage':
+                        break;
+                    case 'ModbusInfoMessage':
+                        break;
+                    case 'RobotMessageError':
+                        break;
                     default:
                         console.log('unknown package:' + package.type);
                 }