1212import static hu .bme .masterrace .Main .*;
1313
1414public class SegmentOccupancys implements MqttCallback {
15+
1516 private static final String TOPIC_INFO = "segment/occupancy" ;
1617 private static final String TOPIC_COMMAND = "command/occupancy" ;
1718 private MqttClient myClient ;
@@ -21,6 +22,7 @@ public class SegmentOccupancys implements MqttCallback {
2122
2223 SegmentOccupancys () {
2324 try {
25+
2426 setConnectionOptions ();
2527 connect ();
2628 if (myClient .isConnected ()) {
@@ -47,25 +49,34 @@ private void connect() throws MqttException {
4749 myClient .setCallback (this );
4850 myClient .connect (connOpt );
4951 System .out .println ("Connected Segment Occpancy Commander!" );
52+
5053 }
5154
5255 private void setConnectionOptions () {
5356 connOpt = new MqttConnectOptions ();
5457 connOpt .setCleanSession (true );
5558 connOpt .setKeepAliveInterval (30 );
56- connOpt .setAutomaticReconnect (true );
59+ connOpt .setAutomaticReconnect (false );
5760 }
5861
5962 @ Override
6063 public void connectionLost (Throwable throwable ) {
6164 System .out .println ("rip in connection" );
6265 try {
63- connect ();
64- } catch (MqttException e ) {
66+ reconnect ();
67+ } catch ( MqttException e ) {
6568 e .printStackTrace ();
6669 }
6770 }
6871
72+ private void reconnect () throws MqttException {
73+ connect ();
74+ if (myClient .isConnected ()) {
75+ subscribe ();
76+ registerSegmentOccupancyChanger ();
77+ }
78+ }
79+
6980 @ Override
7081 public void messageArrived (String s , MqttMessage mqttMessage ) {
7182 printMessageToConsole (s , mqttMessage );
@@ -80,11 +91,19 @@ private void printMessageToConsole(String s, MqttMessage mqttMessage) {
8091 }
8192
8293 private JsonObject getJsonObject (MqttMessage mqttMessage ) {
83- JsonParser parser = new JsonParser ();
84- JsonElement element = parser .parse (new String (mqttMessage .getPayload ()));
85- return element .getAsJsonObject ();
94+ try {
95+ JsonParser parser = new JsonParser ();
96+ JsonElement element = parser .parse (new String (mqttMessage .getPayload ()));
97+ return element .getAsJsonObject ();
98+ }catch (Exception e ) {
99+ e .printStackTrace ();
100+ System .out .println ("wrong format" );
101+
102+ }
103+ return null ;
86104 }
87105
106+
88107 private void handleRequest (String topic , JsonObject message ) {
89108 if (topic .equals (TOPIC_INFO ))
90109 handleTopicInfo (message );
@@ -94,6 +113,7 @@ private void handleRequest(String topic, JsonObject message) {
94113
95114 private void handleTopicCommand (JsonObject message ) {
96115 if (message .has ("occupancy" ) && message .has ("segmentID" ))
116+
97117 sendSegmentOccCommand (message );
98118
99119 }
@@ -105,10 +125,16 @@ private void sendSegmentOccCommand(JsonObject message) {
105125 }
106126
107127 private SegmentOccupancy getSegmentOcc (JsonObject message ) {
108- if (message .get ("occupancy" ).toString ().equals ("\" occupied\" " ))
109- return SegmentOccupancy .OCCUPIED ;
110- if (message .get ("occupancy" ).toString ().equals ("\" free\" " ))
111- return SegmentOccupancy .FREE ;
128+ try {
129+ if (message .get ("occupancy" ).toString ().equals ("\" occupied\" " ))
130+ return SegmentOccupancy .OCCUPIED ;
131+ if (message .get ("occupancy" ).toString ().equals ("\" free\" " ))
132+ return SegmentOccupancy .FREE ;
133+
134+ }catch (Exception e ){
135+ e .printStackTrace ();
136+ }
137+
112138 return null ;
113139 }
114140
@@ -137,6 +163,8 @@ public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
137163 semaphore .release ();
138164 }
139165
166+
167+
140168 private void sendOccupancy (int segmentID ) {
141169 try {
142170 SegmentOccupancy state = segmentCommander .getSegmentOccupancy (segmentID );
@@ -154,6 +182,6 @@ private void sendOccupancy(int segmentID) {
154182 }
155183
156184 private String makeMessage (int segmentID , String s ) {
157- return "{\" segmentID\" :" + segmentID + ",\" occupancy\" :" + s + "}" ;
185+ return "{\" segmentID\" :" + segmentID + ",\" occupancy\" :\" " + s + " \ " }" ;
158186 }
159187}
0 commit comments