package org.infosec.ismp.eventd;
import java.util.ArrayList;
import java.util.Collection;
import org.infosec.ismp.daemon.AbstractServiceDaemon;
import org.infosec.ismp.eventd.adaptors.EventReceiver;
import org.springframework.util.Assert;
/**
* Eventd负责接收外部(Agent、Manager)传来的相关事件,是系统和外部通信的渠道。
*/
public final class Eventd extends AbstractServiceDaemon {
/**
* The log4j category used to log debug messsages and statements.
*/
public static final String LOG4J_CATEGORY = "ISMP.Eventd";
/**
* Reference to the event processor
*/
private BroadcastEventProcessor m_receiver;
/**
* All handlers that can receive events to be started/stopped with Eventd.
*/
private Collection<EventReceiver> m_eventReceivers;
/**
* Constuctor creates the localhost address(to be used eventually when
* eventd originates events during correlation) and the broadcast queue
*/
public Eventd() {
super("ISMP.Eventd");
}
@Override
protected void onInit() {
// Assert.state(m_eventdServiceManager != null,
// "property eventdServiceManager must be set");
Assert.state(m_eventReceivers != null,
"property eventReceivers must be set");
m_receiver = new BroadcastEventProcessor(this);
}
@Override
protected void onStart() {
for (EventReceiver eventReceiver : m_eventReceivers) {
eventReceiver.start();
}
log().debug("Listener threads started");
log().debug("Eventd running");
}
@Override
protected void onStop() {
log().debug("calling shutdown on tcp/udp listener threads");
// Stop listener threads
for (EventReceiver eventReceiver : m_eventReceivers) {
eventReceiver.stop();
}
if (m_receiver != null) {
m_receiver.close();
}
log().debug("shutdown on tcp/udp listener threads returned");
}
public void addEventReceiver(EventReceiver eventReceiver) {
if (m_eventReceivers == null) {
m_eventReceivers = new ArrayList<EventReceiver>();
}
m_eventReceivers.add(eventReceiver);
}
public Collection<EventReceiver> getEventReceivers() {
return m_eventReceivers;
}
public void setEventReceivers(Collection<EventReceiver> eventReceivers) {
m_eventReceivers = eventReceivers;
}
}