ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/Net-IRC3/samples/JSONConnection.pm
(Generate patch)

Comparing cvsroot/Net-IRC3/samples/JSONConnection.pm (file contents):
Revision 1.2 by elmex, Mon Dec 25 19:39:41 2006 UTC vs.
Revision 1.4 by elmex, Sun Jan 14 01:10:52 2007 UTC

140} 140}
141 141
142sub send_data { 142sub send_data {
143 my ($self, $lid, $data) = @_; 143 my ($self, $lid, $data) = @_;
144 144
145# $JSON::Syck::ImplicitUnicode = 0;
145 my $dump = JSON::Syck::Dump ($data); 146 my $dump = JSON::Syck::Dump ($data);
146 $self->write_data ($lid, (length $dump) . " " . $dump . "\015\012"); 147 $self->write_data ($lid, (length $dump) . " " . $dump . "\015\012");
147} 148}
148 149
149sub handle_data { 150sub handle_data {
152 while ($$buf =~ m/^(\s*(\d+) )(.*)$/s) { 153 while ($$buf =~ m/^(\s*(\d+) )(.*)$/s) {
153 my ($prefix, $len, $rembuf) = ($1, $2, $3); 154 my ($prefix, $len, $rembuf) = ($1, $2, $3);
154 if ((length $rembuf) >= $len) { 155 if ((length $rembuf) >= $len) {
155 my $data = substr $rembuf, 0, $len; 156 my $data = substr $rembuf, 0, $len;
156 substr $$buf, 0, (length $prefix) + (length $data), ''; 157 substr $$buf, 0, (length $prefix) + (length $data), '';
158# $JSON::Syck::ImplicitUnicode = 1;
157 $self->{packet_cb}->($self, $lid, JSON::Syck::Load ($data)); 159 $self->{packet_cb}->($self, $lid, JSON::Syck::Load ($data));
158 } else { 160 } else {
159 return 161 return
160 } 162 }
161 } 163 }
166use JSON::Syck; 168use JSON::Syck;
167 169
168sub new { 170sub new {
169 my $this = shift; 171 my $this = shift;
170 my $class = ref($this) || $this; 172 my $class = ref($this) || $this;
171 my $self = { @_, disconnect_cb => sub {} }; 173 my $self = { disconnect_cb => sub {}, @_ };
172 bless $self, $class; 174 bless $self, $class;
173 return $self; 175 return $self;
174} 176}
175 177
176sub connect { 178sub connect {
199 $self->handle_data (\$self->{read_buffer}); 201 $self->handle_data (\$self->{read_buffer});
200 202
201 unless ($l) { 203 unless ($l) {
202 if (defined $l) { 204 if (defined $l) {
203 $self->{disconnect_cb}->("EOF from json server '$host:$port'"); 205 $self->{disconnect_cb}->("EOF from json server '$host:$port'");
206 delete $self->{r};
207 delete $self->{socket};
204 return; 208 return;
205 209
206 } else { 210 } else {
207 $self->{disconnect_cb}->("Error while reading from json server '$host:$port': $!"); 211 $self->{disconnect_cb}->("Error while reading from json server '$host:$port': $!");
212 delete $self->{socket};
213 delete $self->{r};
208 return; 214 return;
209 } 215 }
210 } 216 }
211 }); 217 });
212} 218}
217 while ($$buf =~ m/^(\s*(\d+) )(.*)$/s) { 223 while ($$buf =~ m/^(\s*(\d+) )(.*)$/s) {
218 my ($prefix, $len, $rembuf) = ($1, $2, $3); 224 my ($prefix, $len, $rembuf) = ($1, $2, $3);
219 if ((length $rembuf) >= $len) { 225 if ((length $rembuf) >= $len) {
220 my $data = substr $rembuf, 0, $len; 226 my $data = substr $rembuf, 0, $len;
221 substr $$buf, 0, (length $prefix) + (length $data), ''; 227 substr $$buf, 0, (length $prefix) + (length $data), '';
228# $JSON::Syck::ImplicitUnicode = 1;
222 $self->{packet_cb}->($self, JSON::Syck::Load ($data)); 229 $self->{packet_cb}->($self, JSON::Syck::Load ($data));
223 } else { 230 } else {
224 return 231 return
225 } 232 }
226 } 233 }
227} 234}
228 235
229sub send_data { 236sub send_data {
230 my ($self, $data) = @_; 237 my ($self, $data) = @_;
238# $JSON::Syck::ImplicitUnicode = 0;
231 my $dump = JSON::Syck::Dump ($data); 239 my $dump = JSON::Syck::Dump ($data);
232 $self->write_data ((length $dump) . " " . $dump . "\015\012"); 240 $self->write_data ((length $dump) . " " . $dump . "\015\012");
233} 241}
234 242
235sub write_data { 243sub write_data {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines