File: | lib/ZMQx/Class.pm |
Coverage: | 94.8% |
line | stmt | bran | cond | sub | time | code |
---|---|---|---|---|---|---|
1 | package ZMQx::Class; | |||||
2 | 8 8 8 | 288898 13 157 | use strict; | |||
3 | 8 8 8 | 16 7 102 | use warnings; | |||
4 | 8 8 8 | 147 19 156 | use 5.010; | |||
5 | 8 8 8 | 1019 10 171 | use ZMQx::Class::Socket; | |||
6 | 8 8 8 | 23 5 343 | use Carp qw(croak); | |||
7 | ||||||
8 | our $VERSION = "0.002"; | |||||
9 | # ABSTRACT: OO Interface to ZMQ | |||||
10 | my $__CONTEXT; | |||||
11 | ||||||
12 | 8 8 8 | 38 38 337 | use ZMQ::LibZMQ3 qw(zmq_socket zmq_init); | |||
13 | 8 8 8 | 17 7 119 | use ZMQ::Constants qw(ZMQ_REQ ZMQ_REP ZMQ_DEALER ZMQ_ROUTER ZMQ_PULL ZMQ_PUSH ZMQ_PUB ZMQ_SUB ZMQ_XPUB ZMQ_XSUB ZMQ_PAIR); | |||
14 | ||||||
15 | my %types = ( | |||||
16 | 'REQ'=>ZMQ_REQ, | |||||
17 | 'REP'=>ZMQ_REP, | |||||
18 | 'DEALER'=>ZMQ_DEALER, | |||||
19 | 'ROUTER'=>ZMQ_ROUTER, | |||||
20 | 'PULL'=>ZMQ_PULL, | |||||
21 | 'PUSH'=>ZMQ_PUSH, | |||||
22 | 'PUB'=>ZMQ_PUB, | |||||
23 | 'SUB'=>ZMQ_SUB, | |||||
24 | 'XPUB'=>ZMQ_XPUB, | |||||
25 | 'XSUB'=>ZMQ_XSUB, | |||||
26 | 'PAIR'=>ZMQ_PAIR, | |||||
27 | ); | |||||
28 | ||||||
29 | sub new_context { | |||||
30 | 8 | 10 | my $class = shift; | |||
31 | 8 | 3303 | return zmq_init(); | |||
32 | } | |||||
33 | ||||||
34 | sub context { | |||||
35 | 8 | 1006159 | my $class = shift; | |||
36 | 8 | 56 | return $__CONTEXT //= $class->new_context(@_); | |||
37 | } | |||||
38 | ||||||
39 | sub socket { | |||||
40 | 52 | 58063 | my ($class, $context, $type, $connect, $address ) = @_; | |||
41 | 52 | 153 | croak "no such socket type: $type" unless defined $types{$type}; | |||
42 | 50 | 3206 | my $socket = ZMQx::Class::Socket->new( | |||
43 | socket => zmq_socket($context,$types{$type}), | |||||
44 | type => $type, | |||||
45 | ); | |||||
46 | 50 | 58652 | if ($connect && $address) { | |||
47 | 26 | 63 | if ($connect eq 'bind') { | |||
48 | 12 | 122 | $socket->bind($address); | |||
49 | } | |||||
50 | elsif ($connect eq 'connect') { | |||||
51 | 12 | 119 | $socket->connect($address); | |||
52 | } | |||||
53 | else { | |||||
54 | 2 | 34 | croak "no such connect type: $connect"; | |||
55 | } | |||||
56 | } | |||||
57 | 48 | 494 | return $socket; | |||
58 | } | |||||
59 | ||||||
60 | 1; |