Added implementation for the Client.publish

This commit is contained in:
selva.andre
2012-07-23 22:00:10 +02:00
parent 11ff2fa0a1
commit 98b9d5ce90
3 changed files with 44 additions and 2 deletions
@@ -0,0 +1,16 @@
package org.dna.mqtt.moquette;
/**
*
* @author andrea
*/
public class PublishException extends ConnectionException {
public PublishException(String msg) {
super(msg);
}
public PublishException(Throwable e) {
super(e);
}
}
@@ -7,6 +7,7 @@ import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.apache.mina.core.RuntimeIoException; import org.apache.mina.core.RuntimeIoException;
import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.WriteFuture;
import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession; import org.apache.mina.core.session.IoSession;
@@ -17,12 +18,14 @@ import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector; import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.dna.mqtt.moquette.ConnectionException; import org.dna.mqtt.moquette.ConnectionException;
import org.dna.mqtt.moquette.MQTTException; import org.dna.mqtt.moquette.MQTTException;
import org.dna.mqtt.moquette.PublishException;
import org.dna.mqtt.moquette.proto.ConnAckDecoder; import org.dna.mqtt.moquette.proto.ConnAckDecoder;
import org.dna.mqtt.moquette.proto.ConnectEncoder; import org.dna.mqtt.moquette.proto.ConnectEncoder;
import org.dna.mqtt.moquette.proto.DisconnectEncoder; import org.dna.mqtt.moquette.proto.DisconnectEncoder;
import org.dna.mqtt.moquette.proto.messages.ConnAckMessage; import org.dna.mqtt.moquette.proto.messages.ConnAckMessage;
import org.dna.mqtt.moquette.proto.messages.ConnectMessage; import org.dna.mqtt.moquette.proto.messages.ConnectMessage;
import org.dna.mqtt.moquette.proto.messages.DisconnectMessage; import org.dna.mqtt.moquette.proto.messages.DisconnectMessage;
import org.dna.mqtt.moquette.proto.messages.PublishMessage;
import org.dna.mqtt.moquette.server.Server; import org.dna.mqtt.moquette.server.Server;
/** /**
@@ -79,7 +82,7 @@ public final class Client {
public void connect() throws MQTTException { public void connect() throws MQTTException {
int retries = 0; int retries = 0;
//TODO perhapsh by proto deinifinition should be an implicit retry policy //TODO perhaps by proto deinifinition should be an implicit retry policy
for (; retries < m_connectRetries; retries++) { for (; retries < m_connectRetries; retries++) {
try { try {
ConnectFuture future = m_connector.connect(new InetSocketAddress(m_hostname, m_port)); ConnectFuture future = m_connector.connect(new InetSocketAddress(m_hostname, m_port));
@@ -148,6 +151,29 @@ public final class Client {
} }
} }
/**
* Publish to the connected server the payload message to the given topic.
* It's admitted to publish a 0 -length payload.
*/
public void publish(String topic, byte[] payload) throws PublishException{
PublishMessage msg = new PublishMessage();
msg.setTopicName(topic);
msg.setPayload(payload);
WriteFuture wf = m_session.write(msg);
try {
wf.await();
} catch (InterruptedException ex) {
LOG.log(Level.SEVERE, null, ex);
throw new PublishException(ex);
}
Throwable ex = wf.getException();
if (ex != null) {
throw new PublishException(ex);
}
}
/** /**
* TODO extract this SPI method in a SPI * TODO extract this SPI method in a SPI
@@ -23,7 +23,7 @@ public class ServerIntegrationTest {
Client client = new Client("localhost", Server.PORT); Client client = new Client("localhost", Server.PORT);
client.connect(); client.connect();
//TODO client.publish("/topic", what) client.publish("/topic", "Test my payload".getBytes());
//TODO client.subscribe("/topic", callback) //TODO client.subscribe("/topic", callback)
client.close(); client.close();