Stem

 view release on metacpan or  search on metacpan

lib/Stem/Msg.pm  view on Meta::CPAN


#print "METH: $method\n" ;

# check if we can deliver there or to msg_in

	unless ( $cell->can( $method ) ) {

		return $self->dump( <<DUMP ) unless( $cell->can( 'msg_in' ) ) ;
missing message delivery methods '$method' and 'msg_in'
DUMP

		$method = 'msg_in' ;
	}

	TraceMsg "MSG to $cell $method" ;

	my @response = $cell->$method( $self ) ;

#print "RESP [@response]\n" ;

# if we get a response then return it in a message

	if ( @response && $self->{'type'} eq 'cmd' ) {

# make the response data a reference

		my $response = shift @response ;
		my $data = ( ref $response ) ? $response : \$response ;

#print $self->dump( 'CMD msg' ) ;
		my $reply_msg = $self->reply(
					'data' => $data,
		) ;

#print $reply_msg->dump( 'AUTO REPONSE' ) ;

		$reply_msg->dispatch() ;
	}

	if ( $self->{'ack_req'} ) {

		my $reply_msg = $self->reply( 'type' => 'msg_ack' ) ;

		$reply_msg->dispatch() ;
	}

	return ;
}

# dump a message for debugging

sub dump {

	my( $self, $label, $deep ) = @_ ;

	require Data::Dumper ;

	my $dump = '' ;
	$label ||= 'UNKNOWN' ;

	my( $file_name, $line_num ) = (caller)[1,2] ;

	$dump .= <<LABEL ;

>>>>
MSG Dump at Line $line_num in $file_name
$label = {
LABEL

	foreach my $type ( @addr_types ) {

		my $addr = $self->{$type} ;

		next unless $addr ;

		my $addr_text = $addr || 'NONE' ;

		$dump .= "\t$type\t=> $addr_text\n" ;
	}

	foreach my $attr ( sort keys %is_plain_attr ) {

		next unless exists $self->{$attr} ;

		my $tab = ( length $attr > 4 ) ? "" : "\t" ;

		my( $val_text, $q, $ret ) ; 

		if ( $deep || $attr eq 'data' ) {

			$val_text = Data::Dumper::Dumper( $self->{$attr} ) ;

			$val_text =~ s/^.+?=// ;
			$val_text =~ s/;\n?$// ;
			$val_text =~ s/^\s+/\t\t/gm ;
			$val_text =~ s/^\s*([{}])/\t$1/gm ;

			$q = '' ;
			$ret = "\n" ;
		}
		else {
			$val_text = $self->{$attr} ;
			$q = $val_text =~ /\D/ ? "'" : '' ;
			$ret = '' ;
		}

		$dump .= <<ATTR ;
	$attr$tab	=> $ret$q$val_text$q,
ATTR

	}

	$dump .= "}\n<<<<\n\n" ;

	return($dump) ;
}

1 ;



( run in 0.877 second using v1.01-cache-2.11-cpan-ff9377addf4 )