whiteboard.java

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

JAVA
325
字号
// $Id: Whiteboard.java,v 1.5 2005/05/30 16:14:37 belaban Exp $package org.jgroups.demos.wb;import org.jgroups.*;import org.jgroups.blocks.*;import org.jgroups.blocks.GroupRequest;import org.jgroups.blocks.RpcDispatcher;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.applet.Applet;import java.awt.*;import java.awt.event.*;/** * Shared whiteboard: members are represented by rectangles that contain their names and the OS/arch of * the machine they are working on. The boxes can be moved by anyone and by clicking on them, messages can * be sent to specific or all members. Whiteboard is both an application and an applet. * @author Bela Ban */public class Whiteboard extends Applet implements ActionListener, MessageListener, MembershipListener,						  ComponentListener, FocusListener {    public RpcDispatcher           disp;    Channel                        channel;    GraphPanel                     panel;    private Button                 leave_button;    private Label                  mbr_label;    private final Font             default_font=new Font("Helvetica",Font.PLAIN,12);    private String                 props=null;    public static final String     groupname="WbGrp";    private boolean                application=false;    Log                            log=LogFactory.getLog(getClass());    public void receive(Message m) {        ;    }    public byte[] getState() {        panel.saveState();        return panel.getState();    }    public void setState(byte[] new_state) {        panel.setState(new_state);    }    private String getInfo() {        StringBuffer ret = new StringBuffer();        ret.append(" (" + System.getProperty("os.name") + ' ' + System.getProperty("os.version") +                   ' ' + System.getProperty("os.arch") + ')');        return ret.toString();    }    private Frame findParent() {        Component retval = getParent();        while (retval != null) {            if (retval instanceof Frame)                return (Frame) retval;            retval = retval.getParent();        }        return null;    }    public Whiteboard() {	             // called when started as applet    }    public Whiteboard(String properties) {   // called when started as application        application = true;        props = properties;    }    public void init() {        setLayout(new BorderLayout());        panel = new GraphPanel(this);        panel.setBackground(Color.white);        add("Center", panel);        Panel p = new Panel();        leave_button = new Button("Exit");        leave_button.setFont(default_font);        leave_button.addActionListener(this);        mbr_label = new Label("1 mbr(s)");        mbr_label.setFont(default_font);        p.add("South", leave_button);        p.add("South", mbr_label);        add("South", p);        if (!application)            props = getParameter("properties");        if (props == null) {            // props="UDP:PING:FD:STABLE:NAKACK:UNICAST:FRAG:FLUSH:GMS:VIEW_ENFORCER:STATE_TRANSFER:QUEUE";            props = "UDP:PING:FD:" +                    "pbcast.PBCAST:UNICAST:FRAG:pbcast.GMS:" +                    "pbcast.STATE_TRANSFER";            //props="TCP:" +            //"TCPPING(port_range=3;initial_hosts=localhost[8880]):" +            //"FD:STABLE:NAKACK:FLUSH:GMS:VIEW_ENFORCER:STATE_TRANSFER:QUEUE";        }        System.out.println("properties are " + props);        try {            channel = new JChannel(props);            disp = new RpcDispatcher(channel, this, this, this);            channel.connect(groupname);            System.out.println("INIT()");            channel.getState(null, 0);        } catch (Exception e) {            log.error("Whiteboard.init(): " + e);        }        panel.my_addr = channel.getLocalAddress();        UserInfoDialog dlg = new UserInfoDialog(findParent());        String n = dlg.getUserName();        String info = getInfo();        panel.start(n + info);        addComponentListener(this);        addFocusListener(this);    }    public void destroy() {        if (disp != null) {            try {				MethodCall call = new MethodCall("removeNode", new Object[] {panel.my_addr}, new String[] {Object.class.getName()});                 disp.callRemoteMethods(null, call, GroupRequest.GET_ALL, 0);            } catch (Exception e) {                log.error(e);            }            channel.close();            disp = null;            if (panel != null) {                panel.stop();                panel = null;            }        }    }    public void repaint() {        if (panel != null)            panel.repaint();    }    public void actionPerformed(ActionEvent e) {        String command = e.getActionCommand();        if ("Exit".equals(command)) {            try {                setVisible(false);                destroy();                if (application) {                    ((Frame) getParent()).dispose();                    System.exit(0);                }            } catch (Exception ex) {                log.error(ex);            }        } else            System.out.println("Unknown action");    }    public void viewAccepted(View v) {        if (v != null) {            if (mbr_label != null)                mbr_label.setText(v.size() + " mbr(s)");        }        panel.adjustNodes(v.getMembers());    }    public void suspect(Address obj) {    }    public void block() {    }    public void moveNode(Node n) {        panel.moveNode(n);    }    public void addNode(String lbl, Address addr, int xloc, int yloc) {        panel.addNode(lbl, addr, xloc, yloc);    }    public void removeNode(Object addr) {        panel.removeNode(addr);    }    public void displayMessage(String sender, String msg) {        new MessageDialog(findParent(), sender, msg);        panel.repaint();    }    public void componentResized(ComponentEvent e) {        if (panel != null) panel.repaint();    }    public void componentMoved(ComponentEvent e) {    }    public void componentShown(ComponentEvent e) {        if (panel != null) panel.repaint();    }    public void componentHidden(ComponentEvent e) {    }    public void focusGained(FocusEvent e) {        if (panel != null) panel.repaint();    }    public void focusLost(FocusEvent e) {    }    public static void main(String[] args) {        String props = null;        for (int i = 0; i < args.length; i++) {            if ("-props".equals(args[i])) {                props = args[++i];                continue;            }            help();            return;        }        Whiteboard wb = new Whiteboard(props);        new ApplFrame("Whiteboard Application", wb);    }    static void help() {        System.out.println("Whiteboard [-help] [-props <props>]");    }}class ApplFrame extends Frame implements WindowListener, ComponentListener {    Whiteboard wb = null;    public ApplFrame(String title, Whiteboard wb) {        super(title);        this.wb = wb;        add(wb);        setSize(299, 299);        setVisible(true);        wb.init();        setSize(300, 300);        addWindowListener(this);        addComponentListener(this);    }    public void windowOpened(WindowEvent e) {    }    public void windowClosing(WindowEvent e) {        dispose();        System.exit(0);    }    public void windowClosed(WindowEvent e) {    }    public void windowIconified(WindowEvent e) {    }    public void windowDeiconified(WindowEvent e) {        wb.repaint();    }    public void windowActivated(WindowEvent e) {        wb.repaint();    }    public void windowDeactivated(WindowEvent e) {    }    public void componentResized(ComponentEvent e) {        wb.repaint();    }    public void componentMoved(ComponentEvent e) {    }    public void componentShown(ComponentEvent e) {    }    public void componentHidden(ComponentEvent e) {    }}

⌨️ 快捷键说明

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