- # generate the line which may (or not) be cached
- my @out;
- if (my $ref = $thing->{class}) {
- push @out, ref $ref ? @$ref : $ref;
+ # before send (and line generation) things
+ # function must return true to make the send happen
+ $sub = "before_send_$class";
+ if ($thing->can($sub)) {
+ return $thing->$sub($dxchan);
+ }
+
+ # generate the protocol line which may (or not) be cached
+ my $ref;
+ unless ($ref = $thing->{class}) {
+ $sub = "gen_$class";
+ $ref = $thing->$sub($dxchan) if $thing->can($sub);
+ }
+ $dxchan->send(ref $ref ? @$ref : $ref) if $ref;
+
+ # after send
+ if ($thing->can('after_send_all')) {
+ $thing->after_send_all($dxchan);