org.jgroups.demos.PubServer Maven / Gradle / Ivy
package org.jgroups.demos;
import org.jgroups.Address;
import org.jgroups.Global;
import org.jgroups.blocks.cs.*;
import org.jgroups.jmx.JmxConfigurator;
import org.jgroups.logging.Log;
import org.jgroups.logging.LogFactory;
import org.jgroups.stack.IpAddress;
import org.jgroups.util.Bits;
import org.jgroups.util.Util;
import java.io.DataInput;
import java.net.InetAddress;
import java.nio.ByteBuffer;
/**
* Demo which starts an {@link NioServer} that accepts messages from clients ({@link PubClient}) and forwards them to
* all connected clients
* @author Bela Ban
* @since 3.6.5
*/
public class PubServer extends ReceiverAdapter {
protected BaseServer server;
protected final Log log=LogFactory.getLog(PubServer.class);
protected void start(InetAddress bind_addr, int port, boolean nio) throws Exception {
server=nio? new NioServer(bind_addr, port) : new TcpServer(bind_addr, port);
server.receiver(this);
server.start();
JmxConfigurator.register(server, Util.getMBeanServer(), "pub:name=pub-server");
int local_port=server.localAddress() instanceof IpAddress? ((IpAddress)server.localAddress()).getPort(): 0;
System.out.printf("\nPubServer listening at %s:%s\n", bind_addr != null? bind_addr : "0.0.0.0", local_port);
}
@Override
public void receive(Address sender, ByteBuffer buf) {
try {
server.send(null, buf);
}
catch(Exception ex) {
log.error("failed publishing message", ex);
}
}
@Override
public void receive(Address sender, byte[] buf, int offset, int length) {
try {
server.send(null, buf, offset, length);
}
catch(Exception ex) {
log.error("failed publishing message", ex);
}
}
public void receive(Address sender, DataInput in) throws Exception {
int len=in.readInt();
byte[] buf=new byte[len + Global.INT_SIZE];
Bits.writeInt(len, buf, 0);
in.readFully(buf, Global.INT_SIZE, len);
server.send(null, buf, 0, buf.length);
}
public static void main(String[] args) throws Exception {
int port=7500;
InetAddress bind_addr=null;
boolean nio=true;
for(int i=0; i < args.length; i++) {
if(args[i].equals("-port")) {
port=Integer.parseInt(args[++i]);
continue;
}
if(args[i].equals("-bind_addr")) {
bind_addr=InetAddress.getByName(args[++i]);
continue;
}
if(args[i].equals("-nio")) {
nio=Boolean.parseBoolean(args[++i]);
continue;
}
help();
return;
}
PubServer server=new PubServer();
server.start(bind_addr, port, nio);
}
protected static void help() {
System.out.println("PubServer [-port port] [-bind_addr bind_addr] [-nio true|false]");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy