Now let’s switch to the server side and create a custom endpoint. We
need it to beef up the acknowledgment message sent from the server. When
the client gets a message, it needs to know the seqNo
of its last message that was successfully
delivered to the server. For now, it will be used only in the testing
application. Later, when the order of client messages will be guaranteed,
we will use it to determine which ones to put aside and which ones to
forward for server processing. As shown in Example 5-26, the proper overloading of the
serviceMessage()
method does the
job.
Example 5-26. AcknowledgingRTMPEndpoint.java
package com.farata.messaging.endpoints; import org.apache.log4j.Logger; import com.farata.messaging.messages.ReliableClientMessage; import flex.messaging.endpoints.RTMPEndpoint; import flex.messaging.messages.AcknowledgeMessage; import flex.messaging.messages.Message; public class AcknowledgingRTMPEndpoint extends RTMPEndpoint { private final String LAST_SERVED_NUMBER="lastServedNumber"; private final String SEQUENCE_NUMBER="seqNo"; public Message serviceMessage(Message message) { Message m = super.serviceMessage(message); if (message instanceof ReliableClientMessage) { int sequenceNumber = (Integer)message.getHeader(SEQUENCE_NUMBER) ; int lastServedNumber = sequenceNumber; String duplicate = (String)message.getHeader("duplicate"); if (logger.isDebugEnabled()) logger.debug( "Received message "+ sequenceNumber + ((duplicate!=null)?" (duplicate)":"") ); AcknowledgeMessage acknowledgeMessage = new AcknowledgeMessage(); acknowledgeMessage.setClientId(message.getClientId()); acknowledgeMessage.setCorrelationId(message.getMessageId()); acknowledgeMessage.setHeader( LAST_SERVED_NUMBER, (Integer)lastServedNumber ); m = acknowledgeMessage; } return m; } static Logger logger; static { logger = Logger.getLogger(QoSRTMPEndpoint.class); } }
This endpoint doesn’t touch any messages that are not of the type
ReliableClientMessage
. Note that some
of the client messages arrive purposely marked as duplicates; these will
just be logged.
18.224.62.105