Skip to content

Commit 5866306

Browse files
authored
Merge pull request #131 from ningning-chen/reconnect
auto-reconnect mechinism
2 parents f04f542 + 632560c commit 5866306

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

src/main/java/com/cisco/trex/stateless/TRexTransport.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.zeromq.SocketType;
1414
import org.zeromq.ZMQ;
1515
import org.zeromq.ZMQException;
16+
import zmq.ZError;
1617

1718
/** TRex Transport class to create zmq socket for connection to trex server */
1819
public class TRexTransport {
@@ -133,17 +134,32 @@ public synchronized String sendJson(String json) {
133134
try {
134135
zmqSocket.send(compressed);
135136
} catch (ZMQException e) {
136-
throw new IllegalStateException(
137-
"Did not get any response from server "
138-
+ getHost()
139-
+ " within timeout "
140-
+ zmqSocket.getReceiveTimeOut(),
141-
e);
137+
throwTimeoutException(e);
142138
}
143139
byte[] msg = zmqSocket.recv();
140+
// add this if-block to deal with the connect lost error which is caused
141+
// after a long time the client-server don't interactive
142+
if (msg == null && zmqSocket.errno() == ZError.ENOTCONN) {
143+
zmqSocket.connect(this.connectionString);
144+
try {
145+
zmqSocket.send(compressed);
146+
} catch (ZMQException e) {
147+
throwTimeoutException(e);
148+
}
149+
msg = zmqSocket.recv();
150+
}
144151

145152
String response = this.dataCompressor.decompressBytesToString(msg);
146153
LOGGER.debug("JSON Resp: {}", response);
147154
return response;
148155
}
156+
157+
private void throwTimeoutException(Exception e) {
158+
throw new IllegalStateException(
159+
"Did not get any response from server "
160+
+ getHost()
161+
+ " within timeout "
162+
+ zmqSocket.getReceiveTimeOut(),
163+
e);
164+
}
149165
}

0 commit comments

Comments
 (0)