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
'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;