public class MultiThreadedMessageDispatcher extends Object implements MessageDispatcher
MultiThreadedMessageDispatcher class is a decorator
for any MessageDispatcher instances that processes incoming
message with a supplied ThreadPool. The processing is thus
parallelized on up to the size of the supplied thread pool threads.
In contrast to a MessageDispatcherImpl a
MultiThreadedMessageDispatcher copies the incoming
ByteBuffer for processMessage(TransportMapping
sourceTransport, Address incomingAddress, ByteBuffer wholeMessage,
TransportStateReference tmStateReference) to allow
concurrent processing of the buffer.
| Constructor and Description |
|---|
MultiThreadedMessageDispatcher(WorkerPool workerPool,
MessageDispatcher decoratedDispatcher)
Creates a multi-threaded message dispatcher using the provided
ThreadPool to concurrently process incoming messages
that are forwarded to the supplied decorated
MessageDispatcher. |
| Modifier and Type | Method and Description |
|---|---|
void |
addCommandResponder(CommandResponder listener)
Adds a
CommandResponder instance to the message dispatcher. |
void |
addMessageProcessingModel(MessageProcessingModel model)
Adds a
MessageProcessingModel to the dispatcher. |
void |
addTransportMapping(TransportMapping<? extends Address> transport)
Adds a
TransportMapping to the dispatcher. |
MessageProcessingModel |
getMessageProcessingModel(int messageProcessingModel)
Gets the
MessageProcessingModel for the supplied message
processing model ID. |
int |
getNextRequestID()
Gets the next unique request ID.
|
TransportMapping |
getTransport(Address destAddress)
Returns a transport mapping that can handle the supplied address.
|
Collection<TransportMapping> |
getTransportMappings()
Gets the
Collection of transport mappings in this message
dispatcher. |
void |
processMessage(TransportMapping sourceTransport,
Address incomingAddress,
ByteBuffer wholeMessage,
TransportStateReference tmStateReference)
Process an incoming SNMP message.
|
void |
releaseStateReference(int messageProcessingModel,
PduHandle pduHandle)
Release any state references associated with the supplied
PduHandle in the specified message processing model. |
void |
removeCommandResponder(CommandResponder listener)
Removes a previously added
CommandResponder instance from
the message dispatcher. |
void |
removeMessageProcessingModel(MessageProcessingModel model)
Removes a previously added
MessageProcessingModel from
the dispatcher. |
TransportMapping |
removeTransportMapping(TransportMapping<? extends Address> transport)
Removes a previously added
TransportMapping from
the dispatcher. |
int |
returnResponsePdu(int messageProcessingModel,
int securityModel,
byte[] securityName,
int securityLevel,
PDU pdu,
int maxSizeResponseScopedPDU,
StateReference stateReference,
StatusInformation statusInformation)
Returns a response PDU to the sender of the corresponding request PDU.
|
PduHandle |
sendPdu(Target target,
PDU pdu,
boolean expectResponse)
Sends a PDU to the supplied transport address.
|
PduHandle |
sendPdu(TransportMapping transportMapping,
Target target,
PDU pdu,
boolean expectResponse)
Sends a PDU to the supplied transport address.
|
PduHandle |
sendPdu(TransportMapping transportMapping,
Target target,
PDU pdu,
boolean expectResponse,
PduHandleCallback<PDU> callback)
Sends a PDU to the supplied transport address and returns the
PduHandle that uniquely identifies the request as response
after the request has been sent and optional, if a
PduHandleCallback is given, it returns also the
PduHandle just before the request is sent through the
the callback interface. |
public MultiThreadedMessageDispatcher(WorkerPool workerPool, MessageDispatcher decoratedDispatcher)
ThreadPool to concurrently process incoming messages
that are forwarded to the supplied decorated
MessageDispatcher.workerPool - a WorkerPool instance (that can be shared). The worker
pool has to be stopped externally.decoratedDispatcher - the decorated MessageDispatcher that must be
multi-threading safe.public int getNextRequestID()
MessageDispatchergetNextRequestID in interface MessageDispatcherpublic void addMessageProcessingModel(MessageProcessingModel model)
MessageDispatcherMessageProcessingModel to the dispatcher. In order to
support a specific SNMP protocol version, the message dispatcher needs
a message processing model to process messages before they can be
dispatched.addMessageProcessingModel in interface MessageDispatchermodel - a MessageProcessingModel instance.public void removeMessageProcessingModel(MessageProcessingModel model)
MessageDispatcherMessageProcessingModel from
the dispatcher.removeMessageProcessingModel in interface MessageDispatchermodel - a MessageProcessingModel instance.public MessageProcessingModel getMessageProcessingModel(int messageProcessingModel)
MessageDispatcherMessageProcessingModel for the supplied message
processing model ID.getMessageProcessingModel in interface MessageDispatchermessageProcessingModel - a message processing model ID
(see MessageProcessingModel.getID()).nullpublic void addTransportMapping(TransportMapping<? extends Address> transport)
MessageDispatcherTransportMapping to the dispatcher. The transport mapping
is used to send and receive messages to/from the network.addTransportMapping in interface MessageDispatchertransport - a TransportMapping instance.public TransportMapping removeTransportMapping(TransportMapping<? extends Address> transport)
MessageDispatcherTransportMapping from
the dispatcher.removeTransportMapping in interface MessageDispatchertransport - a TransportMapping instance.TransportMapping instance supplied if it
could be successfully removed, null otherwise.public Collection<TransportMapping> getTransportMappings()
MessageDispatcherCollection of transport mappings in this message
dispatcher.getTransportMappings in interface MessageDispatcherpublic void addCommandResponder(CommandResponder listener)
MessageDispatcherCommandResponder instance to the message dispatcher.
Successfully processed SNMP messages will be presented to all command
responder (in the order in which they have been added) until a responder
uses the CommandResponderEvent.setProcessed(boolean processed)
to set the processed status of the event to true.addCommandResponder in interface MessageDispatcherlistener - a CommandResponder instance.public void removeCommandResponder(CommandResponder listener)
MessageDispatcherCommandResponder instance from
the message dispatcher.removeCommandResponder in interface MessageDispatcherlistener - a CommandResponder instance.public PduHandle sendPdu(Target target, PDU pdu, boolean expectResponse) throws MessageException
MessageDispatcherMessageDispatcher.sendPdu(TransportMapping transportMapping, Target target,
PDU pdu, boolean expectResponse)
with transportMapping set to null.sendPdu in interface MessageDispatchertarget - the target which identifies, transport address, message processing model,
security model, security name and level.pdu - the SNMP Protocol Data UnitexpectResponse - true if a response is expected and a state reference should
be saved (if needed for the supplied message processing model).PduHandle that uniquely identifies this request.MessageExceptionpublic PduHandle sendPdu(TransportMapping transportMapping, Target target, PDU pdu, boolean expectResponse) throws MessageException
MessageDispatchersendPdu in interface MessageDispatchertransportMapping - the TransportMapping to be used to send the PDU. If
transportMapping is null the message
dispatcher will determine the appropriate transport mapping for the
given transport address.target - the target which identifies, transport address, message processing model,
security model, security name and level.pdu - the SNMP Protocol Data UnitexpectResponse - true if a response is expected and a state reference should
be saved (if needed for the supplied message processing model).PduHandle that uniquely identifies this request.MessageExceptionpublic PduHandle sendPdu(TransportMapping transportMapping, Target target, PDU pdu, boolean expectResponse, PduHandleCallback<PDU> callback) throws MessageException
MessageDispatcherPduHandle that uniquely identifies the request as response
after the request has been sent and optional, if a
PduHandleCallback is given, it returns also the
PduHandle just before the request is sent through the
the callback interface.sendPdu in interface MessageDispatchertransportMapping - the TransportMapping to be used to send the PDU. If
transportMapping is null the message
dispatcher will determine the appropriate transport mapping for the
given transport address.target - the target which identifies, transport address, message processing model,
security model, security name and level.pdu - the SNMP Protocol Data UnitexpectResponse - true if a response is expected and a state reference should
be saved (if needed for the supplied message processing model).callback - an optional callback instance that is informed (if not
null) about the newly assigned PduHandle just before the
message is sent out.PduHandle that uniquely identifies this request.MessageExceptionpublic int returnResponsePdu(int messageProcessingModel,
int securityModel,
byte[] securityName,
int securityLevel,
PDU pdu,
int maxSizeResponseScopedPDU,
StateReference stateReference,
StatusInformation statusInformation)
throws MessageException
MessageDispatcherreturnResponsePdu in interface MessageDispatchermessageProcessingModel - intsecurityModel - intsecurityName - byte[]securityLevel - intpdu - PDUmaxSizeResponseScopedPDU - intstateReference - StateReferencestatusInformation - StatusInformationSnmpConstants.SNMP_MP_OK if
the operation was successful.MessageException - if message processing fails with a fatal error.public void releaseStateReference(int messageProcessingModel,
PduHandle pduHandle)
MessageDispatcherPduHandle in the specified message processing model.releaseStateReference in interface MessageDispatchermessageProcessingModel - a message processing model ID.pduHandle - the PduHandle that identifies a confirmed class message.MessageProcessingModelpublic TransportMapping getTransport(Address destAddress)
MessageDispatchergetTransport in interface MessageDispatcherdestAddress - an Address instance.TransportMapping instance that can be used to sent
a SNMP message to destAddress or null if
such a transport mapping does not exists.public void processMessage(TransportMapping sourceTransport, Address incomingAddress, ByteBuffer wholeMessage, TransportStateReference tmStateReference)
MessageDispatcherprocessMessage in interface MessageDispatcherprocessMessage in interface TransportListenersourceTransport - a TransportMapping instance denoting the transport that
received the message and that will be used to send any responses to
this message. The sourceTransport has to support the
incomingAddress's implementation class.incomingAddress - the Address from which the message has been received.wholeMessage - an ByteBuffer containing the received SNMP message.tmStateReference - the transport model state reference as defined by RFC 5590.Copyright © 2016 SNMP4J.org. All Rights Reserved.