All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.threerings.presents.peer.data.NodeObject Maven / Gradle / Ivy

//
// $Id: NodeObject.java 6575 2011-04-01 22:06:42Z mdb $
//
// Narya library - tools for developing networked games
// Copyright (C) 2002-2011 Three Rings Design, Inc., All Rights Reserved
// http://code.google.com/p/narya/
//
// This library is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

package com.threerings.presents.peer.data;

import javax.annotation.Generated;

import com.google.common.base.Objects;

import com.threerings.io.SimpleStreamableObject;
import com.threerings.io.Streamable;

import com.threerings.presents.dobj.DObject;
import com.threerings.presents.dobj.DSet;

/**
 * Contains information that one node published for all of its peers.
 */
public class NodeObject extends DObject
{
    // AUTO-GENERATED: FIELDS START
    /** The field name of the nodeName field. */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public static final String NODE_NAME = "nodeName";

    /** The field name of the bootStamp field. */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public static final String BOOT_STAMP = "bootStamp";

    /** The field name of the peerService field. */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public static final String PEER_SERVICE = "peerService";

    /** The field name of the clients field. */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public static final String CLIENTS = "clients";

    /** The field name of the locks field. */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public static final String LOCKS = "locks";

    /** The field name of the acquiringLock field. */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public static final String ACQUIRING_LOCK = "acquiringLock";

    /** The field name of the releasingLock field. */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public static final String RELEASING_LOCK = "releasingLock";

    /** The field name of the cacheData field. */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public static final String CACHE_DATA = "cacheData";
    // AUTO-GENERATED: FIELDS END

    /** Identifies a locked resource. */
    public static class Lock extends SimpleStreamableObject
        implements Comparable, DSet.Entry
    {
        /** The resource type.  Only resources of the same type will have their ids compared. */
        public final String type;

        /** The resource identifier, which can be null for singleton resources. */
        public final Comparable id;

        public Lock (String type, Comparable id)
        {
            this.type = type;
            this.id = id;
        }

        // documentation inherited from interface Comparable
        public int compareTo (Lock olock)
        {
            int v1 = type.compareTo(olock.type);
            if (v1 != 0 || id == null) {
                return v1;
            }
            return DSet.compare(id, olock.id);
        }

        // documentation inherited from interface DSet.Entry
        public Comparable getKey ()
        {
            return this;
        }

        @Override
        public int hashCode ()
        {
            return type.hashCode() + (id == null ? 0 : id.hashCode());
        }

        @Override
        public boolean equals (Object other)
        {
            Lock olock = (Lock)other;
            return type.equals(olock.type) && Objects.equal(id, olock.id);
        }
    }

    /** Used for informing peers of changes to persistent data. */
    public static class CacheData extends SimpleStreamableObject
    {
        /** The cache that should be purged. */
        public final String cache;

        /** The stale data in the cache. */
        public final Streamable data;

        public CacheData (String cache, Streamable data)
        {
            this.cache = cache;
            this.data = data;
        }
    }

    /** The node name of this peer. */
    public String nodeName;

    /** The time that this node's JVM started up. */
    public long bootStamp;

    /** The service used to make requests of the node. */
    public PeerMarshaller peerService;

    /** Contains information on all clients connected to this node. */
    public DSet clients = new DSet();

    /** The set of locks held by this node. */
    public DSet locks = new DSet();

    /** Used to broadcast a node's desire to acquire a lock. */
    public Lock acquiringLock;

    /** Used to broadcast a node's desire to release a lock. */
    public Lock releasingLock;

    /** A field we use to broadcast changes to possible cached data. */
    public CacheData cacheData;

