/**
* Copyright (C) 2016, Red Hat Inc. All rights reserved.
*
* http://redhat.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.fusesource.mqtt.client;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import static org.fusesource.hawtbuf.Buffer.utf8;
/**
* <p>
* </p>
*
* @author <a href="http://hiramchirino.com">Hiram Chirino</a>
*/
public class BlockingApiBenchmark {
static public void main(String []args) throws Exception {
MQTT mqtt = new MQTT();
mqtt.setConnectAttemptsMax(0);
mqtt.setReconnectAttemptsMax(0);
mqtt.setHost("localhost", 1883);
final BlockingConnection publishConnection = mqtt.blockingConnection();
publishConnection.connect();
final BlockingConnection subscribeConnection = mqtt.blockingConnection();
subscribeConnection.connect();
subscribeConnection.setReceiveBuffer(1024*64);
Topic[] topic = {new Topic(utf8("foo"), QoS.EXACTLY_ONCE)};
byte[] qoses = subscribeConnection.subscribe(topic);
final long start = System.currentTimeMillis();
final AtomicLong sendCounter = new AtomicLong();
final AtomicLong receiveCounter = new AtomicLong();
Thread receiver = new Thread("receiver") {
@Override
public void run() {
try {
while (true) {
if (System.currentTimeMillis() > start + TimeUnit.SECONDS.toMillis(120)) {
break;
}
Thread.sleep(10);
subscribeConnection.receive().ack();
receiveCounter.incrementAndGet();
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
receiver.start();
Thread sender = new Thread("sender"){
@Override
public void run() {
try {
while (true) {
if (System.currentTimeMillis() > start + TimeUnit.SECONDS.toMillis(120)) {
break;
}
publishConnection.publish("foo", new byte[1024], QoS.EXACTLY_ONCE, false);
sendCounter.incrementAndGet();
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
sender.start();
while (true) {
if (System.currentTimeMillis() > start + TimeUnit.SECONDS.toMillis(120)) {
break;
}
Thread.sleep(1000);
System.out.println("Sent: "+sendCounter.get()+", Received: " + receiveCounter.get());
}
publishConnection.disconnect();
subscribeConnection.disconnect();
receiver.join();
sender.join();
}
}