Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

use strict;
use warnings FATAL => 'all';
use lib 'lib';
use Moose;
use aliased 'Javonet::Sdk::Core::PerlCommandType' => 'PerlCommandType', qw(get_command_type);
use aliased 'Javonet::Sdk::Core::RuntimeLib' => 'RuntimeLib', qw(get_runtime);
use aliased 'Javonet::Core::Handler::HandlerDictionary' => 'HandlerDictionary', qw(get_handler);
my $value_handler = ValueHandler->new();
my $load_library_handler = LoadLibraryHandler->new();
my $get_static_field_handler = GetStaticFieldHandler->new();
my $set_static_field_handler = SetStaticFieldHandler->new();
my $create_instance_handler = CreateInstanceHandler->new();
my $invoke_instance_method_handler = InvokeInstanceMethodHandler->new();
my $invoke_static_method_handler = InvokeStaticMethodHandler->new();
my $resolve_instance_handler = ResolveInstanceHandler->new();
my $get_type_handler = GetTypeHandler->new();
my $casting_handler = CastingHandler->new();
my $get_instance_field_handler = GetInstanceFieldHandler->new();
my $set_instance_field_handler = SetInstanceFieldHandler->new();
my $destruct_reference_handler = DestructReferenceHandler->new();
my $array_get_item_handler = ArrayGetItemHandler->new();
my $array_get_size_handler = ArrayGetSizeHandler->new();
my $array_get_rank_handler = ArrayGetRankHandler->new();
my $array_set_item_handler = ArraySetItemHandler->new();
my $invoke_global_function_handler = InvokeGlobalFunctionHandler->new();
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('Value'),
$value_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('LoadLibrary'),
$load_library_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('GetStaticField'),
$get_static_field_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('SetStaticField'),
$set_static_field_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('CreateClassInstance'),
$create_instance_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('InvokeInstanceMethod'),
$invoke_instance_method_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('InvokeStaticMethod'),
$invoke_static_method_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('Reference'),
$resolve_instance_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('GetType'),
$get_type_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('Cast'),
$casting_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('GetInstanceField'),
$get_instance_field_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('SetInstanceField'),
$set_instance_field_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('DestructReference'),
$destruct_reference_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('ArrayGetItem'),
$array_get_item_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('ArrayGetSize'),
$array_get_size_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('ArrayGetRank'),
$array_get_rank_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('ArraySetItem'),
$array_set_item_handler
);
Javonet::Core::Handler::HandlerDictionary::add_handler_to_dict(
Javonet::Sdk::Core::PerlCommandType::get_command_type('InvokeGlobalFunction'),
$invoke_global_function_handler
);
sub handle_command {
my ($self, $command) = @_;
my $response = Javonet::Core::Handler::HandlerDictionary::get_handler($command->{command_type})->handle_command($command);
if (!defined $response) {
return PerlCommand->new(
runtime => Javonet::Sdk::Core::RuntimeLib::get_runtime('Perl'),
command_type => Javonet::Sdk::Core::PerlCommandType::get_command_type('Value'),
payload => [ $response ]
)
}
if (ref $response eq '') {
return PerlCommand->new(
runtime => Javonet::Sdk::Core::RuntimeLib::get_runtime('Perl'),
command_type => Javonet::Sdk::Core::PerlCommandType::get_command_type('Value'),
payload => [ $response ]
)
}
# elsif (ref $response eq 'ARRAY') {
# {
# my $reference_cache = ReferencesCache->new();
# my $guid = $reference_cache->cache_reference($response);
# return PerlCommand->new(
# runtime => Javonet::Sdk::Core::RuntimeLib::get_runtime('Perl'),
# command_type => Javonet::Sdk::Core::PerlCommandType::get_command_type('Reference'),
# payload => [ $guid ]
# )
# }
# }
elsif (ref $response eq 'Javonet::Core::Exception::Exception') {
return ExceptionSerializer->serialize($response)
}
else {
my $reference_cache = ReferencesCache->new();
my $guid = $reference_cache->cache_reference($response);
return PerlCommand->new(
runtime => Javonet::Sdk::Core::RuntimeLib::get_runtime('Perl'),
command_type => Javonet::Sdk::Core::PerlCommandType::get_command_type('Reference'),
payload => [ $guid ]
)
}
}
no Moose;
1;