libs-ec/EcAlarmDestination.h
Richard Frith-MacDonald 251a32145d Add copyright
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/devmodules/dev-libs/ec@34778 72102866-910b-0410-8b05-ffd578937521
2012-02-19 12:53:41 +00:00

207 lines
7.4 KiB
Objective-C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** Enterprise Control Configuration and Logging
Copyright (C) 2012 Free Software Foundation, Inc.
Written by: Richard Frith-Macdonald <rfm@gnu.org>
Date: Febrary 2010
Originally developed from 1996 to 2012 by Brainstorm, and donated to
the FSF.
This file is part of the GNUstep project.
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 3 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
Library 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., 51 Franklin Street, Fifth Floor,
Boston, MA 02111 USA.
*/
#import <Foundation/NSObject.h>
@class EcAlarm;
@class NSRecursiveLock;
@class NSMutableArray;
@class NSMutableSet;
@class NSString;
@class NSTimer;
/** The EcAlarmDestination protocol describes the interface which must be
* provided by an object which handles alarms.<br />
* <p>The sender expects to be able to 'fire and forget', sending the
* messages in this protocol without having to wait for a response or deal
* with any error conditions, so the destination must <em>not</em> block
* for a long time or raise an exception.
* </p>
*/
@protocol EcAlarmDestination
/** Passes an alarm to the destination.
*/
- (oneway void) alarm: (in bycopy EcAlarm*)event;
/** Inform the destination of the existence of a managed object.<br />
* This is an indicator of a 'cold start' of that object ... meaning that the
* object has just started up afresh, and all outstanding alarms for the object
* are to be cleared.
*/
- (oneway void) domanage: (in bycopy NSString*)managedObject;
/** Inform the destination of the removal of a managed object.<br />
* This is an indicator of a graceful shutdown of that object ... meaning that
* the object has been stopped intentionally and all outstanding alarms for the
* object are to be cleared.
*/
- (oneway void) unmanage: (in bycopy NSString*)managedObject;
@end
/**
* <p>The EcAlarmDestination class provides an object to act as an alarm
* destination which is capable of buffering, coalescing, and forwarding
* alarms to another destination (usually in a separate process).
* </p>
* <p>The buffering and coalescing mechanism is important to prevent floods
* of alarms being sent over network connections.
* </p>
* <p>An EcAlarmDestination instance can also be set to forward alarm
* information to a number of other instances as backups for the main
* destination.
* </p>
*/
@interface EcAlarmDestination : NSObject <EcAlarmDestination>
{
NSRecursiveLock *_alarmLock;
NSMutableArray *_alarmQueue;
NSMutableSet *_alarmsActive;
NSMutableSet *_managedObjects;
NSTimer *_timer;
BOOL _isRunning;
BOOL _shouldStop;
BOOL _coalesceOff;
BOOL _inTimeout;
NSString *_host;
NSString *_name;
id<EcAlarmDestination> _destination;
NSArray *_backups;
}
/** Passes an alarm to the destination by adding it to a queue of alarm
* events which will be processed in the receivers running thread.
*/
- (oneway void) alarm: (in bycopy EcAlarm*)event;
/** Returns an array containing all the currently active alarms.
*/
- (NSArray*) alarms;
/** Returns an array of backup destinations (if set).<br />
* See -setBackups: for more information.
*/
- (NSArray*) backups;
/** Inform the destination of the existence of a managed object.<br />
* This is an indicator of a 'cold start' of that object ... meaning that the
* object has just started up afresh, and all outstanding alarms for the object
* are to be cleared.<br />
* The managedObject information is added to a queue which is processed by
* the receiver's running thread in order to pass the information on to the
* destination.
*/
- (oneway void) domanage: (in bycopy NSString*)managedObject;
/* <init />
* Initialises the receiver and starts up a secondary thread to manage
* alarms for it.
*/
- (id) init;
/** Sets the name/host of the object in a remote process to which
* alarms should be forwarded. If this information is set then the
* forwarder will attempt to maintain a Distributed Objects connection
* to the remote object.<br />
* The host may be nil for a local connection (current machine and account),
* or an empty string for a network connection to the local machine, or a
* host name for a network connection to another machine, or an asterisk
* for a network connection to any available machine.
*/
- (id) initWithHost: (NSString*)host name: (NSString*)name;
/** Returns a flag indicating whether the receiver is actually operating.
*/
- (BOOL) isRunning;
/** This method is called from -init in a secondary thread to start handling
* of alarms by the receiver. Do not call it yourself.
*/
- (void) run;
/** Sets an array containing EcAlarmDestination objects as backups to receive
* copies of the alarm and domanage/unmanage information sent to this
* destination.<br />
* You may set nil or an empty array to turn off backups, and may use the
* -backups method to get the currently set values.<br />
* Do not set up loops causing a destination to be its own backup either
* directly or indirectly, as this will cause alarms to be forwarded endlessly.
*/
- (void) setBackups: (NSArray*)backups;
/** Sets coalescing behavior for the queue of alarms and managed object
* changes. The default behavior is for coalescing to be turned on
* (so new values replace those in the queue), but setting this to NO
* will cause all events to be passed on (apart from repeated alarms at
* the same perceivedSeverity level, which are never passed one).
*/
- (BOOL) setCoalesce: (BOOL)coalesce;
/** Sets the destination to which alarms should be forwarded.<br />
* If nil this turns off forwarding until it is re-set to a non-nil
* destination.<br />
* The destination object is retained by the receiver.<br />
* Returns the previously set destination.
*/
- (id<EcAlarmDestination>) setDestination: (id<EcAlarmDestination>)destination;
/** Requests that the receiver's running thread should shut down. This method
* waits for a short while for the thread to shut down, but the process of
* shutting down is not guaranteed to have completed by the time the method
* returns.
*/
- (void) shutdown;
/** Inform the destination of the removal of a managed object.<br />
* This is an indicator of a graceful shutdown of that object ... meaning that
* the object has been stopped intentionally and all outstanding alarms for the
* object are to be cleared.<br />
* The managedObject information is added to a queue which is processed by
* the receiver's running thread in order to pass the information on to the
* destination.
*/
- (oneway void) unmanage: (in bycopy NSString*)managedObject;
@end
/** Methods called internally to forward events to the remote target of
* the receiver. These are provided for subclasses to oveerride.
*/
@interface EcAlarmDestination (Forwarding)
/** Forward an alarm event. */
- (void) alarmFwd: (EcAlarm*)event;
/** Forward a domanage event. */
- (void) domanageFwd: (NSString*)managedObject;
/** Forward an unmanage event. */
- (void) unmanageFwd: (NSString*)managedObject;
@end