⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 view.java

📁 JGRoups源码
💻 JAVA
字号:
// $Id: View.java,v 1.12 2006/08/14 16:11:37 belaban Exp $package org.jgroups;import org.jgroups.util.Streamable;import org.jgroups.util.Util;import java.io.*;import java.util.Vector;/** * A view is a local representation of the current membership of a group. * Only one view is installed in a channel at a time. * Views contain the address of its creator, an ID and a list of member addresses. * These adresses are ordered, and the first address is always the coordinator of the view. * This way, each member of the group knows who the new coordinator will be if the current one * crashes or leaves the group. * The views are sent between members using the VIEW_CHANGE event. */public class View implements Externalizable, Cloneable, Streamable {    /* A view is uniquely identified by its ViewID     * The view id contains the creator address and a Lamport time.     * The Lamport time is the highest timestamp seen or sent from a view.     * if a view change comes in with a lower Lamport time, the event is discarded.     */    protected ViewId vid=null;    /**     * A list containing all the members of the view     * This list is always ordered, with the coordinator being the first member.     * the second member will be the new coordinator if the current one disappears     * or leaves the group.     */    protected Vector members=null;    /**     * creates an empty view, should not be used     */    public View() {    }    /**     * Creates a new view     *     * @param vid     The view id of this view (can not be null)     * @param members Contains a list of all the members in the view, can be empty but not null.     */    public View(ViewId vid, Vector members) {        this.vid=vid;        this.members=members;    }    /**     * Creates a new view     *     * @param creator The creator of this view (can not be null)     * @param id      The lamport timestamp of this view     * @param members Contains a list of all the members in the view, can be empty but not null.     */    public View(Address creator, long id, Vector members) {        this(new ViewId(creator, id), members);    }    /**     * returns the view ID of this view     * if this view was created with the empty constructur, null will be returned     *     * @return the view ID of this view     */    public ViewId getVid() {        return vid;    }    /**     * returns the creator of this view     * if this view was created with the empty constructur, null will be returned     *     * @return the creator of this view in form of an Address object     */    public Address getCreator() {        return vid != null ? vid.getCoordAddress() : null;    }    /**     * Returns a reference to the List of members (ordered)     * Do NOT change this list, hence your will invalidate the view     * Make a copy if you have to modify it.     *     * @return a reference to the ordered list of members in this view     */    public Vector getMembers() {        return members;    }    /**     * returns true, if this view contains a certain member     *     * @param mbr - the address of the member,     * @return true if this view contains the member, false if it doesn't     *         if the argument mbr is null, this operation returns false     */    public boolean containsMember(Address mbr) {        if(mbr == null || members == null) {            return false;        }        return members.contains(mbr);    }    public boolean equals(Object obj) {        if(obj == null)            return false;        if(!(obj instanceof View))            throw new ClassCastException(obj.getClass().getName() + " is not a View");        if(vid != null) {            int rc=vid.compareTo(((View)obj).vid);            if(rc != 0)                return false;            if(members != null && ((View)obj).members != null) {                return members.equals(((View)obj).members);            }        }        else {            if(((View)obj).vid == null)                return true;        }        return false;    }    /**     * returns the number of members in this view     *     * @return the number of members in this view 0..n     */    public int size() {        return members == null ? 0 : members.size();    }    /**     * creates a copy of this view     *     * @return a copy of this view     */    public Object clone() {        ViewId vid2=vid != null ? (ViewId)vid.clone() : null;        Vector members2=members != null ? (Vector)members.clone() : null;        return new View(vid2, members2);    }    /**     * debug only     */    public String printDetails() {        StringBuffer ret=new StringBuffer();        ret.append(vid).append("\n\t");        if(members != null) {            for(int i=0; i < members.size(); i++) {                ret.append(members.elementAt(i)).append("\n\t");            }            ret.append('\n');        }        return ret.toString();    }    public String toString() {        StringBuffer ret=new StringBuffer(64);        ret.append(vid).append(" ").append(members);        return ret.toString();    }    public void writeExternal(ObjectOutput out) throws IOException {        out.writeObject(vid);        out.writeObject(members);    }    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {        vid=(ViewId)in.readObject();        members=(Vector)in.readObject();    }    public void writeTo(DataOutputStream out) throws IOException {        // vid        if(vid != null) {            out.writeBoolean(true);            vid.writeTo(out);        }        else            out.writeBoolean(false);        // members:        Util.writeAddresses(members, out);    }    public void readFrom(DataInputStream in) throws IOException, IllegalAccessException, InstantiationException {        boolean b;        // vid:        b=in.readBoolean();        if(b) {            vid=new ViewId();            vid.readFrom(in);        }        // members:        members=(Vector)Util.readAddresses(in, Vector.class);    }    public int serializedSize() {        int retval=Global.BYTE_SIZE; // presence for vid        if(vid != null)            retval+=vid.serializedSize();        retval+=Util.size(members);        return retval;    }}

⌨️ 快捷键说明

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