package com.netthreads.network.osc.server; import io.netty.bootstrap.Bootstrap; import io.netty.channel.ChannelOption; import io.netty.channel.socket.nio.NioDatagramChannel; import io.netty.channel.socket.nio.NioEventLoopGroup; import java.net.InetSocketAddress; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * OSC server. * */ public class OSCServerImpl implements OSCServer { private static final Logger logger = LoggerFactory.getLogger(OSCServerImpl.class); private final int port; private OSCServerListener oscServerListener; private Bootstrap bootStrap; /** * OSCServer handler listens for OSC messages and passes them to linked handler. * * @param port * @param oscServerListener */ public OSCServerImpl(int port, OSCServerListener oscServerListener) { this.port = port; this.oscServerListener = oscServerListener; } /* (non-Javadoc) * @see com.netthreads.network.osc.server.OSCServer#listen() */ public void listen() { bootStrap = new Bootstrap(); try { oscServerListener.handleStart(); bootStrap.group(new NioEventLoopGroup()) .channel(NioDatagramChannel.class) .localAddress(new InetSocketAddress(port)) .option(ChannelOption.SO_BROADCAST, true) .handler(new OSCServerHandler(oscServerListener)); bootStrap.bind() .sync() .channel() .closeFuture() .await(); } catch (InterruptedException e) { logger.debug("Interrupted"); } finally { bootStrap.shutdown(); oscServerListener.handleShutdown(); } } /** * Shut down server. * */ public void shutdown() { bootStrap.shutdown(); } }