View Javadoc

1   package org.mortbay.cometd.ext;
2   
3   import java.util.Map;
4   
5   import org.cometd.Bayeux;
6   import org.cometd.Client;
7   import org.cometd.Extension;
8   import org.cometd.Message;
9   import org.mortbay.log.Log;
10  import org.mortbay.util.ajax.JSON;
11  
12  public class AcknowledgedMessagesExtension implements Extension
13  {
14      JSON.Literal _replyExt = new JSON.Literal("{\"ack\":\"true\"}");
15      
16      public Message rcv(Client from, Message message)
17      {
18          return message;
19      }
20  
21      public Message rcvMeta(Client from, Message message)
22      {
23          return message;
24      }
25  
26      public Message send(Client from, Message message)
27      {
28          return message;
29      }
30  
31      public Message sendMeta(Client from, Message message)
32      {
33          if (message.getChannel().equals(Bayeux.META_HANDSHAKE) && Boolean.TRUE.equals(message.get(Bayeux.SUCCESSFUL_FIELD)))
34          {
35              Message rcv = message.getAssociated();
36              
37              Map<String, Object> ext = rcv.getExt(false);
38              boolean clientRequestedAcks = ext != null && ext.get("ack") != null;
39  
40              if (clientRequestedAcks && from!=null) {
41                  Log.info("Enabled message acknowledgement for client " + from);
42                  from.addExtension(new AcknowledgedMessagesClientExtension());
43              }
44              
45              message.put(Bayeux.EXT_FIELD, _replyExt);
46          }
47  
48          return message;
49      }
50  
51  }