ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Handle.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent/Handle.pm (file contents):
Revision 1.62 by root, Fri Jun 6 10:49:20 2008 UTC vs.
Revision 1.63 by root, Fri Jun 6 11:00:32 2008 UTC

542 542
543 require JSON; 543 require JSON;
544 544
545 $self->{json} ? $self->{json}->encode ($ref) 545 $self->{json} ? $self->{json}->encode ($ref)
546 : JSON::encode_json ($ref) 546 : JSON::encode_json ($ref)
547};
548
549=item storable => $reference
550
551Freezes the given reference using L<Storable> and writes it to the
552handle. Uses the C<nfreeze> format.
553
554=cut
555
556register_write_type storable => sub {
557 my ($self, $ref) = @_;
558
559 require Storable;
560
561 pack "w/a", Storable::nfreeze ($ref)
547}; 562};
548 563
549=back 564=back
550 565
551=item AnyEvent::Handle::register_write_type type => $coderef->($handle, @args) 566=item AnyEvent::Handle::register_write_type type => $coderef->($handle, @args)
1045the C<json> write type description, above, for an actual example. 1060the C<json> write type description, above, for an actual example.
1046 1061
1047=cut 1062=cut
1048 1063
1049register_read_type json => sub { 1064register_read_type json => sub {
1050 my ($self, $cb, $accept, $reject, $skip) = @_; 1065 my ($self, $cb) = @_;
1051 1066
1052 require JSON; 1067 require JSON;
1053 1068
1054 my $data; 1069 my $data;
1055 my $rbuf = \$self->{rbuf}; 1070 my $rbuf = \$self->{rbuf};
1067 1 1082 1
1068 } else { 1083 } else {
1069 $self->{rbuf} = ""; 1084 $self->{rbuf} = "";
1070 () 1085 ()
1071 } 1086 }
1087 }
1088};
1089
1090=item storable => $cb->($handle, $ref)
1091
1092Deserialises a L<Storable> frozen representation as written by the
1093C<storable> write type (BER-encoded length prefix followed by nfreeze'd
1094data).
1095
1096Raises C<EBADMSG> error if the data could not be decoded.
1097
1098=cut
1099
1100register_read_type storable => sub {
1101 my ($self, $cb) = @_;
1102
1103 require Storable;
1104
1105 sub {
1106 # when we can use 5.10 we can use ".", but for 5.8 we use the re-pack method
1107 defined (my $len = eval { unpack "w", $_[0]->{rbuf} })
1108 or return;
1109
1110 # remove prefix
1111 substr $_[0]->{rbuf}, 0, (length pack "w", $len), "";
1112
1113 # read rest
1114 $_[0]->unshift_read (chunk => $len, sub {
1115 if (my $ref = eval { Storable::thaw ($_[1]) }) {
1116 $cb->($_[0], $ref);
1117 } else {
1118 $self->_error (&Errno::EBADMSG);
1119 }
1120 });
1072 } 1121 }
1073}; 1122};
1074 1123
1075=back 1124=back
1076 1125

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines