… | |
… | |
135 | # we only carve out whole messages here |
135 | # we only carve out whole messages here |
136 | while ($hdl->{rbuf} =~ /\012(EndMessage|Data)\012/) { |
136 | while ($hdl->{rbuf} =~ /\012(EndMessage|Data)\012/) { |
137 | # remember end marker |
137 | # remember end marker |
138 | $rdata = $1 eq "Data" |
138 | $rdata = $1 eq "Data" |
139 | or $1 eq "EndMessage" |
139 | or $1 eq "EndMessage" |
140 | or die "protocol error, expected message end, got $1\n"; |
140 | or return $self->fatal ("protocol error, expected message end, got $1\n"); |
141 | |
141 | |
142 | my @lines = split /\012/, substr $hdl->{rbuf}, 0, $-[0]; |
142 | my @lines = split /\012/, substr $hdl->{rbuf}, 0, $-[0]; |
143 | |
143 | |
144 | substr $hdl->{rbuf}, 0, $+[0], ""; # remove pkg |
144 | substr $hdl->{rbuf}, 0, $+[0], ""; # remove pkg |
145 | |
145 | |
… | |
… | |
189 | }; |
189 | }; |
190 | |
190 | |
191 | $self->{hdl} = new AnyEvent::Handle |
191 | $self->{hdl} = new AnyEvent::Handle |
192 | connect => [$self->{host} => $self->{port}], |
192 | connect => [$self->{host} => $self->{port}], |
193 | timeout => $self->{timeout}, |
193 | timeout => $self->{timeout}, |
|
|
194 | on_read => $on_read, |
|
|
195 | on_eof => $self->{on_eof}, |
194 | on_error => sub { |
196 | on_error => sub { |
195 | warn "$self->{host}: $_[2]\n";#d# |
197 | $self->fatal ($_[2]); |
196 | exit 1; |
|
|
197 | }, |
198 | }, |
198 | on_read => $on_read, |
|
|
199 | on_eof => $self->{on_eof} || sub { }, |
|
|
200 | ; |
199 | ; |
201 | |
200 | |
202 | Scalar::Util::weaken ($self->{hdl}{fcp} = $self); |
201 | Scalar::Util::weaken ($self->{hdl}{fcp} = $self); |
203 | } |
202 | } |
204 | |
203 | |
… | |
… | |
206 | name => $self->{name}, |
205 | name => $self->{name}, |
207 | expected_version => "2.0", |
206 | expected_version => "2.0", |
208 | ); |
207 | ); |
209 | |
208 | |
210 | $self |
209 | $self |
|
|
210 | } |
|
|
211 | |
|
|
212 | sub fatal { |
|
|
213 | my ($self, $msg) = @_; |
|
|
214 | |
|
|
215 | $self->{hdl}->shutdown; |
|
|
216 | delete $self->{kw}; |
|
|
217 | |
|
|
218 | if ($self->{on_error}) { |
|
|
219 | $self->{on_error}->($msg); |
|
|
220 | } else { |
|
|
221 | die $msg; |
|
|
222 | } |
211 | } |
223 | } |
212 | |
224 | |
213 | sub identifier { |
225 | sub identifier { |
214 | $_[0]{prefix} . ++$_[0]{idseq} |
226 | $_[0]{prefix} . ++$_[0]{idseq} |
215 | } |
227 | } |