MOved conenct method into the test support class Client
This commit is contained in:
@@ -18,6 +18,8 @@ package io.moquette.testclient;
|
||||
import io.moquette.BrokerConstants;
|
||||
import io.moquette.parser.netty.MQTTDecoder;
|
||||
import io.moquette.parser.netty.MQTTEncoder;
|
||||
import io.moquette.parser.proto.messages.ConnAckMessage;
|
||||
import io.moquette.parser.proto.messages.ConnectMessage;
|
||||
import io.netty.bootstrap.Bootstrap;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelInitializer;
|
||||
@@ -31,6 +33,11 @@ import io.moquette.parser.proto.messages.AbstractMessage;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* Class used just to send and receive MQTT messages without any protocol login
|
||||
* in action, just use the encoder/decoder part.
|
||||
@@ -39,7 +46,7 @@ import org.slf4j.LoggerFactory;
|
||||
*/
|
||||
public class Client {
|
||||
|
||||
public static interface ICallback {
|
||||
public interface ICallback {
|
||||
void call(AbstractMessage msg);
|
||||
}
|
||||
|
||||
@@ -48,17 +55,17 @@ public class Client {
|
||||
EventLoopGroup workerGroup;
|
||||
Channel m_channel;
|
||||
private boolean m_connectionLost = false;
|
||||
private ICallback callback;
|
||||
private String clientId;
|
||||
private AbstractMessage receivedMsg;
|
||||
|
||||
public Client(String host) {
|
||||
this(host, BrokerConstants.PORT);
|
||||
}
|
||||
|
||||
public Client(String host, int port) {
|
||||
|
||||
handler.setClient(this);
|
||||
|
||||
workerGroup = new NioEventLoopGroup();
|
||||
|
||||
try {
|
||||
Bootstrap b = new Bootstrap();
|
||||
b.group(workerGroup);
|
||||
@@ -81,8 +88,58 @@ public class Client {
|
||||
workerGroup.shutdownGracefully();
|
||||
}
|
||||
}
|
||||
|
||||
ICallback callback;
|
||||
|
||||
public Client clientId(String clientId) {
|
||||
this.clientId = clientId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void connect(String willTestamentTopic, String willTestamentMsg) {
|
||||
ConnectMessage connectMessage = new ConnectMessage();
|
||||
connectMessage.setProtocolVersion((byte) 3);
|
||||
connectMessage.setClientID(this.clientId);
|
||||
connectMessage.setKeepAlive(2); //secs
|
||||
connectMessage.setWillFlag(true);
|
||||
connectMessage.setWillMessage(willTestamentMsg.getBytes());
|
||||
connectMessage.setWillTopic(willTestamentTopic);
|
||||
connectMessage.setWillQos(AbstractMessage.QOSType.MOST_ONE.byteValue());
|
||||
|
||||
doConnect(connectMessage);
|
||||
}
|
||||
|
||||
public void connect() {
|
||||
ConnectMessage connectMessage = new ConnectMessage();
|
||||
connectMessage.setProtocolVersion((byte) 4);
|
||||
connectMessage.setClientID("");
|
||||
connectMessage.setKeepAlive(2); //secs
|
||||
connectMessage.setWillFlag(false);
|
||||
connectMessage.setWillQos(AbstractMessage.QOSType.MOST_ONE.byteValue());
|
||||
|
||||
doConnect(connectMessage);
|
||||
}
|
||||
|
||||
private void doConnect(ConnectMessage connectMessage) {
|
||||
final CountDownLatch latch = new CountDownLatch(1);
|
||||
this.setCallback(new Client.ICallback() {
|
||||
|
||||
public void call(AbstractMessage msg) {
|
||||
receivedMsg = msg;
|
||||
latch.countDown();
|
||||
}
|
||||
});
|
||||
|
||||
this.sendMessage(connectMessage);
|
||||
|
||||
try {
|
||||
latch.await(200, TimeUnit.MILLISECONDS);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException("Cannot receive message in 200 ms", e);
|
||||
}
|
||||
if (!(this.receivedMsg instanceof ConnAckMessage)) {
|
||||
throw new RuntimeException("Expected a CONN_ACK message but received " + this.receivedMsg.getMessageType());
|
||||
}
|
||||
}
|
||||
|
||||
public void setCallback(ICallback callback) {
|
||||
this.callback = callback;
|
||||
}
|
||||
@@ -91,8 +148,12 @@ public class Client {
|
||||
m_channel.writeAndFlush(msg);
|
||||
}
|
||||
|
||||
public AbstractMessage lastReceivedMessage() {
|
||||
return this.receivedMsg;
|
||||
}
|
||||
|
||||
void messageReceived(AbstractMessage msg) {
|
||||
LOG.info("Received message " + msg);
|
||||
LOG.info("Received message {}", msg);
|
||||
if (this.callback != null) {
|
||||
this.callback.call(msg);
|
||||
}
|
||||
@@ -105,7 +166,7 @@ public class Client {
|
||||
public boolean isConnectionLost() {
|
||||
return m_connectionLost;
|
||||
}
|
||||
|
||||
|
||||
public void close() throws InterruptedException {
|
||||
// Wait until the connection is closed.
|
||||
m_channel.closeFuture().sync();
|
||||
|
||||
Reference in New Issue
Block a user