zmq.io.net.NetProtocol Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jeromq Show documentation
Show all versions of jeromq Show documentation
Pure Java implementation of libzmq
The newest version!
package zmq.io.net;
import java.util.Arrays;
import java.util.Locale;
import java.util.Set;
import java.util.stream.Collectors;
import zmq.Options;
import zmq.SocketBase;
import zmq.io.IOThread;
import zmq.io.net.Address.IZAddress;
import zmq.io.net.ipc.IpcAddress;
import zmq.io.net.ipc.IpcListener;
import zmq.io.net.tcp.TcpAddress;
import zmq.io.net.tcp.TcpListener;
import zmq.io.net.tipc.TipcListener;
import zmq.socket.Sockets;
public enum NetProtocol
{
inproc(true, false, false),
ipc(true, false, false)
{
@Override
public Listener getListener(IOThread ioThread, SocketBase socket,
Options options)
{
return new IpcListener(ioThread, socket, options);
}
@Override
public void resolve(Address paddr, boolean ipv6)
{
paddr.resolve(ipv6);
}
@Override
public IZAddress zresolve(String addr, boolean ipv6)
{
return new IpcAddress(addr);
}
},
tcp(true, false, false)
{
@Override
public Listener getListener(IOThread ioThread, SocketBase socket,
Options options)
{
return new TcpListener(ioThread, socket, options);
}
@Override
public void resolve(Address paddr, boolean ipv6)
{
paddr.resolve(ipv6);
}
@Override
public IZAddress zresolve(String addr, boolean ipv6)
{
return new TcpAddress(addr, ipv6);
}
},
// PGM does not support subscription forwarding; ask for all data to be
// sent to this pipe. (same for NORM, currently?)
pgm(false, true, true, Sockets.PUB, Sockets.SUB, Sockets.XPUB, Sockets.XPUB),
epgm(false, true, true, Sockets.PUB, Sockets.SUB, Sockets.XPUB, Sockets.XPUB),
tipc(false, false, false)
{
@Override
public Listener getListener(IOThread ioThread, SocketBase socket,
Options options)
{
return new TipcListener(ioThread, socket, options);
}
@Override
public void resolve(Address paddr, boolean ipv6)
{
paddr.resolve(ipv6);
}
},
norm(false, true, true);
public final boolean valid;
public final boolean subscribe2all;
public final boolean isMulticast;
private final Set compatibles;
NetProtocol(boolean implemented, boolean subscribe2all, boolean isMulticast, Sockets... compatibles)
{
valid = implemented;
this.compatibles = Arrays.stream(compatibles).map(Sockets::ordinal).collect(Collectors.toSet());
this.subscribe2all = subscribe2all;
this.isMulticast = isMulticast;
}
/**
* @param protocol name
* @throws IllegalArgumentException if the protocol name can be matched to an actual supported protocol
* @return
*/
public static NetProtocol getProtocol(String protocol)
{
try {
return valueOf(protocol.toLowerCase(Locale.ENGLISH));
}
catch (NullPointerException | IllegalArgumentException e) {
throw new IllegalArgumentException("Unknown protocol: \"" + protocol + "\"");
}
}
public final boolean compatible(int type)
{
return compatibles.isEmpty() || compatibles.contains(type);
}
public Listener getListener(IOThread ioThread, SocketBase socket, Options options)
{
return null;
}
public void resolve(Address paddr, boolean ipv6)
{
// TODO V4 init address for pgm & epgm
}
public IZAddress zresolve(String addr, boolean ipv6)
{
return null;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy