Pots::Message - Perl ObjectThreads message class


Pots documentation Contained in the Pots distribution.

Index


Code Index:

NAME

Top

Pots::Message - Perl ObjectThreads message class

SYNOPSIS

Top

    use Pots::Message;

    my $msg = Pots::Message->new();
    $msg->type('MyMessage');
    $msg->set('key1', $data1);

    my $msg = Pots::Message->new(
        'MyMessage',
        {
            'key1' => $data1,
        }
    );

DESCRIPTION

Top

This class allows you to store arbitrary data in an object and is very similar in purpose to a standard Perl hash. It is the base element for data exchange between threads along with Pots::MessageQueue.

METHODS

Top

new ([$type] [, {'key' => $value, ...}])

This method creates a new message object. You can optionaly set message content (message type and message data).

type ($type)

Sets message type (arbitrary string) so that you can later filter messages.

set ('key', $value)

Add arbitrary data to the message, identified by 'key'.

get ('key')

Retrieves data stored in the message, identified by 'key'.

AUTHOR and COPYRIGHT

Top


Pots documentation Contained in the Pots distribution.

##########################################################################
#
# Module template
#
##########################################################################
package Pots::Message;

##########################################################################
#
# Modules
#
##########################################################################
use threads;
use threads::shared;

use strict;

##########################################################################
#
# Global variables
#
##########################################################################
our $Serial : shared = 0;

##########################################################################
#
# Private methods
#
##########################################################################

##########################################################################
#
# Public methods
#
##########################################################################

sub new {
    my $class = shift;
    my $type = shift || undef;
    my $href = shift || undef;

    my $serial;
    my $self = {};
    bless ($self, ref ($class) || $class);

    {
        lock($Serial);
        $serial = $Serial++;
    }

    if (defined($type)) {
        $self->{_type} = $type;
    } else {
        $self->{_type} = '';
    }

    $self->set('_pots_msg_serial', $serial);

    if (defined($href) && ref($href) eq 'HASH') {
        foreach my $key (keys(%{$href})) {
            $self->set($key, $href->{$key});
        }
    }

    return $self;
}

sub type {
    my $self = shift;

    if (@_) {
        $self->{_type} = $_[0];
    }

    return $self->{_type};
}

sub set {
    my $self = shift;
    my $key = shift || return;

    my $field = "_field_" . $key;

    $self->{$field} = (@_ == 1 ? $_[0] : [@_]);
}

sub get {
    my $self = shift;
    my $key = shift || return undef;

    my $field = "_field_" . $key;

    return $self->{$field};
}

1; #this line is important and will help the module return a true value
__END__