package Aw;

use strict;
use Carp;
use vars qw($VERSION $VERSION_NAME @ISA @EXPORT @EXPORT_OK $AUTOLOAD $DefaultBrokerName $DefaultBrokerHost $SPAM);

$ENV{LD_LIBRARY_PATH} .= ':/opt/active40/lib:/opt/active40/samples/adapter_devkit/c_lib/'; # ':./blib/arch/auto/Aw';
# $ENV{'LD_PRELOAD'} = '/usr/local/users/yacob/Aw-0.12/blib/arch/auto/Aw.so';


require Exporter;
require DynaLoader;
require AutoLoader;

@ISA = qw(Exporter DynaLoader);
# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.


@EXPORT = qw(
	AW_AUTO_SIZE
	AW_ACK_NONE
	AW_ACK_AUTOMATIC
	AW_ACK_THROUGH
	AW_ACK_SELECTIVE
	AW_CONNECT_STATE_CONNECTED
	AW_CONNECT_STATE_DISCONNECTED
	AW_CONNECT_STATE_RECONNECTED
	AW_ENCRYPT_LEVEL_NO_ENCRYPTION
	AW_ENCRYPT_LEVEL_US_DOMESTIC
	AW_ENCRYPT_LEVEL_US_EXPORT
	AW_ENTIRE_SEQUENCE
	AW_ERROR_BAD_STATE
	AW_ERROR_BROKER_EXISTS
	AW_ERROR_BROKER_FAILURE
	AW_ERROR_BROKER_NOT_RUNNING
	AW_ERROR_CLIENT_CONTENTION
	AW_ERROR_CLIENT_EXISTS
	AW_ERROR_CLIENT_GROUP_EXISTS
	AW_ERROR_COMM_FAILURE
	AW_ERROR_CONNECTION_CLOSED
	AW_ERROR_CORRUPT
	AW_ERROR_DEPENDENCY
	AW_ERROR_FIELD_NOT_FOUND
	AW_ERROR_FIELD_TYPE_MISMATCH
	AW_ERROR_FILE_NOT_FOUND
	AW_ERROR_FILTER_PARSE
	AW_ERROR_FILTER_RUNTIME
	AW_ERROR_FORMAT
	AW_ERROR_HOST_NOT_FOUND
	AW_ERROR_INCOMPATIBLE_VERSION
	AW_ERROR_INPUT_PARSE
	AW_ERROR_INTERRUPTED
	AW_ERROR_INVALID_ACCESS_LIST
	AW_ERROR_INVALID_ACKNOWLEDGEMENT
	AW_ERROR_INVALID_BROKER_NAME
	AW_ERROR_INVALID_CLIENT
	AW_ERROR_INVALID_CLIENT_GROUP_NAME
	AW_ERROR_INVALID_CLIENT_ID
	AW_ERROR_INVALID_DESCRIPTOR
	AW_ERROR_INVALID_EVENT
	AW_ERROR_INVALID_EVENT_TYPE_NAME
	AW_ERROR_INVALID_FIELD_NAME
	AW_ERROR_INVALID_FILTER
	AW_ERROR_INVALID_LICENSE
	AW_ERROR_INVALID_LOG_CONFIG
	AW_ERROR_INVALID_NAME
	AW_ERROR_INVALID_PERMISSION
	AW_ERROR_INVALID_PLATFORM_KEY
	AW_ERROR_INVALID_PORT
	AW_ERROR_INVALID_SUBSCRIPTION
	AW_ERROR_INVALID_TERRITORY_NAME
	AW_ERROR_INVALID_TYPE
	AW_ERROR_INVALID_TYPECACHE
	AW_ERROR_INVALID_TYPEDEF
	AW_ERROR_IN_TERRITORY
	AW_ERROR_NOT_IMPLEMENTED
	AW_ERROR_NOT_IN_TERRITORY
	AW_ERROR_NO_MEMORY
	AW_ERROR_NO_PERMISSION
	AW_ERROR_NULL_PARAM
	AW_ERROR_OUT_OF_RANGE
	AW_ERROR_PROTOCOL
	AW_ERROR_SECURITY
	AW_ERROR_SUBSCRIPTION_EXISTS
	AW_ERROR_TIMEOUT
	AW_ERROR_UNKNOWN
	AW_ERROR_UNKNOWN_BROKER_NAME
	AW_ERROR_UNKNOWN_CLIENT_GROUP
	AW_ERROR_UNKNOWN_CLIENT_ID
	AW_ERROR_UNKNOWN_EVENT_TYPE
	AW_ERROR_UNKNOWN_INFOSET
	AW_ERROR_UNKNOWN_KEY
	AW_ERROR_UNKNOWN_NAME
	AW_ERROR_UNKNOWN_SERVER
	AW_ERROR_UNKNOWN_SESSION_ID
	AW_ERROR_UNKNOWN_TERRITORY
	AW_INFINITE
	AW_NO_ERROR
	AW_NO_SHARE_LIMIT
	AW_PLATFORM_ANY
	AW_PLATFORM_HPUX
	AW_PLATFORM_IRIX
	AW_PLATFORM_SOLARIS
	AW_PLATFORM_WINDOWS
	AW_REPLY_FLAG_CONTINUE
	AW_REPLY_FLAG_END
	AW_REPLY_FLAG_START
	AW_REPLY_FLAG_START_AND_END
	AW_RETRIEVE_ALL
	AW_STORAGE_GUARANTEED
	AW_STORAGE_PERSISTENT
	AW_STORAGE_VOLATILE
	AW_TRANSACTION_LEVEL_ANY
	AW_TRANSACTION_LEVEL_BASIC
	AW_TRANSACTION_LEVEL_CONVERSATIONAL
	AW_TRANSACTION_LEVEL_NONE
	AW_TRANSACTION_LEVEL_PSEUDO
	AW_TRANSACTION_MODE_COMMIT
	AW_TRANSACTION_MODE_ROLLBACK
	AW_TRANSACTION_MODE_SAVEPOINT
	AW_VALIDATE_BAD_LICENSE
	AW_VALIDATE_BAD_PLATFORM
	AW_VALIDATE_BAD_PRODUCT
	AW_VALIDATE_BAD_VERSION
	AW_VALIDATE_EXPIRED
	AW_VALIDATE_OKAY
	AW_VERSION
	DEFAULT_TRANSACTION_TIMEOUT
	FIELD_TYPE_BOOLEAN
	FIELD_TYPE_BYTE
	FIELD_TYPE_CHAR
	FIELD_TYPE_DATE
	FIELD_TYPE_DOUBLE
	FIELD_TYPE_EVENT
	FIELD_TYPE_FLOAT
	FIELD_TYPE_INT
	FIELD_TYPE_LONG
	FIELD_TYPE_SEQUENCE
	FIELD_TYPE_SHORT
	FIELD_TYPE_STRING
	FIELD_TYPE_STRUCT
	FIELD_TYPE_UNICODE_CHAR
	FIELD_TYPE_UNICODE_STRING
	FIELD_TYPE_UNKNOWN
	CAT_BROKER
	CAT_ADAPTER
	CAT_MONITOR
	CAT_SYSTEM
	CAT_APPLICATION
	CAT_KERNEL
	CAT_TIMEOUT
	CAT_DEBUG
	CAT_FILLER9
	CAT_FILLER10
	MSG_GET_FAMILY_NAMES
	MSG_RETRIEVE_EVENT_TYPES
	ERR_BAD_LICENSE
	ERR_LICENSE_BAD_PLATFORM
	ERR_LICENSE_EXPIRED
	ERR_LICENSE_BAD_VERSION
	ERR_LICENSE_BAD_PRODUCT
	MSG_NO_REFRESH_FAMILY
	MSG_NOTIFICATION_NOT_SUPPORTED
	MSG_NO_CAN_SUBSCRIBE
	MSG_NO_CAN_PUBLISH_REPLY
	ERR_LICENSE_WILL_EXPIRE
	ERR_PUBLISH_ADAPTER_ERROR
	ERR_PUBLISH_STATUS
	MSG_DELIVER_STATUS
	ERR_CREATE_CLIENT
	ERR_SSL_DESCRIPTOR
	ERR_ADAPTER_SUBS
	ERR_GET_EVENTS
	ERR_PANIC
	MSG_CREATE_EVENT
	MSG_SUBSCRIPTION_ERROR
	ERR_SUBSCRIPTION_ERROR
	MSG_PUBLISH_ERROR
	MSG_DELIVER_ERROR
	MSG_DELIVER_REPLY_ERROR
	MSG_INFOSET_ENTRY_MISSING
	MSG_INFOSET_ENTRY_ERROR
	MSG_FIELD_SET_ERROR
	MSG_FIELD_SET_NOT_SUPPORTED
	MSG_GET_EVENT_FIELD
	MSG_SET_EVENT_FIELD
	MSG_FORMAT_ERROR
	MSG_NO_CAN_SUBSCRIBE_REPLY
	MSG_NO_CAN_PUBLISH
	MSG_NO_TYPE_DEF
	MSG_NO_TYPE_DEF_REPLY
	ERR_GET_ADAPTER_INFO
	GENERIC_ALERT
	GENERIC_WARNING
	GENERIC_INFO
	MSG_PUBLISH_REPLY_ERROR
	MSG_FORWARD_TO_SESSION
	MSG_FORWARD_SET_FIELDS
	MSG_FIELD_SET_NO_FORMAT
	PLACE_HOLDER38
	PLACE_HOLDER37
	PLACE_HOLDER36
	PLACE_HOLDER35
	PLACE_HOLDER34
	FORWARD_ERROR_REQUEST
	MSG_TRANSACTION_NOACK
	MSG_TRANSACTION_COMMIT_MISSING
	INFO_ADD_NOTIFY_EVENT
	INFO_ADD_REQUEST_EVENT
	INFO_RECEIVED_REQUEST
	INFO_TEST_BROKER
	INFO_PROCESS_PUBLICATION
	INFO_FORWARD_REQUEST
	INFO_CLEANUP_EVENTTYPE
	MSG_NO_TRANS_ID
	MSG_TRANS_LEVEL_MISMATCH
	MSG_TRANS_NOT_ACTIVE
	MSG_NO_TRANS_MODE
	MSG_TRANS_MODE_NOT_SUPPORTED
	MSG_TRANSACTION_TIMEOUT
	MSG_TRANSACTION_MODIFIED
	PLACE_HOLDER16
	PLACE_HOLDER15
	PLACE_HOLDER14
	PLACE_HOLDER13
	PLACE_HOLDER12
	PLACE_HOLDER11
	PLACE_HOLDER10
	PLACE_HOLDER9
	PLACE_HOLDER8
	PLACE_HOLDER7
	PLACE_HOLDER6
	PLACE_HOLDER5
	PLACE_HOLDER4
	PLACE_HOLDER3
	PLACE_HOLDER2
	PLACE_HOLDER1
);
$VERSION = '0.15.1';
$VERSION_NAME = 'Tadpole Samurai';
$DefaultBrokerHost = 'localhost';
$DefaultBrokerName = 'Broker #1';
$SPAM = 0;


sub import {
my $pkg = shift;

	for ( my $i = 0; $i <= $#_; $i++ ) {
		$SPAM = 0 if ( $_[$i] =~ /^nospam$/i );
	}

 	setDefaultBroker ( @_ ) if ( @_ );
	Aw->export_to_level (1, $pkg, @EXPORT);  # this works too...
	#
	# Don't do this!  Resetting Exporter::ExportLevel _can_ hose other
	# packages using Exporter (such as POSIX, Data::Dumper).
	#
	# $Exporter::ExportLevel = 1;
	# Exporter::import ($pkg, @EXPORT);
}



sub setDefaultBroker {
my ( $name, $host ) = ($#_) ? ($_[0], $_[1]) : split ( "@", $_[0] );


	$DefaultBrokerName = $name if ($name);
	$DefaultBrokerHost = $host if ($host);

1;
}



sub setSpam {

	$SPAM = $_[0];

}



sub AUTOLOAD {
    # This AUTOLOAD is used to 'autoload' constants from the constant()
    # XS function.  If a constant is not found then control is passed
    # to the AUTOLOAD in AutoLoader.

    my $constname;
    ($constname = $AUTOLOAD) =~ s/.*:://;
    my $val = constant($constname, @_ ? $_[0] : 0);
    if ($! != 0) {
	if ($! =~ /Invalid/) {
	    $AutoLoader::AUTOLOAD = $AUTOLOAD;
	    goto &AutoLoader::AUTOLOAD;
	}
	else {
		croak "Your vendor has not defined Aw macro $constname";
	}
    }
    eval "sub $AUTOLOAD { $val }";
    goto &$AUTOLOAD;
}

bootstrap Aw $VERSION;

# Preloaded methods go here.

# Autoload methods go after =cut, and are processed by the autosplit program.

1;
__END__

=head1 NAME

Aw - Perl extension for the ActiveWorks C Application Development Kit

=head1 SYNOPSIS

 use Aw;
 require Aw::Adapter;
 require Aw::Event;
 my %properties = (
        clientId	=> 'TimeAdapter',
        broker		=> "test\@active:7449",
        adapterId	=> 0,
        debug		=> 1,
        clientGroup	=> 'devkitAdapter',
        adapterType	=> 'Adapter40',
        messageCatalog	=> 'time_adapter'
 );

 my $adapter = new Aw::Adapter  ( \%properties ) ;
 my $event = new Aw::Event;

=head1 DESCRIPTION

  A Java like interface to the CADK thru Perl.

=head1 Exported Constants

Everything in the CADK include files I<should> be exported as constants.
  


=head1 AUTHOR

Daniel Yacob Mekonnen,  L<Yacob@wMUsers.Com|mailto:Yacob@wMUsers.Com>

=head1 SEE ALSO

S<perl(1). ActiveWorks Supplied Documentation>

=cut