protocoltester.java

来自「JGRoups源码」· Java 代码 · 共 160 行

JAVA
160
字号
// $Id: ProtocolTester.java,v 1.7 2006/01/28 10:51:19 belaban Exp $package org.jgroups.debug;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.jgroups.Event;import org.jgroups.Message;import org.jgroups.stack.Configurator;import org.jgroups.stack.Protocol;import org.jgroups.stack.ProtocolStack;import org.jgroups.util.Util;/** * Generic class to test one or more protocol layers directly. Sets up a protocol stack consisting of * the top layer (which is essentially given by the user and is the test harness), the specified protocol(s) and * a bottom layer (which is automatically added), which sends all received messages immediately back up the * stack (swapping sender and receiver address of the message). *  * @author Bela Ban * @author March 23 2001 */public class ProtocolTester {    Protocol harness=null, top, bottom;    String props=null;    Configurator config=null;    protected final Log log=LogFactory.getLog(this.getClass());    public ProtocolTester(String prot_spec, Protocol harness) throws Exception {        if(prot_spec == null || harness == null)            throw new Exception("ProtocolTester(): prot_spec or harness is null");        props=prot_spec;        this.harness=harness;        props="LOOPBACK:" + props; // add a loopback layer at the bottom of the stack        config=new Configurator();        ProtocolStack stack=new ProtocolStack();        top=config.setupProtocolStack(props, stack);        harness.setDownProtocol(top);        top.setUpProtocol(harness); // +++        bottom=getBottomProtocol(top);        config.startProtocolStack(bottom);        // has to be set after StartProtocolStack, otherwise the up and down handler threads in the harness        // will be started as well (we don't want that) !        // top.setUpProtocol(harness);    }    public String getProtocolSpec() {        return props;    }    public void start() throws Exception {        Protocol p;        if(harness != null) {            p=harness;            while(p != null) {                p.start();                p=p.getDownProtocol();            }            config.startProtocolStack(harness);        }        else if(top != null) {            p=top;            while(p != null) {                p.start();                p=p.getDownProtocol();            }            config.startProtocolStack(top);        }    }    public void stop() {        Protocol p;        if(harness != null) {            p=harness;            while(p != null) {                p.stop();                p=p.getDownProtocol();            }            config.stopProtocolStack(harness);        }        else if(top != null) {            p=top;            while(p != null) {                p.stop();                p=p.getDownProtocol();            }            config.stopProtocolStack(top);        }    }    private final Protocol getBottomProtocol(Protocol top) {        Protocol tmp;        if(top == null)            return null;        tmp=top;        while(tmp.getDownProtocol() != null)            tmp=tmp.getDownProtocol();        return tmp;    }    public static void main(String[] args) {        String props;        ProtocolTester t;        Harness h;        if(args.length < 1 || args.length > 2) {            System.out.println("ProtocolTester <protocol stack spec> [-trace]");            return;        }        props=args[0];        try {            h=new Harness();            t=new ProtocolTester(props, h);            System.out.println("protocol specification is " + t.getProtocolSpec());            h.down(new Event(Event.BECOME_SERVER));            for(int i=0; i < 5; i++) {                System.out.println("Sending msg #" + i);                h.down(new Event(Event.MSG, new Message(null, null, "Hello world #" + i)));            }            Util.sleep(500);            t.stop();        }        catch(Exception ex) {            System.err.println(ex);        }    }    private static class Harness extends Protocol {        public String getName() {            return "Harness";        }        public void up(Event evt) {            System.out.println("Harness.up(): " + evt);        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?