Mojo-APNS
view release on metacpan or search on metacpan
# use IO::Socket::SSL qw(debug3);
use Mojo::Base -strict;
use Mojo::APNS;
use Mojo::IOLoop;
use Mojo::JSON 'j';
use Data::Dumper ();
use File::Basename;
use Test::More;
my $dir = File::Spec->catdir(dirname($INC{'Mojo/IOLoop/Stream.pm'}), 'resources');
my $port = Mojo::IOLoop::Server->generate_port;
my ($err, @messages);
plan skip_all => 'Could not find Mojo cert' unless -e "$dir/server.crt";
plan skip_all => 'Could not find Mojo key' unless -e "$dir/server.key";
Mojo::IOLoop->server(
port => $port,
address => '127.0.0.1',
tls => 1,
tls_cert => "$dir/server.crt",
tls_key => "$dir/server.key",
sub {
my ($loop, $stream, $id) = @_;
$stream->on(
read => sub {
my ($stream, $buf) = @_;
while ($buf =~ s/^\0//) {
my $message = {};
$message->{pack32} = unpack 'n', substr $buf, 0, 2, '';
$message->{token} = unpack 'H*', substr $buf, 0, 32, '';
$message->{length} = unpack 'n', substr $buf, 0, 2, '';
$message->{message} = substr $buf, 0, $message->{length}, '';
$message->{json} = j delete $message->{message};
push @messages, $message;
}
Mojo::IOLoop->stop if @messages == 2;
}
);
},
);
my $apns = Mojo::APNS->new(
key => "$dir/server.key",
cert => "$dir/server.crt",
insecure => 1,
sandbox => 1,
_gateway_address => '127.0.0.1',
_gateway_port => $port,
);
$apns->on(error => sub { diag "ERROR: $_[1]"; $_[0]->ioloop->stop; });
$apns->send(
"c9d4a07c fbbc21d6 ef87a47d 53e16983 1096a5d5 faa15b75 56f59ddd a715dff4",
"tooooooooooooooooooooooooooooooooooooooooooooooooo looooooooooooooooooooooooooooong meeeeeeeeeeeeeeeeeeeeeesssssssssssssssssssssaaaaaaaaaaaaaaaaaaaaaaaaaaaage",
badge => 2000000000000000,
other => 'stuff',
also => 'takes up',
( run in 2.283 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )