org.red5.server.scope

## Class BasicScope

- java.lang.Object
- - org.red5.server.scope.BasicScope

All Implemented Interfaces:
  IEventDispatcher, IEventHandler, IEventListener, IEventObservable, ICoreObject, IBasicScope

Direct Known Subclasses:
  BroadcastScope, Scope, SharedObjectScope

    public abstract class BasicScope
    extends Object
    implements IBasicScope

Generalizations of one of main Red5 object types, Scope.

See Also:
  `IScope`, `Scope`

### Field Summary

Fields
`protected int` `keepDelay` Set to amount of time (in seconds) the scope will be kept before being freed, after the last disconnect.
`protected boolean` `keepOnDisconnect` Set to true to prevent the scope from being freed upon disconnect.
`protected Set<IEventListener>` `listeners` List of event listeners
`protected String` `name` String identifier for this scope
`protected IScope` `parent` Parent scope.
`protected String` `persistenceClass` Scope persistence storage type
`protected boolean` `persistent` Whether or not to persist attributes
`protected IPersistenceStore` `store` Storage for persistable attributes
`protected ScopeType` `type` Scope type.

### Constructor Summary

Constructors
Constructor and Description
`BasicScope()` Creates unnamed scope
`BasicScope(IScope parent, ScopeType type, String name, boolean persistent)` Constructor for basic scope

### Method Summary

Methods
`void` `addEventListener(IEventListener listener)` Add event listener to list of notified objects
`void` `dispatchEvent(IEvent event)` Dispatches event (notifies all listeners)
`boolean` `equals(Object obj)` Equality is based on the scope's name and type
`int` `getDepth()` Get the scopes depth, how far down the scope tree is it.
`Set<IEventListener>` `getEventListeners()` Return listeners list iterator
`String` `getName()` Get the name of this scope.
`IScope` `getParent()` Get this scopes parent.
`String` `getPath()` Get the full absolute path.
`IPersistenceStore` `getStore()` Get the persistable store
`ScopeType` `getType()` Get the type of the scope.
`boolean` `handleEvent(IEvent event)` Handles event.
`boolean` `hasEventListeners()` Returns true if there are event listeners attached to this scope.
`int` `hashCode()` Hash code is based on the scope's name and type
`boolean` `hasParent()` Does this scope have a parent? You can think of scopes as of tree items where scope may have a parent and children (child).
`boolean` `isValid()` Validates a scope based on its name and type
`void` `notifyEvent(IEvent event)` Notifies listeners on event.
`void` `removeEventListener(IEventListener listener)` Remove event listener from list of listeners
`void` `setKeepDelay(int keepDelay)` Sets the amount of time to keep the scope available after the last disconnect.

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### parent

    protected IScope parent

Parent scope. Scopes can be nested.

See Also:
  `IScope`

#### type

    protected ScopeType type

Scope type.

See Also:
  `ScopeType`

#### name

    protected String name

String identifier for this scope

#### persistent

    protected boolean persistent

Whether or not to persist attributes

#### store

    protected IPersistenceStore store

Storage for persistable attributes

#### persistenceClass

    protected String persistenceClass

Scope persistence storage type

#### keepOnDisconnect

    protected boolean keepOnDisconnect

Set to true to prevent the scope from being freed upon disconnect.

#### keepDelay

    protected int keepDelay

Set to amount of time (in seconds) the scope will be kept before being freed, after the last disconnect.

#### listeners

    protected Set<IEventListener> listeners

List of event listeners

### Constructor Detail

#### BasicScope

    @ConstructorProperties(value="")
    public BasicScope()

Creates unnamed scope

#### BasicScope

    @ConstructorProperties(value={"parent","type","name","persistent"})
    public BasicScope(IScope parent,
                                         ScopeType type,
                                         String name,
                                         boolean persistent)

Constructor for basic scope

Parameters:
  `parent` - Parent scope
  `type` - Scope type
  `name` - Scope name. Used to identify scopes in application, must be unique among scopes of one level
  `persistent` - Whether scope is persistent

### Method Detail

#### hasParent

    public boolean hasParent()

Does this scope have a parent? You can think of scopes as of tree items where scope may have a parent and children (child).

Specified by:
  `hasParent` in interface `IBasicScope`
Returns:
  `true` if this scope has a parent, otherwise `false`

#### getParent

    public IScope getParent()

Get this scopes parent.

Specified by:
  `getParent` in interface `IBasicScope`
Returns:
  parent scope, or `null` if this scope doesn't have a parent

#### getType

    public ScopeType getType()

Description copied from interface: `IBasicScope`
Get the type of the scope.

Specified by:
  `getType` in interface `IBasicScope`
Returns:
  the type

#### getName

    public String getName()

Description copied from interface: `IBasicScope`
Get the name of this scope. Eg. `someroom`.

Specified by:
  `getName` in interface `IBasicScope`
Returns:
  the name

#### getStore

    public IPersistenceStore getStore()

Description copied from interface: `IBasicScope`
Get the persistable store

Specified by:
  `getStore` in interface `IBasicScope`
Returns:
  the store

#### getDepth

    public int getDepth()

Get the scopes depth, how far down the scope tree is it. The lowest depth is 0x00, the depth of Global scope. Application scope depth is 0x01. Room depth is 0x02, 0x03 and so forth.

Specified by:
  `getDepth` in interface `IBasicScope`
Returns:
  the depth

#### getPath

    public String getPath()

Get the full absolute path. Eg. `host/myapp/someroom`.

Specified by:
  `getPath` in interface `IBasicScope`
Returns:
  Absolute scope path

#### setKeepDelay

    public void setKeepDelay(int keepDelay)

Sets the amount of time to keep the scope available after the last disconnect.

Specified by:
  `setKeepDelay` in interface `IBasicScope`
Parameters:
  `keepDelay` - delay

#### isValid

    public boolean isValid()

Validates a scope based on its name and type

Specified by:
  `isValid` in interface `IBasicScope`
Returns:
  true if both name and type are valid, false otherwise

#### addEventListener

    public void addEventListener(IEventListener listener)

Add event listener to list of notified objects

Specified by:
  `addEventListener` in interface `IEventObservable`
Parameters:
  `listener` - Listening object

#### removeEventListener

    public void removeEventListener(IEventListener listener)

Remove event listener from list of listeners

Specified by:
  `removeEventListener` in interface `IEventObservable`
Parameters:
  `listener` - Listener to remove

#### getEventListeners

    public Set<IEventListener> getEventListeners()

Return listeners list iterator

Specified by:
  `getEventListeners` in interface `IEventObservable`
Returns:
  Listeners list iterator

#### hasEventListeners

    public boolean hasEventListeners()

Returns true if there are event listeners attached to this scope.

Returns:
  true if it has listeners; else false.

#### handleEvent

    public boolean handleEvent(IEvent event)

Handles event. To be implemented in subclass realization

Specified by:
  `handleEvent` in interface `IEventHandler`
Parameters:
  `event` - Event context
Returns:
  Event handling result

#### notifyEvent

    public void notifyEvent(IEvent event)

Notifies listeners on event. Current implementation is empty. To be implemented in subclass realization

Specified by:
  `notifyEvent` in interface `IEventListener`
Parameters:
  `event` - Event to broadcast

#### dispatchEvent

    public void dispatchEvent(IEvent event)

Dispatches event (notifies all listeners)

Specified by:
  `dispatchEvent` in interface `IEventDispatcher`
Parameters:
  `event` - Event to dispatch

#### hashCode

    public int hashCode()

Hash code is based on the scope's name and type

Overrides:
  `hashCode` in class `Object`
Returns:
  hash code

#### equals

    public boolean equals(Object obj)

Equality is based on the scope's name and type

Overrides:
  `equals` in class `Object`
Parameters:
  `obj` -