The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Net::IPMessenger - Interface to the IP Messenger Protocol

VERSION

This document describes Net::IPMessenger version 0.14

SYNOPSIS

    use Net::IPMessenger;

    my $ipmsg = Net::IPMessenger->new(
        NickName  => 'myname',
        GroupName => 'mygroup',
        UserName  => 'myuser',
        HostName  => 'myhost',
    ) or die;

    $ipmsg->serveraddr($addr);
    $ipmsg->add_broadcast($broadcast);

    $ipmsg->send(...);

    ...

    $ipmsg->recv(...);

    ...

DESCRIPTION

This is a client class of the IP Messenger (http://ipmsg.org/index.html.en) Protocol. Sending and Receiving the IP Messenger messages.

METHODS

new

    my $ipmsg = Net::IPMessenger->new(
        NickName   => $name,
        GroupName  => $group,
        UserName   => $user,
        HostName   => $host,
        ServerAddr => $server,
        Port       => $port,
        SendRetry  => $sendretry,
        BroadCast  => $broadcast,
    ) or die;

The new method creates object, sets initial variables and create socket. When this returns undef, it means you failed to create socket (i.e. port already in use). Check $! to see the error reason.

Encrypt option is automatically enabled if enough modules are found.

get_connection

    my $socket = $ipmsg->get_connection;

Returns socket object.

add_event_handler

    $ipmsg->add_event_handler( new MyEventHandler );

Adds event handler. Handler method will be invoked when you do $ipmsg->recv().

add_broadcast

    $ipmsg->add_broadcast($broadcast);

Adds broadcast address.

recv

    $ipmsg->recv;

Receives a message.

update_userlist

Updates user HASH.

parse_anslist

    $ipmsg->parse_anslist( $message, $peeraddr );

Parses an ANSLIST to the list and stores it into the user list.

send

    $ipmsg->send(
        {
            command    => $self->messagecommand('READMSG'),
            option     => $option,
            peeraddr   => $message->peeraddr,
            peerport   => $message->peerport
            packet_num => $packet_num,
        }
    );

Creates message from command, option. You can specify packet_num to send reply packet or packet_num just automatically generated. Then sends it to the peeraddr:peerport (or gets the destination from the socket).

If BROADCAST flag is set, sends broadcast packet.

NOTE. Method arguments are changed from v0.04. It used to be $ipmsg->send( $cmd, $option, $broadcast, $peeraddr, $peerport );

flush_sendings

    if ( $ipmsg->sending_packet ) {
        $ipmsg->flush_sendings;
    }

Re-sending messages in the message queue. Message will be push into the queue when you send SENDMSG with SENDCHECK flag.

It will be deleted when you receive RECVMSG which contains same packet number you sent in option field, or after tried to send sendretry time(s). You can change retry count like below.

    my $ipmsg = Net::IPMessenger->new(
        SendRetry  => 5,
    );
    # or
    $ipmsg->sendretry(5);

To access message queue, use sending_packet method.

generate_packet

    my $msg = $self->generate_packet($args);

Generates sending packet in order

messagecommand

    my $command = $ipmsg->messagecommand('SENDMSG')->set_secret;

Creates Net::IPMessenger::MessageCommand object and returns it.

get_new_packet_num

    my $packet_num = $self->get_new_packet_num;
    my $msg = sprintf "1:%s:%s:%s:%s:%s", $packet_num, $self->username,
        $self->hostname, $command, $option;

Increments packet count and returns it with current time.

my_info

    my $my_info = $self->my_info;

Returns information of yourself.

CONFIGURATION AND ENVIRONMENT

Net::IPMessenger requires no configuration files or environment variables.

DEPENDENCIES

None.

INCOMPATIBILITIES

None reported.

BUGS AND LIMITATIONS

Please report any bugs or feature requests to bug-net-ipmessenger@rt.cpan.org, or through the web interface at http://rt.cpan.org.

AUTHOR

Masanori Hara <massa.hara at gmail.com>

LICENCE AND COPYRIGHT

Copyright (c) 2010-2011, Masanori Hara <massa.hara at gmail.com>. All rights reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.

DISCLAIMER OF WARRANTY

BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION.

IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.