hypertube-binaries 3.0.2 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/Binaries/Clr/Hypertube.Clr.Utils.dll +0 -0
  2. package/Binaries/Clr/HypertubeClrRuntime.dll +0 -0
  3. package/Binaries/Jvm/HypertubeJvmRuntime.jar +0 -0
  4. package/Binaries/Native/Linux/ARM64/NetVersionLatest.runtimeconfig.json +2 -2
  5. package/Binaries/Native/Linux/{X64/_HypertubeNativeErrorLogger_2026-04-17.txt → ARM64/_HypertubeNativeErrorLogger_2026-05-05.txt} +1 -1
  6. package/Binaries/Native/Linux/ARM64/libHypertubeActivationService.so +0 -0
  7. package/Binaries/Native/Linux/ARM64/libHypertubeNetcoreRuntimeNative.so +0 -0
  8. package/Binaries/Native/Linux/ARM64/libUtils.so +0 -0
  9. package/Binaries/Native/Linux/ARM64/version.txt +1 -1
  10. package/Binaries/Native/Linux/X64/NetVersionLatest.runtimeconfig.json +2 -2
  11. package/Binaries/Native/Linux/{ARM64/_HypertubeNativeErrorLogger_2026-04-17.txt → X64/_HypertubeNativeErrorLogger_2026-05-05.txt} +1 -1
  12. package/Binaries/Native/Linux/X64/libHypertubeActivationService.so +0 -0
  13. package/Binaries/Native/Linux/X64/libHypertubeNetcoreRuntimeNative.so +0 -0
  14. package/Binaries/Native/Linux/X64/libHypertubeNodejs2218RuntimeNative.so +0 -0
  15. package/Binaries/Native/Linux/X64/libUtils.so +0 -0
  16. package/Binaries/Native/Linux/X64/version.txt +1 -1
  17. package/Binaries/Native/MacOs/ARM64/NetVersionLatest.runtimeconfig.json +2 -2
  18. package/Binaries/Native/MacOs/ARM64/_HypertubeNativeErrorLogger_2026-05-05.txt +2 -0
  19. package/Binaries/Native/MacOs/ARM64/libHypertubeActivationService.dylib +0 -0
  20. package/Binaries/Native/MacOs/ARM64/libHypertubeNetcoreRuntimeNative.dylib +0 -0
  21. package/Binaries/Native/MacOs/ARM64/libHypertubeNodejs2218RuntimeNative.dylib +0 -0
  22. package/Binaries/Native/MacOs/ARM64/libUtils.dylib +0 -0
  23. package/Binaries/Native/MacOs/ARM64/version.txt +1 -1
  24. package/Binaries/Native/MacOs/X64/NetVersionLatest.runtimeconfig.json +2 -2
  25. package/Binaries/Native/MacOs/X64/{_HypertubeNativeErrorLogger_2026-04-17.txt → _HypertubeNativeErrorLogger_2026-05-05.txt} +1 -1
  26. package/Binaries/Native/MacOs/X64/libHypertubeActivationService.dylib +0 -0
  27. package/Binaries/Native/MacOs/X64/libHypertubeNetcoreRuntimeNative.dylib +0 -0
  28. package/Binaries/Native/MacOs/X64/libHypertubeNodejs2218RuntimeNative.dylib +0 -0
  29. package/Binaries/Native/MacOs/X64/libUtils.dylib +0 -0
  30. package/Binaries/Native/MacOs/X64/version.txt +1 -1
  31. package/Binaries/Native/Windows/ARM64/Configs.dll +0 -0
  32. package/Binaries/Native/Windows/ARM64/HypertubeActivationService.dll +0 -0
  33. package/Binaries/Native/Windows/ARM64/HypertubeCppRuntimeNative.dll +0 -0
  34. package/Binaries/Native/Windows/ARM64/HypertubeGoRuntimeNative.dll +0 -0
  35. package/Binaries/Native/Windows/ARM64/HypertubeJvmRuntimeNative.dll +0 -0
  36. package/Binaries/Native/Windows/ARM64/HypertubeNetcoreRuntimeNative.dll +0 -0
  37. package/Binaries/Native/Windows/ARM64/HypertubePhpRuntimeNative.dll +0 -0
  38. package/Binaries/Native/Windows/ARM64/HypertubePythonRuntimeNative.dll +0 -0
  39. package/Binaries/Native/Windows/ARM64/HypertubeRubyRuntimeNative.dll +0 -0
  40. package/Binaries/Native/Windows/ARM64/HypertubeTcpClient.dll +0 -0
  41. package/Binaries/Native/Windows/ARM64/HypertubeTcpTlsClient.dll +0 -0
  42. package/Binaries/Native/Windows/ARM64/NetVersionLatest.runtimeconfig.json +2 -2
  43. package/Binaries/Native/Windows/ARM64/Utils.dll +0 -0
  44. package/Binaries/Native/Windows/ARM64/_HypertubeNativeErrorLogger_2026-05-05.txt +2 -0
  45. package/Binaries/Native/Windows/ARM64/version.txt +0 -0
  46. package/Binaries/Native/Windows/X64/Configs.dll +0 -0
  47. package/Binaries/Native/Windows/X64/HypertubeActivationService.dll +0 -0
  48. package/Binaries/Native/Windows/X64/HypertubeClrRuntimeNative.dll +0 -0
  49. package/Binaries/Native/Windows/X64/HypertubeCppRuntimeNative.dll +0 -0
  50. package/Binaries/Native/Windows/X64/HypertubeGoRuntimeNative.dll +0 -0
  51. package/Binaries/Native/Windows/X64/HypertubeJvmRuntimeNative.dll +0 -0
  52. package/Binaries/Native/Windows/X64/HypertubeNetcoreRuntimeNative.dll +0 -0
  53. package/Binaries/Native/Windows/X64/HypertubeNodejs2218RuntimeNative.dll +0 -0
  54. package/Binaries/Native/Windows/X64/HypertubeNodejsRuntimeNative.dll +0 -0
  55. package/Binaries/Native/Windows/X64/HypertubePhp848RuntimeNative.dll +0 -0
  56. package/Binaries/Native/Windows/X64/HypertubePhpRuntimeNative.dll +0 -0
  57. package/Binaries/Native/Windows/X64/HypertubePythonRuntimeNative.dll +0 -0
  58. package/Binaries/Native/Windows/X64/HypertubeRubyRuntimeNative.dll +0 -0
  59. package/Binaries/Native/Windows/X64/HypertubeTcpClient.dll +0 -0
  60. package/Binaries/Native/Windows/X64/HypertubeTcpTlsClient.dll +0 -0
  61. package/Binaries/Native/Windows/X64/NetVersionLatest.runtimeconfig.json +2 -2
  62. package/Binaries/Native/Windows/X64/Utils.dll +0 -0
  63. package/Binaries/Native/Windows/X64/_HypertubeNativeErrorLogger_2026-05-05.txt +2 -0
  64. package/Binaries/Native/Windows/X64/version.txt +1 -1
  65. package/Binaries/Netcore/Hypertube.Netcore.Core.dll +0 -0
  66. package/Binaries/Netcore/Hypertube.Netcore.Plugins.dll +0 -0
  67. package/Binaries/Netcore/Hypertube.Netcore.Utils.dll +0 -0
  68. package/Binaries/Php/hypertube/core/delegatecache/DelegatesCache.php +62 -62
  69. package/Binaries/Php/hypertube/core/handler/AbstractHandler.php +61 -61
  70. package/Binaries/Php/hypertube/core/handler/AddEventListenerHandler.php +16 -16
  71. package/Binaries/Php/hypertube/core/handler/ArrayGetItemHandler.php +57 -57
  72. package/Binaries/Php/hypertube/core/handler/ArrayGetRankHandler.php +50 -50
  73. package/Binaries/Php/hypertube/core/handler/ArrayGetSizeHandler.php +59 -59
  74. package/Binaries/Php/hypertube/core/handler/ArrayHandler.php +26 -26
  75. package/Binaries/Php/hypertube/core/handler/ArrayReferenceHandler.php +16 -16
  76. package/Binaries/Php/hypertube/core/handler/ArraySetItemHandler.php +87 -87
  77. package/Binaries/Php/hypertube/core/handler/AsDtoHandler.php +18 -18
  78. package/Binaries/Php/hypertube/core/handler/AsKwargsHandler.php +19 -19
  79. package/Binaries/Php/hypertube/core/handler/AsOutHandler.php +19 -19
  80. package/Binaries/Php/hypertube/core/handler/AsRefHandler.php +20 -20
  81. package/Binaries/Php/hypertube/core/handler/CastHandler.php +93 -93
  82. package/Binaries/Php/hypertube/core/handler/ContextMetadataHandler.php +20 -0
  83. package/Binaries/Php/hypertube/core/handler/ConvertTypeHandler.php +20 -20
  84. package/Binaries/Php/hypertube/core/handler/CreateInstanceHandler.php +98 -98
  85. package/Binaries/Php/hypertube/core/handler/CreateNullHandler.php +16 -16
  86. package/Binaries/Php/hypertube/core/handler/DestructReferenceHandler.php +29 -29
  87. package/Binaries/Php/hypertube/core/handler/DtoPropertyHandler.php +18 -18
  88. package/Binaries/Php/hypertube/core/handler/EnableNamespaceHandler.php +36 -36
  89. package/Binaries/Php/hypertube/core/handler/EnableTypeHandler.php +33 -33
  90. package/Binaries/Php/hypertube/core/handler/ExceptionHandler.php +16 -16
  91. package/Binaries/Php/hypertube/core/handler/GenerateLibHandler.php +16 -16
  92. package/Binaries/Php/hypertube/core/handler/GetAsyncOperationResultHandler.php +16 -16
  93. package/Binaries/Php/hypertube/core/handler/GetEnumItemHandler.php +16 -16
  94. package/Binaries/Php/hypertube/core/handler/GetEnumNameHandler.php +16 -16
  95. package/Binaries/Php/hypertube/core/handler/GetEnumValueHandler.php +16 -16
  96. package/Binaries/Php/hypertube/core/handler/GetGlobalFieldHandler.php +16 -16
  97. package/Binaries/Php/hypertube/core/handler/GetInstanceFieldHandler.php +55 -55
  98. package/Binaries/Php/hypertube/core/handler/GetInstanceMethodAsDelegateHandler.php +52 -52
  99. package/Binaries/Php/hypertube/core/handler/GetModuleHandler.php +15 -15
  100. package/Binaries/Php/hypertube/core/handler/GetRefValueHandler.php +16 -16
  101. package/Binaries/Php/hypertube/core/handler/GetResultTypeHandler.php +16 -16
  102. package/Binaries/Php/hypertube/core/handler/GetStaticFieldHandler.php +81 -81
  103. package/Binaries/Php/hypertube/core/handler/GetStaticMethodAsDelegateHandler.php +109 -109
  104. package/Binaries/Php/hypertube/core/handler/GetTypeHandler.php +146 -146
  105. package/Binaries/Php/hypertube/core/handler/Handler.php +176 -175
  106. package/Binaries/Php/hypertube/core/handler/HeartBeatHandler.php +20 -20
  107. package/Binaries/Php/hypertube/core/handler/InvokeDelegateHandler.php +27 -27
  108. package/Binaries/Php/hypertube/core/handler/InvokeGenericMethodHandler.php +47 -47
  109. package/Binaries/Php/hypertube/core/handler/InvokeGenericStaticMethodHandler.php +111 -111
  110. package/Binaries/Php/hypertube/core/handler/InvokeGlobalFunctionHandler.php +48 -48
  111. package/Binaries/Php/hypertube/core/handler/InvokeInstanceMethodHandler.php +78 -78
  112. package/Binaries/Php/hypertube/core/handler/InvokeStaticMethodHandler.php +95 -95
  113. package/Binaries/Php/hypertube/core/handler/LoadLibraryHandler.php +360 -360
  114. package/Binaries/Php/hypertube/core/handler/OptimizeHandler.php +16 -16
  115. package/Binaries/Php/hypertube/core/handler/PassByValueHandler.php +103 -103
  116. package/Binaries/Php/hypertube/core/handler/PassDelegateHandler.php +58 -58
  117. package/Binaries/Php/hypertube/core/handler/PluginWrapperHandler.php +15 -15
  118. package/Binaries/Php/hypertube/core/handler/ProjectResultAsDtoHandler.php +68 -68
  119. package/Binaries/Php/hypertube/core/handler/RegisterForUpdateHandler.php +65 -65
  120. package/Binaries/Php/hypertube/core/handler/ResolveInstanceHandler.php +27 -27
  121. package/Binaries/Php/hypertube/core/handler/RetrieveArrayHandler.php +48 -48
  122. package/Binaries/Php/hypertube/core/handler/SetInstanceFieldHandler.php +54 -54
  123. package/Binaries/Php/hypertube/core/handler/SetStaticFieldHandler.php +56 -56
  124. package/Binaries/Php/hypertube/core/handler/ValueForUpdateHandler.php +20 -20
  125. package/Binaries/Php/hypertube/core/handler/ValueHandler.php +18 -18
  126. package/Binaries/Php/hypertube/core/handler/loadLibrary/ClasspathScanner.php +66 -66
  127. package/Binaries/Php/hypertube/core/http2Client/Http2Client.php +50 -0
  128. package/Binaries/Php/hypertube/core/interpreter/Interpreter.php +126 -123
  129. package/Binaries/Php/hypertube/core/namespacescache/NamespacesCache.php +88 -88
  130. package/Binaries/Php/hypertube/core/protocol/CommandDeserializer.php +337 -337
  131. package/Binaries/Php/hypertube/core/protocol/CommandSerializer.php +112 -112
  132. package/Binaries/Php/hypertube/core/protocol/TypeDeserializer.php +102 -102
  133. package/Binaries/Php/hypertube/core/protocol/TypeSerializer.php +188 -188
  134. package/Binaries/Php/hypertube/core/receiver/Receiver.php +45 -45
  135. package/Binaries/Php/hypertube/core/referencecache/ReferencesCache.php +68 -68
  136. package/Binaries/Php/hypertube/core/transmitter/Transmitter.php +47 -47
  137. package/Binaries/Php/hypertube/core/transmitter/TransmitterWrapper.php +181 -181
  138. package/Binaries/Php/hypertube/core/typescache/TypesCache.php +60 -60
  139. package/Binaries/Php/hypertube/core/webSocketClient/WebSocketClient.php +626 -620
  140. package/Binaries/Php/hypertube/utils/ArrayWrapper.php +122 -122
  141. package/Binaries/Php/hypertube/utils/Command.php +265 -265
  142. package/Binaries/Php/hypertube/utils/CommandInterface.php +23 -23
  143. package/Binaries/Php/hypertube/utils/DynamicMethodFactory.php +93 -93
  144. package/Binaries/Php/hypertube/utils/Enum.php +87 -87
  145. package/Binaries/Php/hypertube/utils/ExceptionSerializer.php +81 -81
  146. package/Binaries/Php/hypertube/utils/RuntimeLogger.php +44 -44
  147. package/Binaries/Php/hypertube/utils/RuntimeName.php +21 -21
  148. package/Binaries/Php/hypertube/utils/RuntimeNameHandler.php +72 -72
  149. package/Binaries/Php/hypertube/utils/StringEncodingMode.php +12 -12
  150. package/Binaries/Php/hypertube/utils/TypesHandler.php +47 -47
  151. package/Binaries/Php/hypertube/utils/Uri.php +138 -138
  152. package/Binaries/Php/hypertube/utils/UtilsArray.php +16 -16
  153. package/Binaries/Php/hypertube/utils/UtilsConst.php +75 -75
  154. package/Binaries/Php/hypertube/utils/UtilsSimpleType.php +48 -48
  155. package/Binaries/Php/hypertube/utils/Uuid.php +47 -47
  156. package/Binaries/Php/hypertube/utils/connectiondata/ConnectionData.php +84 -0
  157. package/Binaries/Php/hypertube/utils/connectiondata/Http2ConnectionData.php +43 -0
  158. package/Binaries/Php/hypertube/utils/connectiondata/IConnectionData.php +19 -15
  159. package/Binaries/Php/hypertube/utils/connectiondata/InMemoryConnectionData.php +25 -35
  160. package/Binaries/Php/hypertube/utils/connectiondata/TcpConnectionData.php +68 -77
  161. package/Binaries/Php/hypertube/utils/connectiondata/WsConnectionData.php +43 -43
  162. package/Binaries/Php/hypertube/utils/error/UnsupportedPayloadItemTypeError.php +19 -19
  163. package/Binaries/Php/hypertube/utils/exception/BadMethodCallException.php +14 -14
  164. package/Binaries/Php/hypertube/utils/exception/DelegateNotFoundException.php +14 -14
  165. package/Binaries/Php/hypertube/utils/exception/ExceptionThrower.php +121 -121
  166. package/Binaries/Php/hypertube/utils/exception/FieldNotFoundInClassException.php +41 -41
  167. package/Binaries/Php/hypertube/utils/exception/HypertubeArgumentsMismatchException.php +17 -17
  168. package/Binaries/Php/hypertube/utils/exception/InvalidUriException.php +14 -14
  169. package/Binaries/Php/hypertube/utils/exception/SingletonUnserializeException.php +15 -15
  170. package/Binaries/Php/hypertube/utils/exception/TypeByteNotSupportedException.php +14 -14
  171. package/Binaries/Php/hypertube/utils/exception/TypeNotSupportedException.php +16 -16
  172. package/Binaries/Php/hypertube/utils/exception/TypeSerializationNotSupportedException.php +18 -18
  173. package/Binaries/Php/hypertube/utils/exception/UnsupportedOperationException.php +10 -10
  174. package/Binaries/Php/hypertube/utils/exception/enum/EnumNameNotFoundException.php +15 -15
  175. package/Binaries/Php/hypertube/utils/exception/enum/InvalidEnumValueException.php +15 -15
  176. package/Binaries/Php/hypertube/utils/messagehelper/MessageHelper.php +102 -102
  177. package/Binaries/Php/hypertube/utils/type/CommandType.php +67 -66
  178. package/Binaries/Php/hypertube/utils/type/ConnectionType.php +15 -14
  179. package/Binaries/Php/hypertube/utils/type/ExceptionType.php +45 -45
  180. package/Binaries/Php/hypertube/utils/type/JType.php +24 -24
  181. package/Binaries/Php/hypertube/utils/type/SizeType.php +22 -22
  182. package/Binaries/Python/hypertube/core/handler/ContextMetadataHandler.py +7 -0
  183. package/Binaries/Python/hypertube/core/handler/Handler.py +2 -0
  184. package/Binaries/Python/hypertube/core/http2Client/Http2Client.py +332 -0
  185. package/Binaries/Python/hypertube/core/interpreter/Interpreter.py +4 -1
  186. package/Binaries/Python/hypertube/core/webSocketClient/WebSocketClient.py +81 -25
  187. package/Binaries/Python/hypertube/utils/CommandType.py +2 -1
  188. package/Binaries/Python/hypertube/utils/ConnectionType.py +1 -0
  189. package/Binaries/Python/hypertube/utils/connectionData/Http2ConnectionData.py +36 -0
  190. package/Binaries/Python/hypertube/utils/connectionData/IConnectionData.py +38 -0
  191. package/Binaries/Python/hypertube/utils/connectionData/InMemoryConnectionData.py +4 -12
  192. package/Binaries/Python/hypertube/utils/connectionData/TcpConnectionData.py +4 -15
  193. package/Binaries/Python/hypertube/utils/connectionData/WsConnectionData.py +14 -12
  194. package/Binaries/Python/hypertube/utils/messageHelper/MessageHelper.py +20 -15
  195. package/Binaries/Ruby/core/handler/context_metadata_handler.rb +11 -0
  196. package/Binaries/Ruby/core/handler/handler.rb +3 -0
  197. package/Binaries/Ruby/core/http2_client/http2_client.rb +69 -0
  198. package/Binaries/Ruby/core/interpreter/interpreter.rb +7 -4
  199. package/Binaries/Ruby/core/web_socket_client/web_socket_client.rb +41 -25
  200. package/Binaries/Ruby/utils/command_type.rb +3 -0
  201. package/Binaries/Ruby/utils/connection_type.rb +1 -0
  202. package/Binaries/Ruby/utils/http2_connection_data.rb +59 -0
  203. package/Binaries/Ruby/utils/tcp_connection_data.rb +38 -6
  204. package/Binaries/Ruby/utils/ws_connection_data.rb +40 -6
  205. package/Binaries/version.txt +1 -1
  206. package/package.json +1 -1
  207. package/prebuilds/prebuilds-darwin-arm64/HypertubeNodejsRuntimeAddon.node +0 -0
  208. package/prebuilds/prebuilds-darwin-x64/HypertubeNodejsRuntimeAddon.node +0 -0
  209. package/prebuilds/prebuilds-win32-arm64/HypertubeNodejsRuntimeAddon.node +0 -0
  210. package/prebuilds/prebuilds-win32-x64/HypertubeNodejsRuntimeAddon.node +0 -0
  211. package/Binaries/Native/Linux/ARM64/NetVersion31LatestPatch.runtimeconfig.json +0 -10
  212. package/Binaries/Native/Linux/ARM64/NetVersion60LatestPatch.runtimeconfig.json +0 -10
  213. package/Binaries/Native/Linux/ARM64/NetVersion70LatestPatch.runtimeconfig.json +0 -10
  214. package/Binaries/Native/Linux/X64/NetVersion31LatestPatch.runtimeconfig.json +0 -10
  215. package/Binaries/Native/Linux/X64/NetVersion60LatestPatch.runtimeconfig.json +0 -10
  216. package/Binaries/Native/Linux/X64/NetVersion70LatestPatch.runtimeconfig.json +0 -10
  217. package/Binaries/Native/MacOs/ARM64/NetVersion31LatestPatch.runtimeconfig.json +0 -10
  218. package/Binaries/Native/MacOs/ARM64/NetVersion60LatestPatch.runtimeconfig.json +0 -10
  219. package/Binaries/Native/MacOs/ARM64/NetVersion70LatestPatch.runtimeconfig.json +0 -10
  220. package/Binaries/Native/MacOs/ARM64/_HypertubeNativeErrorLogger_2026-04-17.txt +0 -2
  221. package/Binaries/Native/MacOs/X64/NetVersion31LatestPatch.runtimeconfig.json +0 -10
  222. package/Binaries/Native/MacOs/X64/NetVersion60LatestPatch.runtimeconfig.json +0 -10
  223. package/Binaries/Native/MacOs/X64/NetVersion70LatestPatch.runtimeconfig.json +0 -10
  224. package/Binaries/Native/Windows/ARM64/NetVersion31LatestPatch.runtimeconfig.json +0 -10
  225. package/Binaries/Native/Windows/ARM64/NetVersion60LatestPatch.runtimeconfig.json +0 -10
  226. package/Binaries/Native/Windows/ARM64/NetVersion70LatestPatch.runtimeconfig.json +0 -10
  227. package/Binaries/Native/Windows/ARM64/_HypertubeNativeErrorLogger_2026-04-17.txt +0 -2
  228. package/Binaries/Native/Windows/X64/NetVersion31LatestPatch.runtimeconfig.json +0 -10
  229. package/Binaries/Native/Windows/X64/NetVersion60LatestPatch.runtimeconfig.json +0 -10
  230. package/Binaries/Native/Windows/X64/NetVersion70LatestPatch.runtimeconfig.json +0 -10
  231. package/Binaries/Native/Windows/X64/_HypertubeNativeErrorLogger_2026-04-17.txt +0 -2
