Get rid of _bytelength, use encode_utf8 and length instead. Correctly check for scalar

This commit is contained in:
Michael Stapelberg 2010-03-22 21:37:44 +01:00
parent 8b2db9a238
commit 460f09915f
1 changed files with 8 additions and 11 deletions

View File

@ -7,6 +7,7 @@ use JSON::XS;
use AnyEvent::Handle; use AnyEvent::Handle;
use AnyEvent::Socket; use AnyEvent::Socket;
use AnyEvent; use AnyEvent;
use Encode;
=head1 NAME =head1 NAME
@ -76,12 +77,6 @@ my %events = (
output => ($event_mask | 1), output => ($event_mask | 1),
); );
sub _bytelength {
my ($scalar) = @_;
use bytes;
length($scalar)
}
sub i3 { sub i3 {
AnyEvent::I3->new(@_) AnyEvent::I3->new(@_)
} }
@ -172,7 +167,7 @@ sub subscribe {
my ($self, $callbacks) = @_; my ($self, $callbacks) = @_;
my $payload = encode_json [ keys %{$callbacks} ]; my $payload = encode_json [ keys %{$callbacks} ];
my $message = $magic . pack("LL", _bytelength($payload), 2) . $payload; my $message = $magic . pack("LL", length($payload), 2) . $payload;
$self->{ipchdl}->push_write($message); $self->{ipchdl}->push_write($message);
# Register callbacks for each message type # Register callbacks for each message type
@ -185,7 +180,8 @@ sub subscribe {
=head2 $i3->message($type, $content) =head2 $i3->message($type, $content)
Sends a message of the specified C<type> to i3, possibly containing the data Sends a message of the specified C<type> to i3, possibly containing the data
structure C<payload>, if specified. structure C<content> (or C<content>, encoded as utf8, if C<content> is a
scalar), if specified.
my $reply = $i3->message(TYPE_COMMAND, "reload")->recv; my $reply = $i3->message(TYPE_COMMAND, "reload")->recv;
if ($reply->{success}) { if ($reply->{success}) {
@ -200,13 +196,14 @@ sub message {
my $payload = ""; my $payload = "";
if ($content) { if ($content) {
if (ref($content) eq "SCALAR") { if (not ref($content)) {
$payload = $content; # Convert from Perls internal encoding to UTF8 octets
$payload = encode_utf8($content);
} else { } else {
$payload = encode_json $content; $payload = encode_json $content;
} }
} }
my $message = $magic . pack("LL", _bytelength($payload), $type) . $payload; my $message = $magic . pack("LL", length($payload), $type) . $payload;
$self->{ipchdl}->push_write($message); $self->{ipchdl}->push_write($message);
my $cv = AnyEvent->condvar; my $cv = AnyEvent->condvar;