package org.atomnuke.syslog.netty; import org.atomnuke.source.AtomSource; import org.atomnuke.source.AtomSourceException; import org.atomnuke.source.result.AtomSourceResult; import org.atomnuke.task.context.AtomTaskContext; import org.atomnuke.lifecycle.InitializationException; import org.atomnuke.service.ServiceUnavailableException; import org.atomnuke.service.netty.server.NettyServer; import org.atomnuke.syslog.netty.channel.SyslogChannelPipelineFactory; import org.atomnuke.util.source.QueueSource; import org.atomnuke.util.source.QueueSourceImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author zinic */ public class NettySyslogSource implements AtomSource { private static final Logger LOG = LoggerFactory.getLogger(NettySyslogSource.class); private final QueueSource queueSource; private NettyServer server; public NettySyslogSource() { queueSource = new QueueSourceImpl(); } @Override public AtomSourceResult poll() throws AtomSourceException { return queueSource.poll(); } @Override public void init(AtomTaskContext tc) throws InitializationException { try { server = tc.services().firstAvailable(NettyServer.class); server.setChannelPipelineFactory(new SyslogChannelPipelineFactory(queueSource)); server.open(5025); } catch (ServiceUnavailableException sue) { throw new InitializationException(sue); } } @Override public void destroy() { server.close(5025); } }