    // AUTO-GENERATED: METHODS START
    /**
     * Requests that the nodeName field be set to the
     * specified value. The local value will be updated immediately and an
     * event will be propagated through the system to notify all listeners
     * that the attribute did change. Proxied copies of this object (on
     * clients) will apply the value change when they received the
     * attribute changed notification.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void setNodeName (String value)
    {
        String ovalue = this.nodeName;
        requestAttributeChange(
            NODE_NAME, value, ovalue);
        this.nodeName = value;
    }

    /**
     * Requests that the bootStamp field be set to the
     * specified value. The local value will be updated immediately and an
     * event will be propagated through the system to notify all listeners
     * that the attribute did change. Proxied copies of this object (on
     * clients) will apply the value change when they received the
     * attribute changed notification.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void setBootStamp (long value)
    {
        long ovalue = this.bootStamp;
        requestAttributeChange(
            BOOT_STAMP, Long.valueOf(value), Long.valueOf(ovalue));
        this.bootStamp = value;
    }

    /**
     * Requests that the peerService field be set to the
     * specified value. The local value will be updated immediately and an
     * event will be propagated through the system to notify all listeners
     * that the attribute did change. Proxied copies of this object (on
     * clients) will apply the value change when they received the
     * attribute changed notification.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void setPeerService (PeerMarshaller value)
    {
        PeerMarshaller ovalue = this.peerService;
        requestAttributeChange(
            PEER_SERVICE, value, ovalue);
        this.peerService = value;
    }

    /**
     * Requests that the specified entry be added to the
     * clients set. The set will not change until the event is
     * actually propagated through the system.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void addToClients (ClientInfo elem)
    {
        requestEntryAdd(CLIENTS, clients, elem);
    }

    /**
     * Requests that the entry matching the supplied key be removed from
     * the clients set. The set will not change until the
     * event is actually propagated through the system.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void removeFromClients (Comparable key)
    {
        requestEntryRemove(CLIENTS, clients, key);
    }

    /**
     * Requests that the specified entry be updated in the
     * clients set. The set will not change until the event is
     * actually propagated through the system.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void updateClients (ClientInfo elem)
    {
        requestEntryUpdate(CLIENTS, clients, elem);
    }

    /**
     * Requests that the clients field be set to the
     * specified value. Generally one only adds, updates and removes
     * entries of a distributed set, but certain situations call for a
     * complete replacement of the set value. The local value will be
     * updated immediately and an event will be propagated through the
     * system to notify all listeners that the attribute did
     * change. Proxied copies of this object (on clients) will apply the
     * value change when they received the attribute changed notification.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void setClients (DSet value)
    {
        requestAttributeChange(CLIENTS, value, this.clients);
        DSet clone = (value == null) ? null : value.clone();
        this.clients = clone;
    }

    /**
     * Requests that the specified entry be added to the
     * locks set. The set will not change until the event is
     * actually propagated through the system.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void addToLocks (NodeObject.Lock elem)
    {
        requestEntryAdd(LOCKS, locks, elem);
    }

    /**
     * Requests that the entry matching the supplied key be removed from
     * the locks set. The set will not change until the
     * event is actually propagated through the system.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void removeFromLocks (Comparable key)
    {
        requestEntryRemove(LOCKS, locks, key);
    }

    /**
     * Requests that the specified entry be updated in the
     * locks set. The set will not change until the event is
     * actually propagated through the system.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void updateLocks (NodeObject.Lock elem)
    {
        requestEntryUpdate(LOCKS, locks, elem);
    }

    /**
     * Requests that the locks field be set to the
     * specified value. Generally one only adds, updates and removes
     * entries of a distributed set, but certain situations call for a
     * complete replacement of the set value. The local value will be
     * updated immediately and an event will be propagated through the
     * system to notify all listeners that the attribute did
     * change. Proxied copies of this object (on clients) will apply the
     * value change when they received the attribute changed notification.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void setLocks (DSet value)
    {
        requestAttributeChange(LOCKS, value, this.locks);
        DSet clone = (value == null) ? null : value.clone();
        this.locks = clone;
    }

    /**
     * Requests that the acquiringLock field be set to the
     * specified value. The local value will be updated immediately and an
     * event will be propagated through the system to notify all listeners
     * that the attribute did change. Proxied copies of this object (on
     * clients) will apply the value change when they received the
     * attribute changed notification.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void setAcquiringLock (NodeObject.Lock value)
    {
        NodeObject.Lock ovalue = this.acquiringLock;
        requestAttributeChange(
            ACQUIRING_LOCK, value, ovalue);
        this.acquiringLock = value;
    }

    /**
     * Requests that the releasingLock field be set to the
     * specified value. The local value will be updated immediately and an
     * event will be propagated through the system to notify all listeners
     * that the attribute did change. Proxied copies of this object (on
     * clients) will apply the value change when they received the
     * attribute changed notification.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void setReleasingLock (NodeObject.Lock value)
    {
        NodeObject.Lock ovalue = this.releasingLock;
        requestAttributeChange(
            RELEASING_LOCK, value, ovalue);
        this.releasingLock = value;
    }

    /**
     * Requests that the cacheData field be set to the
     * specified value. The local value will be updated immediately and an
     * event will be propagated through the system to notify all listeners
     * that the attribute did change. Proxied copies of this object (on
     * clients) will apply the value change when they received the
     * attribute changed notification.
     */
    @Generated(value={"com.threerings.presents.tools.GenDObjectTask"})
    public void setCacheData (NodeObject.CacheData value)
    {
        NodeObject.CacheData ovalue = this.cacheData;
        requestAttributeChange(
            CACHE_DATA, value, ovalue);
        this.cacheData = value;
    }
    // AUTO-GENERATED: METHODS END
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy