package org.jgroups.protocols; import org.jgroups.Event; import org.jgroups.Message; import org.jgroups.Header; import org.jgroups.conf.ClassConfigurator; import org.jgroups.annotations.Unsupported; import org.jgroups.stack.Protocol; import java.util.Map; /** * Example of a protocol layer. Contains no real functionality, can be used as a template. */ @Unsupported public class HDRS extends Protocol { private static void printMessage(Message msg, String label) { StringBuilder sb=new StringBuilder(); sb.append(label).append(":\n"); Map<Short, Header> hdrs=msg.getHeaders(); sb.append(print(msg, hdrs)); System.out.println(sb); } private static String print(Message msg, Map<Short, Header> hdrs) { StringBuilder sb=new StringBuilder(); int hdrs_size=0; for(Map.Entry<Short,Header> entry: hdrs.entrySet()) { Class clazz=ClassConfigurator.getProtocol(entry.getKey()); String name=clazz != null? clazz.getSimpleName() : null; Header hdr=entry.getValue(); int size=hdr.size(); hdrs_size+=size; sb.append(name).append(": ").append(" ").append(size).append(" bytes\n"); } sb.append("headers=").append(hdrs_size).append(", total msg size=").append(msg.size()); sb.append(", msg payload=").append(msg.getLength()).append("\n"); return sb.toString(); } public Object up(Event evt) { if(evt.getType() == Event.MSG) { Message msg=(Message)evt.getArg(); printMessage(msg, "up"); } return up_prot.up(evt); // Pass up to the layer above us } public Object down(Event evt) { if(evt.getType() == Event.MSG) { Message msg=(Message)evt.getArg(); printMessage(msg, "down"); } return down_prot.down(evt); // Pass on to the layer below us } }