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 }