@@ -1,146 +1,146 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace core\handler;
6
-
7
- use core\handler\loadLibrary\ClasspathScanner;
8
- use core\namespacescache\NamespacesCache;
9
- use core\typescache\TypesCache;
10
- use Exception;
11
- use ReflectionClass;
12
- use utils\CommandInterface;
13
-
14
- final class GetTypeHandler extends AbstractHandler
15
- {
16
- private const REQUIRED_ARGUMENTS_COUNT = 1;
17
- private array $primitiveTypeMap;
18
-
19
- public function __construct()
20
- {
21
- $this->primitiveTypeMap = [
22
- 'boolean' => 'bool',
23
- 'bool' => 'bool',
24
- 'integer' => 'int',
25
- 'int' => 'int',
26
- 'double' => 'float',
27
- 'float' => 'float',
28
- 'string' => 'string',
29
- 'array' => 'array',
30
- 'object' => 'object',
31
- 'resource' => 'resource',
32
- 'null' => 'null'
33
- ];
34
- }
35
-
36
- public function process(CommandInterface $command)
37
- {
38
- $this->validate($command, self::REQUIRED_ARGUMENTS_COUNT, self::class);
39
-
40
- $typeName = $this->getTypeName($command);
41
-
42
- if (array_key_exists($typeName, $this->primitiveTypeMap)) {
43
- $typeToReturn = $this->primitiveTypeMap[$typeName];
44
- } else {
45
- try {
46
- if (class_exists($typeName)) {
47
- $typeToReturn = new ReflectionClass($typeName);
48
- } else {
49
- if (class_exists($typeName)) {
50
- $typeToReturn = new ReflectionClass($typeName);
51
- } else {
52
- throw new Exception('Class not found: ' . $typeName);
53
- }
54
- }
55
- } catch (Exception $ex) {
56
- $loadedLibraries = LoadLibraryHandler::getLoadedLibraries();
57
- $loadedClasses = [];
58
-
59
- foreach ($loadedLibraries as $library) {
60
- if (substr($library, -4) === '.php' || substr($library, -5) === '.phar') {
61
- $scanner = new ClasspathScanner();
62
- $loadedClasses = array_merge(
63
- $loadedClasses,
64
- $scanner->getClassesFromFile($library)
65
- );
66
- }
67
- }
68
-
69
- $availableClasses = implode(PHP_EOL, $loadedClasses) .
70
- implode(PHP_EOL, get_declared_classes());
71
-
72
- $includePath = get_include_path();
73
-
74
- throw new Exception(sprintf(
75
- 'Type: %s not found in include path' . PHP_EOL
76
- . 'Load all libraries at the beginning of your application' . PHP_EOL
77
- . 'Exception: %s' . PHP_EOL
78
- . 'PHP include path: %s' . PHP_EOL
79
- . 'Available classes loaded by user: %s' . PHP_EOL,
80
- $typeName,
81
- $ex->getMessage(),
82
- $includePath,
83
- $availableClasses
84
- ));
85
- }
86
- }
87
-
88
- if ($command->getPayloadSize() > 1) {
89
- $parentClass = $command->getPayload()[1];
90
- if ($typeToReturn instanceof ReflectionClass && $parentClass instanceof ReflectionClass) {
91
- if (!$typeToReturn->isSubclassOf($parentClass->getName())) {
92
- throw new Exception(sprintf(
93
- 'Class %s is not a subclass of %s',
94
- $typeToReturn->getName(),
95
- $parentClass->getName()
96
- ));
97
- }
98
- }
99
- }
100
-
101
- $namespaceCache = NamespacesCache::getInstance();
102
- $typeCache = TypesCache::getInstance();
103
-
104
- $typeName = $typeToReturn instanceof ReflectionClass ? $typeToReturn->getName() : (string) $typeToReturn;
105
-
106
- $isAllowed = ($namespaceCache->isNamespaceCacheEmpty() && $typeCache->isTypeCacheEmpty())
107
- || ($typeToReturn instanceof ReflectionClass && $namespaceCache->isTypeAllowed($typeToReturn))
108
- || $typeCache->isTypeAllowed($typeName);
109
-
110
- if (!$isAllowed) {
111
- $allowedNamespaces = implode(', ', $namespaceCache->getCachedNamespaces());
112
- $allowedTypes = implode(', ', $typeCache->getTypeCache());
113
-
114
- $typeName = $typeToReturn instanceof ReflectionClass
115
- ? $typeToReturn->getName()
116
- : (string) $typeToReturn;
117
-
118
- throw new Exception(sprintf(
119
- 'Type %s not allowed. Allowed namespaces: %s. Allowed types: %s',
120
- $typeName,
121
- $allowedNamespaces,
122
- $allowedTypes
123
- ));
124
- }
125
-
126
- return $typeToReturn;
127
- }
128
-
129
- private function getTypeName(CommandInterface $command): string
130
- {
131
- $payload = $command->getPayload()[0];
132
- if (is_string($payload)) {
133
- return $payload;
134
- }
135
-
136
- if ($payload instanceof ReflectionClass) {
137
- return $payload->getName();
138
- }
139
-
140
- if (is_object($payload)) {
141
- return get_class($payload);
142
- }
143
-
144
- return gettype($payload);
145
- }
146
- }
1
+ <?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ namespace core\handler;
6
+
7
+ use core\handler\loadLibrary\ClasspathScanner;
8
+ use core\namespacescache\NamespacesCache;
9
+ use core\typescache\TypesCache;
10
+ use Exception;
11
+ use ReflectionClass;
12
+ use utils\CommandInterface;
13
+
14
+ final class GetTypeHandler extends AbstractHandler
15
+ {
16
+ private const REQUIRED_ARGUMENTS_COUNT = 1;
17
+ private array $primitiveTypeMap;
18
+
19
+ public function __construct()
20
+ {
21
+ $this->primitiveTypeMap = [
22
+ 'boolean' => 'bool',
23
+ 'bool' => 'bool',
24
+ 'integer' => 'int',
25
+ 'int' => 'int',
26
+ 'double' => 'float',
27
+ 'float' => 'float',
28
+ 'string' => 'string',
29
+ 'array' => 'array',
30
+ 'object' => 'object',
31
+ 'resource' => 'resource',
32
+ 'null' => 'null'
33
+ ];
34
+ }
35
+
36
+ public function process(CommandInterface $command)
37
+ {
38
+ $this->validate($command, self::REQUIRED_ARGUMENTS_COUNT, self::class);
39
+
40
+ $typeName = $this->getTypeName($command);
41
+
42
+ if (array_key_exists($typeName, $this->primitiveTypeMap)) {
43
+ $typeToReturn = $this->primitiveTypeMap[$typeName];
44
+ } else {
45
+ try {
46
+ if (class_exists($typeName)) {
47
+ $typeToReturn = new ReflectionClass($typeName);
48
+ } else {
49
+ if (class_exists($typeName)) {
50
+ $typeToReturn = new ReflectionClass($typeName);
51
+ } else {
52
+ throw new Exception('Class not found: ' . $typeName);
53
+ }
54
+ }
55
+ } catch (Exception $ex) {
56
+ $loadedLibraries = LoadLibraryHandler::getLoadedLibraries();
57
+ $loadedClasses = [];
58
+
59
+ foreach ($loadedLibraries as $library) {
60
+ if (substr($library, -4) === '.php' || substr($library, -5) === '.phar') {
61
+ $scanner = new ClasspathScanner();
62
+ $loadedClasses = array_merge(
63
+ $loadedClasses,
64
+ $scanner->getClassesFromFile($library)
65
+ );
66
+ }
67
+ }
68
+
69
+ $availableClasses = implode(PHP_EOL, $loadedClasses) .
70
+ implode(PHP_EOL, get_declared_classes());
71
+
72
+ $includePath = get_include_path();
73
+
74
+ throw new Exception(sprintf(
75
+ 'Type: %s not found in include path' . PHP_EOL
76
+ . 'Load all libraries at the beginning of your application' . PHP_EOL
77
+ . 'Exception: %s' . PHP_EOL
78
+ . 'PHP include path: %s' . PHP_EOL
79
+ . 'Available classes loaded by user: %s' . PHP_EOL,
80
+ $typeName,
81
+ $ex->getMessage(),
82
+ $includePath,
83
+ $availableClasses
84
+ ));
85
+ }
86
+ }
87
+
88
+ if ($command->getPayloadSize() > 1) {
89
+ $parentClass = $command->getPayload()[1];
90
+ if ($typeToReturn instanceof ReflectionClass && $parentClass instanceof ReflectionClass) {
91
+ if (!$typeToReturn->isSubclassOf($parentClass->getName())) {
92
+ throw new Exception(sprintf(
93
+ 'Class %s is not a subclass of %s',
94
+ $typeToReturn->getName(),
95
+ $parentClass->getName()
96
+ ));
97
+ }
98
+ }
99
+ }
100
+
101
+ $namespaceCache = NamespacesCache::getInstance();
102
+ $typeCache = TypesCache::getInstance();
103
+
104
+ $typeName = $typeToReturn instanceof ReflectionClass ? $typeToReturn->getName() : (string) $typeToReturn;
105
+
106
+ $isAllowed = ($namespaceCache->isNamespaceCacheEmpty() && $typeCache->isTypeCacheEmpty())
107
+ || ($typeToReturn instanceof ReflectionClass && $namespaceCache->isTypeAllowed($typeToReturn))
108
+ || $typeCache->isTypeAllowed($typeName);
109
+
110
+ if (!$isAllowed) {
111
+ $allowedNamespaces = implode(', ', $namespaceCache->getCachedNamespaces());
112
+ $allowedTypes = implode(', ', $typeCache->getTypeCache());
113
+
114
+ $typeName = $typeToReturn instanceof ReflectionClass
115
+ ? $typeToReturn->getName()
116
+ : (string) $typeToReturn;
117
+
118
+ throw new Exception(sprintf(
119
+ 'Type %s not allowed. Allowed namespaces: %s. Allowed types: %s',
120
+ $typeName,
121
+ $allowedNamespaces,
122
+ $allowedTypes
123
+ ));
124
+ }
125
+
126
+ return $typeToReturn;
127
+ }
128
+
129
+ private function getTypeName(CommandInterface $command): string
130
+ {
131
+ $payload = $command->getPayload()[0];
132
+ if (is_string($payload)) {
133
+ return $payload;
134
+ }
135
+
136
+ if ($payload instanceof ReflectionClass) {
137
+ return $payload->getName();
138
+ }
139
+
140
+ if (is_object($payload)) {
141
+ return get_class($payload);
142
+ }
143
+
144
+ return gettype($payload);
145
+ }
146
+ }
@@ -1,175 +1,176 @@
1
- <?php
2
-
3
- declare(strict_types=1);
4
-
5
- namespace core\handler;
6
-
7
- use core\referencecache\ReferencesCache;
8
- use Throwable;
9
- use utils\Command;
10
- use utils\CommandInterface;
11
- use utils\ExceptionSerializer;
12
- use utils\RuntimeName;
13
- use utils\type\CommandType;
14
- use utils\TypesHandler;
15
- use utils\ArrayWrapper;
16
-
17
- final class Handler
18
- {
19
- private static array $handlers = [];
20
-
21
- private function __construct()
22
- {
23
- }
24
-
25
- private static function initializeHandlers(): void
26
- {
27
- if (!empty(self::$handlers)) {
28
- return;
29
- }
30
-
31
- self::$handlers[CommandType::VALUE()->getValue()] = new ValueHandler();
32
- self::$handlers[CommandType::LOAD_LIBRARY()->getValue()] = new LoadLibraryHandler();
33
- self::$handlers[CommandType::INVOKE_STATIC_METHOD()->getValue()] = new InvokeStaticMethodHandler();
34
- self::$handlers[CommandType::GET_STATIC_FIELD()->getValue()] = new GetStaticFieldHandler();
35
- self::$handlers[CommandType::SET_STATIC_FIELD()->getValue()] = new SetStaticFieldHandler();
36
- self::$handlers[CommandType::CREATE_INSTANCE()->getValue()] = new CreateInstanceHandler();
37
- self::$handlers[CommandType::GET_TYPE()->getValue()] = new GetTypeHandler();
38
- self::$handlers[CommandType::REFERENCE()->getValue()] = new ResolveInstanceHandler();
39
- self::$handlers[CommandType::GET_MODULE()->getValue()] = new GetModuleHandler();
40
- self::$handlers[CommandType::INVOKE_INSTANCE_METHOD()->getValue()] = new InvokeInstanceMethodHandler();
41
- self::$handlers[CommandType::EXCEPTION()->getValue()] = new ExceptionHandler();
42
- self::$handlers[CommandType::HEART_BEAT()->getValue()] = new HeartBeatHandler();
43
- self::$handlers[CommandType::CAST()->getValue()] = new CastHandler();
44
- self::$handlers[CommandType::GET_INSTANCE_FIELD()->getValue()] = new GetInstanceFieldHandler();
45
- self::$handlers[CommandType::OPTIMIZE()->getValue()] = new OptimizeHandler();
46
- self::$handlers[CommandType::GENERATE_LIB()->getValue()] = new GenerateLibHandler();
47
- self::$handlers[CommandType::INVOKE_GLOBAL_FUNCTION()->getValue()] = new InvokeGlobalFunctionHandler();
48
- self::$handlers[CommandType::DESTRUCT_REFERENCE()->getValue()] = new DestructReferenceHandler();
49
- self::$handlers[CommandType::ARRAY_REFERENCE()->getValue()] = new ArrayReferenceHandler();
50
- self::$handlers[CommandType::ARRAY_GET_ITEM()->getValue()] = new ArrayGetItemHandler();
51
- self::$handlers[CommandType::ARRAY_GET_SIZE()->getValue()] = new ArrayGetSizeHandler();
52
- self::$handlers[CommandType::ARRAY_GET_RANK()->getValue()] = new ArrayGetRankHandler();
53
- self::$handlers[CommandType::ARRAY_SET_ITEM()->getValue()] = new ArraySetItemHandler();
54
- self::$handlers[CommandType::ARRAY()->getValue()] = new ArrayHandler();
55
- self::$handlers[CommandType::RETRIEVE_ARRAY()->getValue()] = new RetrieveArrayHandler();
56
- self::$handlers[CommandType::SET_INSTANCE_FIELD()->getValue()] = new SetInstanceFieldHandler();
57
- self::$handlers[CommandType::INVOKE_GENERIC_STATIC_METHOD()->getValue()] = new InvokeGenericStaticMethodHandler();
58
- self::$handlers[CommandType::INVOKE_GENERIC_METHOD()->getValue()] = new InvokeGenericMethodHandler();
59
- self::$handlers[CommandType::GET_ENUM_ITEM()->getValue()] = new GetEnumItemHandler();
60
- self::$handlers[CommandType::GET_ENUM_NAME()->getValue()] = new GetEnumNameHandler();
61
- self::$handlers[CommandType::GET_ENUM_VALUE()->getValue()] = new GetEnumValueHandler();
62
- self::$handlers[CommandType::AS_REF()->getValue()] = new AsRefHandler();
63
- self::$handlers[CommandType::AS_OUT()->getValue()] = new AsOutHandler();
64
- self::$handlers[CommandType::GET_REF_VALUE()->getValue()] = new GetRefValueHandler();
65
- self::$handlers[CommandType::ENABLE_NAMESPACE()->getValue()] = new EnableNamespaceHandler();
66
- self::$handlers[CommandType::ENABLE_TYPE()->getValue()] = new EnableTypeHandler();
67
- self::$handlers[CommandType::CREATE_NULL()->getValue()] = new CreateNullHandler();
68
- self::$handlers[CommandType::GET_STATIC_METHOD_AS_DELEGATE()->getValue()] = new GetStaticMethodAsDelegateHandler();
69
- self::$handlers[CommandType::GET_INSTANCE_METHOD_AS_DELEGATE()->getValue()] = new GetInstanceMethodAsDelegateHandler();
70
- self::$handlers[CommandType::PASS_DELEGATE()->getValue()] = new PassDelegateHandler();
71
- self::$handlers[CommandType::INVOKE_DELEGATE()->getValue()] = new InvokeDelegateHandler();
72
- self::$handlers[CommandType::CONVERT_TYPE()->getValue()] = new ConvertTypeHandler();
73
- self::$handlers[CommandType::ADD_EVENT_LISTENER()->getValue()] = new AddEventListenerHandler();
74
- self::$handlers[CommandType::PLUGIN_WRAPPER()->getValue()] = new PluginWrapperHandler();
75
- self::$handlers[CommandType::GET_ASYNC_OPERATION_RESULT()->getValue()] = new GetAsyncOperationResultHandler();
76
- self::$handlers[CommandType::AS_KWARGS()->getValue()] = new AsKwargsHandler();
77
- self::$handlers[CommandType::GET_RESULT_TYPE()->getValue()] = new GetResultTypeHandler();
78
- self::$handlers[CommandType::GET_GLOBAL_FIELD()->getValue()] = new GetGlobalFieldHandler();
79
- self::$handlers[CommandType::REGISTER_FOR_UPDATE()->getValue()] = new RegisterForUpdateHandler();
80
- self::$handlers[CommandType::VALUE_FOR_UPDATE()->getValue()] = new ValueForUpdateHandler();
81
- self::$handlers[CommandType::AS_DTO()->getValue()] = new AsDtoHandler();
82
- self::$handlers[CommandType::DTO_PROPERTY()->getValue()] = new DtoPropertyHandler();
83
- self::$handlers[CommandType::PROJECT_RESULT_AS_DTO()->getValue()] = new ProjectResultAsDtoHandler();
84
- self::$handlers[CommandType::PASS_BY_VALUE()->getValue()] = new PassByValueHandler();
85
- }
86
-
87
- public static function getHandlers(): array
88
- {
89
- self::initializeHandlers();
90
- return self::$handlers;
91
- }
92
-
93
- public static function handleCommand(CommandInterface $command): CommandInterface
94
- {
95
- self::initializeHandlers();
96
- try {
97
- $response = self::$handlers[$command->getCommandType()->getValue()]
98
- ->handleCommand($command);
99
-
100
- return self::parseResponse($response, $command->getRuntimeName());
101
- } catch (Throwable $e) {
102
- if ($e->getPrevious() !== null) {
103
- return ExceptionSerializer::serializeException($e->getPrevious(), $command);
104
- }
105
-
106
- return ExceptionSerializer::serializeException($e, $command);
107
- }
108
- }
109
-
110
- /**
111
- * @param mixed $response
112
- */
113
- private static function parseResponse($response, RuntimeName $runtimeName): CommandInterface
114
- {
115
- if (TypesHandler::isSimpleType($response)) {
116
- $responseCommand = Command::createResponse(
117
- $response,
118
- $runtimeName
119
- );
120
- } elseif ($response instanceof CommandInterface) {
121
- $responseCommand = $response;
122
- } else {
123
- if (is_array($response)) {
124
- $response = new ArrayWrapper($response);
125
- }
126
-
127
- $responseCommand = Command::createReference(
128
- ReferencesCache::getInstance()->cacheReference($response),
129
- $runtimeName
130
- );
131
- }
132
-
133
- $invocationContexts = RegisterForUpdateHandler::$invocationContexts;
134
-
135
- if (!empty($invocationContexts)) {
136
- $refCache = ReferencesCache::getInstance();
137
-
138
- foreach ($invocationContexts as $contextUuid => $contextValue) {
139
- if (is_array($contextValue)) {
140
- foreach ($contextValue as $nestedContextUuid => $nestedContextValue) {
141
- $instanceGuid = $refCache->cacheReference($nestedContextValue);
142
-
143
- $updateContextCommand = new Command(
144
- $runtimeName,
145
- CommandType::VALUE_FOR_UPDATE(),
146
- (string) $nestedContextUuid,
147
- $instanceGuid
148
- );
149
-
150
- $responseCommand = $responseCommand
151
- ->addArgToPayload($updateContextCommand);
152
- }
153
-
154
- continue;
155
- }
156
-
157
- $instanceGuid = $refCache->cacheReference($contextValue);
158
-
159
- $updateContextCommand = new Command(
160
- $runtimeName,
161
- CommandType::VALUE_FOR_UPDATE(),
162
- (string) $contextUuid,
163
- $instanceGuid
164
- );
165
-
166
- $responseCommand = $responseCommand
167
- ->addArgToPayload($updateContextCommand);
168
- }
169
-
170
- RegisterForUpdateHandler::$invocationContexts = [];
171
- }
172
-
173
- return $responseCommand;
174
- }
175
- }
1
+ <?php
2
+
3
+ declare(strict_types=1);
4
+
5
+ namespace core\handler;
6
+
7
+ use core\referencecache\ReferencesCache;
8
+ use Throwable;
9
+ use utils\Command;
10
+ use utils\CommandInterface;
11
+ use utils\ExceptionSerializer;
12
+ use utils\RuntimeName;
13
+ use utils\type\CommandType;
14
+ use utils\TypesHandler;
15
+ use utils\ArrayWrapper;
16
+
17
+ final class Handler
18
+ {
19
+ private static array $handlers = [];
20
+
21
+ private function __construct()
22
+ {
23
+ }
24
+
25
+ private static function initializeHandlers(): void
26
+ {
27
+ if (!empty(self::$handlers)) {
28
+ return;
29
+ }
30
+
31
+ self::$handlers[CommandType::VALUE()->getValue()] = new ValueHandler();
32
+ self::$handlers[CommandType::LOAD_LIBRARY()->getValue()] = new LoadLibraryHandler();
33
+ self::$handlers[CommandType::INVOKE_STATIC_METHOD()->getValue()] = new InvokeStaticMethodHandler();
34
+ self::$handlers[CommandType::GET_STATIC_FIELD()->getValue()] = new GetStaticFieldHandler();
35
+ self::$handlers[CommandType::SET_STATIC_FIELD()->getValue()] = new SetStaticFieldHandler();
36
+ self::$handlers[CommandType::CREATE_INSTANCE()->getValue()] = new CreateInstanceHandler();
37
+ self::$handlers[CommandType::GET_TYPE()->getValue()] = new GetTypeHandler();
38
+ self::$handlers[CommandType::REFERENCE()->getValue()] = new ResolveInstanceHandler();
39
+ self::$handlers[CommandType::GET_MODULE()->getValue()] = new GetModuleHandler();
40
+ self::$handlers[CommandType::INVOKE_INSTANCE_METHOD()->getValue()] = new InvokeInstanceMethodHandler();
41
+ self::$handlers[CommandType::EXCEPTION()->getValue()] = new ExceptionHandler();
42
+ self::$handlers[CommandType::HEART_BEAT()->getValue()] = new HeartBeatHandler();
43
+ self::$handlers[CommandType::CAST()->getValue()] = new CastHandler();
44
+ self::$handlers[CommandType::GET_INSTANCE_FIELD()->getValue()] = new GetInstanceFieldHandler();
45
+ self::$handlers[CommandType::OPTIMIZE()->getValue()] = new OptimizeHandler();
46
+ self::$handlers[CommandType::GENERATE_LIB()->getValue()] = new GenerateLibHandler();
47
+ self::$handlers[CommandType::INVOKE_GLOBAL_FUNCTION()->getValue()] = new InvokeGlobalFunctionHandler();
48
+ self::$handlers[CommandType::DESTRUCT_REFERENCE()->getValue()] = new DestructReferenceHandler();
49
+ self::$handlers[CommandType::ARRAY_REFERENCE()->getValue()] = new ArrayReferenceHandler();
50
+ self::$handlers[CommandType::ARRAY_GET_ITEM()->getValue()] = new ArrayGetItemHandler();
51
+ self::$handlers[CommandType::ARRAY_GET_SIZE()->getValue()] = new ArrayGetSizeHandler();
52
+ self::$handlers[CommandType::ARRAY_GET_RANK()->getValue()] = new ArrayGetRankHandler();
53
+ self::$handlers[CommandType::ARRAY_SET_ITEM()->getValue()] = new ArraySetItemHandler();
54
+ self::$handlers[CommandType::ARRAY()->getValue()] = new ArrayHandler();
55
+ self::$handlers[CommandType::RETRIEVE_ARRAY()->getValue()] = new RetrieveArrayHandler();
56
+ self::$handlers[CommandType::SET_INSTANCE_FIELD()->getValue()] = new SetInstanceFieldHandler();
57
+ self::$handlers[CommandType::INVOKE_GENERIC_STATIC_METHOD()->getValue()] = new InvokeGenericStaticMethodHandler();
58
+ self::$handlers[CommandType::INVOKE_GENERIC_METHOD()->getValue()] = new InvokeGenericMethodHandler();
59
+ self::$handlers[CommandType::GET_ENUM_ITEM()->getValue()] = new GetEnumItemHandler();
60
+ self::$handlers[CommandType::GET_ENUM_NAME()->getValue()] = new GetEnumNameHandler();
61
+ self::$handlers[CommandType::GET_ENUM_VALUE()->getValue()] = new GetEnumValueHandler();
62
+ self::$handlers[CommandType::AS_REF()->getValue()] = new AsRefHandler();
63
+ self::$handlers[CommandType::AS_OUT()->getValue()] = new AsOutHandler();
64
+ self::$handlers[CommandType::GET_REF_VALUE()->getValue()] = new GetRefValueHandler();
65
+ self::$handlers[CommandType::ENABLE_NAMESPACE()->getValue()] = new EnableNamespaceHandler();
66
+ self::$handlers[CommandType::ENABLE_TYPE()->getValue()] = new EnableTypeHandler();
67
+ self::$handlers[CommandType::CREATE_NULL()->getValue()] = new CreateNullHandler();
68
+ self::$handlers[CommandType::GET_STATIC_METHOD_AS_DELEGATE()->getValue()] = new GetStaticMethodAsDelegateHandler();
69
+ self::$handlers[CommandType::GET_INSTANCE_METHOD_AS_DELEGATE()->getValue()] = new GetInstanceMethodAsDelegateHandler();
70
+ self::$handlers[CommandType::PASS_DELEGATE()->getValue()] = new PassDelegateHandler();
71
+ self::$handlers[CommandType::INVOKE_DELEGATE()->getValue()] = new InvokeDelegateHandler();
72
+ self::$handlers[CommandType::CONVERT_TYPE()->getValue()] = new ConvertTypeHandler();
73
+ self::$handlers[CommandType::ADD_EVENT_LISTENER()->getValue()] = new AddEventListenerHandler();
74
+ self::$handlers[CommandType::PLUGIN_WRAPPER()->getValue()] = new PluginWrapperHandler();
75
+ self::$handlers[CommandType::GET_ASYNC_OPERATION_RESULT()->getValue()] = new GetAsyncOperationResultHandler();
76
+ self::$handlers[CommandType::AS_KWARGS()->getValue()] = new AsKwargsHandler();
77
+ self::$handlers[CommandType::GET_RESULT_TYPE()->getValue()] = new GetResultTypeHandler();
78
+ self::$handlers[CommandType::GET_GLOBAL_FIELD()->getValue()] = new GetGlobalFieldHandler();
79
+ self::$handlers[CommandType::REGISTER_FOR_UPDATE()->getValue()] = new RegisterForUpdateHandler();
80
+ self::$handlers[CommandType::VALUE_FOR_UPDATE()->getValue()] = new ValueForUpdateHandler();
81
+ self::$handlers[CommandType::AS_DTO()->getValue()] = new AsDtoHandler();
82
+ self::$handlers[CommandType::DTO_PROPERTY()->getValue()] = new DtoPropertyHandler();
83
+ self::$handlers[CommandType::PROJECT_RESULT_AS_DTO()->getValue()] = new ProjectResultAsDtoHandler();
84
+ self::$handlers[CommandType::PASS_BY_VALUE()->getValue()] = new PassByValueHandler();
85
+ self::$handlers[CommandType::CONTEXT_METADATA()->getValue()] = new ContextMetadataHandler();
86
+ }
87
+
88
+ public static function getHandlers(): array
89
+ {
90
+ self::initializeHandlers();
91
+ return self::$handlers;
92
+ }
93
+
94
+ public static function handleCommand(CommandInterface $command): CommandInterface
95
+ {
96
+ self::initializeHandlers();
97
+ try {
98
+ $response = self::$handlers[$command->getCommandType()->getValue()]
99
+ ->handleCommand($command);
100
+
101
+ return self::parseResponse($response, $command->getRuntimeName());
102
+ } catch (Throwable $e) {
103
+ if ($e->getPrevious() !== null) {
104
+ return ExceptionSerializer::serializeException($e->getPrevious(), $command);
105
+ }
106
+
107
+ return ExceptionSerializer::serializeException($e, $command);
108
+ }
109
+ }
110
+
111
+ /**
112
+ * @param mixed $response
113
+ */
114
+ private static function parseResponse($response, RuntimeName $runtimeName): CommandInterface
115
+ {
116
+ if (TypesHandler::isSimpleType($response)) {
117
+ $responseCommand = Command::createResponse(
118
+ $response,
119
+ $runtimeName
120
+ );
121
+ } elseif ($response instanceof CommandInterface) {
122
+ $responseCommand = $response;
123
+ } else {
124
+ if (is_array($response)) {
125
+ $response = new ArrayWrapper($response);
126
+ }
127
+
128
+ $responseCommand = Command::createReference(
129
+ ReferencesCache::getInstance()->cacheReference($response),
130
+ $runtimeName
131
+ );
132
+ }
133
+
134
+ $invocationContexts = RegisterForUpdateHandler::$invocationContexts;
135
+
136
+ if (!empty($invocationContexts)) {
137
+ $refCache = ReferencesCache::getInstance();
138
+
139
+ foreach ($invocationContexts as $contextUuid => $contextValue) {
140
+ if (is_array($contextValue)) {
141
+ foreach ($contextValue as $nestedContextUuid => $nestedContextValue) {
142
+ $instanceGuid = $refCache->cacheReference($nestedContextValue);
143
+
144
+ $updateContextCommand = new Command(
145
+ $runtimeName,
146
+ CommandType::VALUE_FOR_UPDATE(),
147
+ (string) $nestedContextUuid,
148
+ $instanceGuid
149
+ );
150
+
151
+ $responseCommand = $responseCommand
152
+ ->addArgToPayload($updateContextCommand);
153
+ }
154
+
155
+ continue;
156
+ }
157
+
158
+ $instanceGuid = $refCache->cacheReference($contextValue);
159
+
160
+ $updateContextCommand = new Command(
161
+ $runtimeName,
162
+ CommandType::VALUE_FOR_UPDATE(),
163
+ (string) $contextUuid,
164
+ $instanceGuid
165
+ );
166
+
167
+ $responseCommand = $responseCommand
168
+ ->addArgToPayload($updateContextCommand);
169
+ }
170
+
171
+ RegisterForUpdateHandler::$invocationContexts = [];
172
+ }
173
+
174
+ return $responseCommand;
175
+ }
176
+ }