Acknowledging the Endpoint

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.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.224.62.105