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

NAME

AnyEvent::PocketIO::Client - Socket.IO client

SYNOPSIS

    # This APIs will be changed.

    use AnyEvent;
    use AnyEvent::PocketIO::Client;
    
    my $client = AnyEvent::PocketIO::Client->new;    

    $client->on('message' => sub {
        print STDERR "get message : $_[1]\n";
    });

    # first handshake, then open.
    
    my $cv = AnyEvent->condvar;

    $client->handshake( $server, $port, sub {
        my ( $error, $self, $sesid, $hb_timeout, $con_timeout, $trans ) = @_;

        $client->open( 'websocket' => sub {

            $self->reg_event('foo' => sub {
                # ...
            });

            $cv->send;
        } );

    } );
    
    $cv->wait;
    
    # ... loop, timer, etc.
    
    $client->disconnect;
    
    
    #
    # OR socket.io client interface
    #

    use PocketIO::Client::IO;
    my $socket = PocketIO::Client::IO->connect("http://localhost:3000/");

    my $cv = AnyEvent->condvar;
    my $w  = AnyEvent->timer( after => 5, cb => $cv );

    $socket->on( 'message', sub {
        say $_[1];
    } );

    $socket->on( 'connect', sub {
        $socket->send('Parumon!');
        $socket->emit('hello', "perl");
    } );

    $cv->wait;

DESCRIPTION

Socket.IO client using PocketIO and AnyEvent.

This is beta version. APIs will be changed.

Currently acceptable transport id is websocket only.

METHODS

new

    $client = AnyEvent::PocketIO::Client->new( %opts )

Returns a new object. it can take the follow options

handshake_timeout
open_timeout

handshake

    $client->handshake( $host, $port, $cb );

The handshake routine. it executes a call back $cb that takes an error (if any, otherwise undef), client itself, the session id, heartbeat timeout, connection timeout and list reference of transports.

    sub {
        my ( $error, $client, $sesid, $hb_timeout, $conn_timeout, $trans ) = @_;
        if ( $error ) {
            say "code:", $error->{ code };
            say "message:", $error->{ message };
        }
        # ...        
    }

open

    $client->open( $transport_id, $cb );

After handshake success, makes a connection to the server. Currently $transport_id (case-insensitive) is websocket only.

When the connection is made, $cb is executed. $cb takes error object and client object.

    sub {
        my ( $error, $client ) = @_;

        if ( $error ) {
            say "code:", $error->{ code };
            say "message:", $error->{ message };
        }

        # ...        
    }

is_opened

    $boolean = $client->is_opend

connect

    $client->connect( $endpoint )

This method is for message type connect. If you want to make a connection to the server in real, call open method.

disconnect

    $client->disconnect( $endpoint )

Sends message type disconnect to the server and close the socket handle.

reg_event

    $client->reg_event( 'name' => $subref )

Register an event triggered by server's emit.

You should call this method after opened.

emit

    $client->emit( 'event_name', @args )

send

    $client->send( 'message' )

conn

    $conn = $client->conn; # PocketIO::Connection

on

    $client->on( 'messsage_type' => $cb );

Acceptable types are 'open', 'connect', 'disconnect', 'heartbeat' and 'message'.

tranport

    my $transport = $client->transport();

WRAPPER CLASS

Simple client module PocketIO::Client::IO.

    use PocketIO::Client::IO;
    my $socket = PocketIO::Client::IO->connect("http://localhost:3000/");

    my $cv = AnyEvent->condvar;
    my $w  = AnyEvent->timer( after => 5, cb => $cv );

    $socket->on( 'message', sub {
        say $_[1];
    } );

    $socket->on( 'connect', sub {
        $socket->send('Parumon!');
        $socket->emit('hello', "perl");
    } );

    $cv->wait;

TODO

Currently this module supports websocket only. Patches welcome!

SEE ALSO

AnyEvent, PocketIO, PcketIO::Client::IO

AUTHOR

Makamaka Hannyaharamitu, <makamaka[at]cpan.org>

COPYRIGHT AND LICENSE

Copyright 2012 by Makamaka Hannyaharamitu

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