From 6d621e52a22127ca1e5fb25792f91875a51e5833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E9=9A=90?= Date: Wed, 20 Sep 2023 12:24:30 +0800 Subject: [PATCH 01/27] feat(#open source) : init --- .gitignore | 204 ++++++++++++++++ LICENSE | 8 + README | 1 + app-stream-api/pom.xml | 34 +++ .../dingtalk/open/app/api/ClientOption.java | 64 +++++ .../open/app/api/DingTalkAppError.java | 80 +++++++ .../open/app/api/GenericEventListener.java | 24 ++ .../open/app/api/KeepAliveOption.java | 38 +++ .../app/api/OpenDingTalkAppException.java | 33 +++ .../open/app/api/OpenDingTalkClient.java | 24 ++ .../app/api/OpenDingTalkStreamClient.java | 100 ++++++++ .../api/OpenDingTalkStreamClientBuilder.java | 118 ++++++++++ .../dingtalk/open/app/api/Preconditions.java | 29 +++ .../com/dingtalk/open/app/api/UserAgent.java | 26 +++ .../api/callback/CallbackCommandExecutor.java | 58 +++++ .../app/api/callback/CallbackDescriptor.java | 59 +++++ .../open/app/api/callback/CallbackMethod.java | 18 ++ .../open/app/api/callback/JsonMarshaller.java | 22 ++ .../open/app/api/callback/Marshaller.java | 17 ++ .../OpenDingTalkCallbackListener.java | 18 ++ .../open/app/api/callback/SimpleMethod.java | 25 ++ .../open/app/api/command/Command.java | 20 ++ .../app/api/command/CommandDispatcher.java | 40 ++++ .../open/app/api/common/AopUtils.java | 68 ++++++ .../open/app/api/common/LambdaUtils.java | 60 +++++ .../open/app/api/message/EventHeaders.java | 18 ++ .../api/message/GenericOpenDingTalkEvent.java | 70 ++++++ .../open/app/api/open/HttpOpenApiClient.java | 48 ++++ .../open/app/api/open/OpenApiClient.java | 18 ++ .../app/api/open/OpenApiClientBuilder.java | 34 +++ .../app/api/open/OpenConnectionRequest.java | 69 ++++++ .../app/api/open/OpenConnectionResponse.java | 28 +++ .../open/app/api/open/http/HttpConstants.java | 20 ++ .../app/api/protocol/AppServiceListener.java | 36 +++ .../app/api/protocol/CommandExecutor.java | 18 ++ .../api/protocol/EventCommandExecutor.java | 70 ++++++ .../api/protocol/JsonMessageConverter.java | 20 ++ .../app/api/protocol/MessageConverter.java | 22 ++ .../api/protocol/MessageConverterMapping.java | 24 ++ .../app/api/protocol/OpenBusinessType.java | 34 +++ .../api/protocol/SystemCommandExecutor.java | 30 +++ .../security/AbstractDingTalkCredential.java | 8 + .../api/security/AuthClientCredential.java | 28 +++ .../app/api/security/DingTalkCredential.java | 23 ++ .../dingtalk/open/app/api/util/IoUtils.java | 22 ++ .../dingtalk/open/app/api/util/IpUtils.java | 70 ++++++ .../open/app/api/util/ThreadUtil.java | 24 ++ .../app-stream-api-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 1806 bytes ...-stream-api-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + .../app-stream-api-1.0.8-SNAPSHOT-sources.jar | Bin 0 -> 27660 bytes ...-stream-api-1.0.8-SNAPSHOT-sources.jar.asc | 7 + .../target/app-stream-api-1.0.8-SNAPSHOT.jar | Bin 0 -> 46072 bytes .../app-stream-api-1.0.8-SNAPSHOT.jar.asc | 7 + .../target/app-stream-api-1.0.8-SNAPSHOT.pom | 34 +++ .../app-stream-api-1.0.8-SNAPSHOT.pom.asc | 7 + .../dingtalk/open/app/api/ClientOption.class | Bin 0 -> 1621 bytes .../open/app/api/DingTalkAppError.class | Bin 0 -> 3453 bytes .../open/app/api/GenericEventListener.class | Bin 0 -> 1286 bytes .../open/app/api/KeepAliveOption.class | Bin 0 -> 1329 bytes .../app/api/OpenDingTalkAppException.class | Bin 0 -> 1312 bytes .../open/app/api/OpenDingTalkClient.class | Bin 0 -> 238 bytes .../api/OpenDingTalkStreamClient$Status.class | Bin 0 -> 1325 bytes .../app/api/OpenDingTalkStreamClient.class | Bin 0 -> 6965 bytes .../api/OpenDingTalkStreamClientBuilder.class | Bin 0 -> 7362 bytes .../dingtalk/open/app/api/Preconditions.class | Bin 0 -> 1149 bytes .../com/dingtalk/open/app/api/UserAgent.class | Bin 0 -> 1006 bytes .../callback/CallbackCommandExecutor.class | Bin 0 -> 4440 bytes .../app/api/callback/CallbackDescriptor.class | Bin 0 -> 3192 bytes .../app/api/callback/CallbackMethod.class | Bin 0 -> 257 bytes .../app/api/callback/JsonMarshaller.class | Bin 0 -> 1088 bytes .../open/app/api/callback/Marshaller.class | Bin 0 -> 263 bytes .../OpenDingTalkCallbackListener.class | Bin 0 -> 401 bytes .../open/app/api/callback/SimpleMethod.class | Bin 0 -> 1153 bytes .../open/app/api/command/Command.class | Bin 0 -> 263 bytes .../app/api/command/CommandDispatcher.class | Bin 0 -> 2242 bytes .../open/app/api/common/AopUtils.class | Bin 0 -> 3037 bytes .../open/app/api/common/LambdaUtils.class | Bin 0 -> 4556 bytes .../open/app/api/message/EventHeaders.class | Bin 0 -> 571 bytes .../message/GenericOpenDingTalkEvent.class | Bin 0 -> 1811 bytes .../open/app/api/open/HttpOpenApiClient.class | Bin 0 -> 3355 bytes .../open/app/api/open/OpenApiClient.class | Bin 0 -> 325 bytes .../app/api/open/OpenApiClientBuilder.class | Bin 0 -> 1090 bytes .../app/api/open/OpenConnectionRequest.class | Bin 0 -> 1765 bytes .../app/api/open/OpenConnectionResponse.class | Bin 0 -> 803 bytes .../app/api/open/http/HttpConstants.class | Bin 0 -> 695 bytes .../app/api/protocol/AppServiceListener.class | Bin 0 -> 2544 bytes .../app/api/protocol/CommandExecutor.class | Bin 0 -> 220 bytes .../api/protocol/EventCommandExecutor.class | Bin 0 -> 4637 bytes .../api/protocol/JsonMessageConverter.class | Bin 0 -> 967 bytes .../app/api/protocol/MessageConverter.class | Bin 0 -> 323 bytes .../protocol/MessageConverterMapping.class | Bin 0 -> 1288 bytes .../app/api/protocol/OpenBusinessType.class | Bin 0 -> 1482 bytes .../api/protocol/SystemCommandExecutor.class | Bin 0 -> 2188 bytes .../security/AbstractDingTalkCredential.class | Bin 0 -> 434 bytes .../api/security/AuthClientCredential.class | Bin 0 -> 884 bytes .../app/api/security/DingTalkCredential.class | Bin 0 -> 223 bytes .../dingtalk/open/app/api/util/IoUtils.class | Bin 0 -> 732 bytes .../dingtalk/open/app/api/util/IpUtils.class | Bin 0 -> 2317 bytes .../open/app/api/util/ThreadUtil.class | Bin 0 -> 1047 bytes .../target/maven-archiver/pom.properties | 3 + app-stream-client/dependency-reduced-pom.xml | 107 +++++++++ app-stream-client/pom.xml | 142 ++++++++++++ ...p-stream-client-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 2362 bytes ...ream-client-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + ...p-stream-client-1.0.8-SNAPSHOT-sources.jar | Bin 0 -> 2379767 bytes ...ream-client-1.0.8-SNAPSHOT-sources.jar.asc | 7 + .../app-stream-client-1.0.8-SNAPSHOT.jar | Bin 0 -> 3163838 bytes .../app-stream-client-1.0.8-SNAPSHOT.jar.asc | 7 + .../app-stream-client-1.0.8-SNAPSHOT.pom | 107 +++++++++ .../app-stream-client-1.0.8-SNAPSHOT.pom.asc | 7 + .../javadoc-options-javadoc-resources.xml | 10 + .../target/maven-archiver/pom.properties | 3 + ...ginal-app-stream-client-1.0.8-SNAPSHOT.jar | Bin 0 -> 2488 bytes .../app-stream-network-api/pom.xml | 32 +++ .../app/stream/network/api/BaseSession.java | 21 ++ .../network/api/ClientConnectionListener.java | 24 ++ .../app/stream/network/api/ConnectOption.java | 72 ++++++ .../open/app/stream/network/api/Context.java | 38 +++ .../network/api/EndPointConnection.java | 41 ++++ .../network/api/NetworkSharedResources.java | 24 ++ .../open/app/stream/network/api/Protocol.java | 21 ++ .../stream/network/api/ServiceException.java | 16 ++ .../open/app/stream/network/api/Session.java | 45 ++++ .../app/stream/network/api/ThreadSafe.java | 15 ++ .../network/api/TransportConnector.java | 19 ++ .../stream/network/api/TransportProtocol.java | 54 +++++ .../exception/DingTalkNetworkException.java | 14 ++ .../network/api/exception/NetWorkError.java | 27 +++ .../network/api/logger/InternalLogger.java | 43 ++++ .../api/logger/InternalLoggerFactory.java | 12 + .../api/logger/NettyInternalLogger.java | 33 +++ .../network/api/utils/NettyByteBufUtils.java | 38 +++ ...eam-network-api-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 1763 bytes ...network-api-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + ...eam-network-api-1.0.8-SNAPSHOT-sources.jar | Bin 0 -> 10556 bytes ...network-api-1.0.8-SNAPSHOT-sources.jar.asc | 7 + .../app-stream-network-api-1.0.8-SNAPSHOT.jar | Bin 0 -> 16140 bytes ...-stream-network-api-1.0.8-SNAPSHOT.jar.asc | 7 + .../app-stream-network-api-1.0.8-SNAPSHOT.pom | 32 +++ ...-stream-network-api-1.0.8-SNAPSHOT.pom.asc | 7 + .../app/stream/network/api/BaseSession.class | Bin 0 -> 731 bytes .../api/ClientConnectionListener.class | Bin 0 -> 512 bytes .../stream/network/api/ConnectOption$1.class | Bin 0 -> 269 bytes .../network/api/ConnectOption$Builder.class | Bin 0 -> 1479 bytes .../stream/network/api/ConnectOption.class | Bin 0 -> 1592 bytes .../open/app/stream/network/api/Context.class | Bin 0 -> 357 bytes .../network/api/EndPointConnection.class | Bin 0 -> 1538 bytes .../network/api/NetworkSharedResources.class | Bin 0 -> 801 bytes .../app/stream/network/api/Protocol.class | Bin 0 -> 493 bytes .../stream/network/api/ServiceException.class | Bin 0 -> 389 bytes .../open/app/stream/network/api/Session.class | Bin 0 -> 278 bytes .../app/stream/network/api/ThreadSafe.class | Bin 0 -> 411 bytes .../network/api/TransportConnector.class | Bin 0 -> 463 bytes .../network/api/TransportProtocol.class | Bin 0 -> 2129 bytes .../exception/DingTalkNetworkException.class | Bin 0 -> 577 bytes .../network/api/exception/NetWorkError.class | Bin 0 -> 1348 bytes .../network/api/logger/InternalLogger.class | Bin 0 -> 318 bytes .../api/logger/InternalLoggerFactory.class | Bin 0 -> 1040 bytes .../api/logger/NettyInternalLogger.class | Bin 0 -> 1339 bytes .../network/api/utils/NettyByteBufUtils.class | Bin 0 -> 1794 bytes .../target/maven-archiver/pom.properties | 3 + .../app-stream-network-core/pom.xml | 32 +++ .../stream/network/core/BackoffPolicy.java | 16 ++ .../app/stream/network/core/Connector.java | 77 +++++++ .../network/core/DefaultSessionPool.java | 218 ++++++++++++++++++ .../core/EndPointConnectionFactory.java | 21 ++ .../core/ExponentialBackoffPolicy.java | 29 +++ .../stream/network/core/NetWorkService.java | 35 +++ .../app/stream/network/core/SessionPool.java | 16 ++ .../app/stream/network/core/Subscription.java | 47 ++++ ...am-network-core-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 1809 bytes ...etwork-core-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + ...am-network-core-1.0.8-SNAPSHOT-sources.jar | Bin 0 -> 7610 bytes ...etwork-core-1.0.8-SNAPSHOT-sources.jar.asc | 7 + ...app-stream-network-core-1.0.8-SNAPSHOT.jar | Bin 0 -> 17141 bytes ...stream-network-core-1.0.8-SNAPSHOT.jar.asc | 7 + ...app-stream-network-core-1.0.8-SNAPSHOT.pom | 32 +++ ...stream-network-core-1.0.8-SNAPSHOT.pom.asc | 7 + .../stream/network/core/BackoffPolicy.class | Bin 0 -> 170 bytes .../app/stream/network/core/Connector.class | Bin 0 -> 5745 bytes .../network/core/DefaultSessionPool$1.class | Bin 0 -> 286 bytes .../DefaultSessionPool$ConnectionTask.class | Bin 0 -> 5229 bytes .../core/DefaultSessionPool$RetryRunner.class | Bin 0 -> 2178 bytes ...sionPool$TransportConnectionListener.class | Bin 0 -> 3569 bytes .../network/core/DefaultSessionPool.class | Bin 0 -> 8215 bytes .../core/EndPointConnectionFactory.class | Bin 0 -> 312 bytes .../core/ExponentialBackoffPolicy.class | Bin 0 -> 1209 bytes .../stream/network/core/NetWorkService.class | Bin 0 -> 1353 bytes .../app/stream/network/core/SessionPool.class | Bin 0 -> 170 bytes .../stream/network/core/Subscription.class | Bin 0 -> 1635 bytes .../target/maven-archiver/pom.properties | 3 + .../app-stream-network-rsocket/pom.xml | 31 +++ .../network/rsocket/RSocketPushSession.java | 48 ++++ .../network/rsocket/RSocketUnaryContext.java | 63 +++++ .../network/rsocket/ReceiverSocket.java | 70 ++++++ .../rsocket/RsocketTransportConnector.java | 38 +++ .../stream/network/rsocket/SetupPayload.java | 27 +++ ....app.stream.network.api.TransportConnector | 1 + ...network-rsocket-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 2036 bytes ...ork-rsocket-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + ...network-rsocket-1.0.8-SNAPSHOT-sources.jar | Bin 0 -> 5699 bytes ...ork-rsocket-1.0.8-SNAPSHOT-sources.jar.asc | 7 + ...-stream-network-rsocket-1.0.8-SNAPSHOT.jar | Bin 0 -> 11489 bytes ...eam-network-rsocket-1.0.8-SNAPSHOT.jar.asc | 7 + ...-stream-network-rsocket-1.0.8-SNAPSHOT.pom | 31 +++ ...eam-network-rsocket-1.0.8-SNAPSHOT.pom.asc | 7 + ....app.stream.network.api.TransportConnector | 1 + .../network/rsocket/RSocketPushSession.class | Bin 0 -> 2812 bytes .../network/rsocket/RSocketUnaryContext.class | Bin 0 -> 3769 bytes .../network/rsocket/ReceiverSocket.class | Bin 0 -> 5101 bytes .../rsocket/RsocketTransportConnector.class | Bin 0 -> 5935 bytes .../stream/network/rsocket/SetupPayload.class | Bin 0 -> 695 bytes .../target/maven-archiver/pom.properties | 3 + .../app-stream-network-ws/pom.xml | 30 +++ .../stream/network/ws/KeepAliveHandler.java | 111 +++++++++ .../stream/network/ws/NettyClientHandler.java | 57 +++++ .../network/ws/ProtocolConnectHandler.java | 56 +++++ .../network/ws/ProtocolFrameHandler.java | 56 +++++ .../stream/network/ws/WebSocketContext.java | 60 +++++ .../stream/network/ws/WebSocketSession.java | 45 ++++ .../network/ws/WebsocketIdleHandler.java | 17 ++ .../ws/WebsocketTransportConnector.java | 75 ++++++ ....app.stream.network.api.TransportConnector | 1 + ...ream-network-ws-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 1817 bytes ...-network-ws-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + ...ream-network-ws-1.0.8-SNAPSHOT-sources.jar | Bin 0 -> 9229 bytes ...-network-ws-1.0.8-SNAPSHOT-sources.jar.asc | 7 + .../app-stream-network-ws-1.0.8-SNAPSHOT.jar | Bin 0 -> 20029 bytes ...p-stream-network-ws-1.0.8-SNAPSHOT.jar.asc | 7 + .../app-stream-network-ws-1.0.8-SNAPSHOT.pom | 30 +++ ...p-stream-network-ws-1.0.8-SNAPSHOT.pom.asc | 7 + ....app.stream.network.api.TransportConnector | 1 + .../network/ws/KeepAliveHandler$1.class | Bin 0 -> 276 bytes .../ws/KeepAliveHandler$PingTask.class | Bin 0 -> 4694 bytes .../stream/network/ws/KeepAliveHandler.class | Bin 0 -> 5463 bytes .../network/ws/NettyClientHandler.class | Bin 0 -> 3818 bytes .../network/ws/ProtocolConnectHandler.class | Bin 0 -> 3784 bytes .../network/ws/ProtocolFrameHandler.class | Bin 0 -> 2600 bytes .../stream/network/ws/WebSocketContext.class | Bin 0 -> 4398 bytes .../stream/network/ws/WebSocketSession.class | Bin 0 -> 1191 bytes .../network/ws/WebsocketIdleHandler.class | Bin 0 -> 663 bytes .../ws/WebsocketTransportConnector$1.class | Bin 0 -> 6160 bytes .../ws/WebsocketTransportConnector.class | Bin 0 -> 4474 bytes .../target/maven-archiver/pom.properties | 3 + app-stream-network/pom.xml | 61 +++++ ...-stream-network-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 1886 bytes ...eam-network-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + .../app-stream-network-1.0.8-SNAPSHOT.pom | 61 +++++ .../app-stream-network-1.0.8-SNAPSHOT.pom.asc | 7 + .../target/maven-archiver/pom.properties | 3 + app-stream-protocol/pom.xml | 55 +++++ .../open/app/stream/protocol/CommandType.java | 16 ++ .../open/app/stream/protocol/ContentType.java | 41 ++++ .../DefaultProtocolRequestFacade.java | 52 +++++ .../open/app/stream/protocol/HeaderNames.java | 15 ++ .../app/stream/protocol/ProtocolRequest.java | 58 +++++ .../protocol/ProtocolRequestFacade.java | 59 +++++ .../app/stream/protocol/ProtocolResponse.java | 91 ++++++++ .../stream/protocol/SpecificationVersion.java | 46 ++++ .../open/app/stream/protocol/StringUtils.java | 19 ++ .../callback/CallbackResponsePayload.java | 19 ++ .../app/stream/protocol/event/AckPayload.java | 26 +++ .../stream/protocol/event/EventAckStatus.java | 16 ++ .../protocol/event/ResponsePayload.java | 8 + .../protocol/system/DisconnectPayload.java | 17 ++ .../stream/protocol/system/SystemTopic.java | 13 ++ .../protocol/system/ping/PingPayload.java | 20 ++ ...stream-protocol-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 1877 bytes ...am-protocol-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + ...stream-protocol-1.0.8-SNAPSHOT-sources.jar | Bin 0 -> 9448 bytes ...am-protocol-1.0.8-SNAPSHOT-sources.jar.asc | 7 + .../app-stream-protocol-1.0.8-SNAPSHOT.jar | Bin 0 -> 15239 bytes ...app-stream-protocol-1.0.8-SNAPSHOT.jar.asc | 7 + .../app-stream-protocol-1.0.8-SNAPSHOT.pom | 55 +++++ ...app-stream-protocol-1.0.8-SNAPSHOT.pom.asc | 7 + .../app/stream/protocol/CommandType.class | Bin 0 -> 1169 bytes .../app/stream/protocol/ContentType.class | Bin 0 -> 1956 bytes .../DefaultProtocolRequestFacade.class | Bin 0 -> 1954 bytes .../app/stream/protocol/HeaderNames.class | Bin 0 -> 617 bytes .../app/stream/protocol/ProtocolRequest.class | Bin 0 -> 1650 bytes .../protocol/ProtocolRequestFacade.class | Bin 0 -> 485 bytes .../stream/protocol/ProtocolResponse.class | Bin 0 -> 3303 bytes .../protocol/SpecificationVersion.class | Bin 0 -> 1840 bytes .../app/stream/protocol/StringUtils.class | Bin 0 -> 722 bytes .../callback/CallbackResponsePayload.class | Bin 0 -> 717 bytes .../stream/protocol/event/AckPayload.class | Bin 0 -> 1051 bytes .../protocol/event/EventAckStatus.class | Bin 0 -> 1172 bytes .../protocol/event/ResponsePayload.class | Bin 0 -> 155 bytes .../protocol/system/DisconnectPayload.class | Bin 0 -> 622 bytes .../stream/protocol/system/SystemTopic.class | Bin 0 -> 463 bytes .../protocol/system/ping/PingPayload.class | Bin 0 -> 681 bytes .../target/maven-archiver/pom.properties | 3 + dingtalk-stream/pom.xml | 111 +++++++++ ...dingtalk-stream-1.0.8-SNAPSHOT-javadoc.jar | Bin 0 -> 2356 bytes ...talk-stream-1.0.8-SNAPSHOT-javadoc.jar.asc | 7 + ...dingtalk-stream-1.0.8-SNAPSHOT-sources.jar | Bin 0 -> 2379767 bytes ...talk-stream-1.0.8-SNAPSHOT-sources.jar.asc | 7 + .../target/dingtalk-stream-1.0.8-SNAPSHOT.jar | Bin 0 -> 3163838 bytes .../dingtalk-stream-1.0.8-SNAPSHOT.jar.asc | 7 + .../target/dingtalk-stream-1.0.8-SNAPSHOT.pom | 78 +++++++ .../dingtalk-stream-1.0.8-SNAPSHOT.pom.asc | 7 + .../target/maven-archiver/pom.properties | 3 + ...riginal-dingtalk-stream-1.0.8-SNAPSHOT.jar | Bin 0 -> 2356 bytes pom.xml | 183 +++++++++++++++ version.sh | 3 + 305 files changed, 5703 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README create mode 100644 app-stream-api/pom.xml create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/ClientOption.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/DingTalkAppError.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/GenericEventListener.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/KeepAliveOption.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkAppException.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkClient.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkStreamClient.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkStreamClientBuilder.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/Preconditions.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/UserAgent.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackCommandExecutor.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackDescriptor.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackMethod.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/JsonMarshaller.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/Marshaller.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/OpenDingTalkCallbackListener.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/SimpleMethod.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/command/Command.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/command/CommandDispatcher.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/common/AopUtils.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/common/LambdaUtils.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/message/EventHeaders.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/message/GenericOpenDingTalkEvent.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/open/HttpOpenApiClient.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenApiClient.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenApiClientBuilder.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenConnectionRequest.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenConnectionResponse.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/open/http/HttpConstants.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/AppServiceListener.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/CommandExecutor.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/EventCommandExecutor.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/JsonMessageConverter.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/MessageConverter.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/MessageConverterMapping.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/OpenBusinessType.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/SystemCommandExecutor.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/security/AbstractDingTalkCredential.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/security/AuthClientCredential.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/security/DingTalkCredential.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/util/IoUtils.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/util/IpUtils.java create mode 100644 app-stream-api/src/main/java/com/dingtalk/open/app/api/util/ThreadUtil.java create mode 100644 app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-sources.jar create mode 100644 app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-sources.jar.asc create mode 100644 app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.jar create mode 100644 app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.jar.asc create mode 100644 app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.pom create mode 100644 app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.pom.asc create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/ClientOption.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/DingTalkAppError.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/GenericEventListener.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/KeepAliveOption.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkAppException.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkClient.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkStreamClient$Status.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkStreamClient.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkStreamClientBuilder.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/Preconditions.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/UserAgent.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackCommandExecutor.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackDescriptor.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackMethod.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/callback/JsonMarshaller.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/callback/Marshaller.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/callback/OpenDingTalkCallbackListener.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/callback/SimpleMethod.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/command/Command.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/command/CommandDispatcher.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/common/AopUtils.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/common/LambdaUtils.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/message/EventHeaders.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/message/GenericOpenDingTalkEvent.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/open/HttpOpenApiClient.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenApiClient.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenApiClientBuilder.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenConnectionRequest.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenConnectionResponse.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/open/http/HttpConstants.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/AppServiceListener.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/CommandExecutor.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/EventCommandExecutor.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/JsonMessageConverter.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/MessageConverter.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/MessageConverterMapping.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/OpenBusinessType.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/SystemCommandExecutor.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/security/AbstractDingTalkCredential.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/security/AuthClientCredential.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/security/DingTalkCredential.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/util/IoUtils.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/util/IpUtils.class create mode 100644 app-stream-api/target/classes/com/dingtalk/open/app/api/util/ThreadUtil.class create mode 100644 app-stream-api/target/maven-archiver/pom.properties create mode 100644 app-stream-client/dependency-reduced-pom.xml create mode 100644 app-stream-client/pom.xml create mode 100644 app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-sources.jar create mode 100644 app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-sources.jar.asc create mode 100644 app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT.jar create mode 100644 app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT.jar.asc create mode 100644 app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT.pom create mode 100644 app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT.pom.asc create mode 100644 app-stream-client/target/javadoc-bundle-options/javadoc-options-javadoc-resources.xml create mode 100644 app-stream-client/target/maven-archiver/pom.properties create mode 100644 app-stream-client/target/original-app-stream-client-1.0.8-SNAPSHOT.jar create mode 100644 app-stream-network/app-stream-network-api/pom.xml create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/BaseSession.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/ClientConnectionListener.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/ConnectOption.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/Context.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/EndPointConnection.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/NetworkSharedResources.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/Protocol.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/ServiceException.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/Session.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/ThreadSafe.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/TransportConnector.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/TransportProtocol.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/exception/DingTalkNetworkException.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/exception/NetWorkError.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/logger/InternalLogger.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/logger/InternalLoggerFactory.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/logger/NettyInternalLogger.java create mode 100644 app-stream-network/app-stream-network-api/src/main/java/com/dingtalk/open/app/stream/network/api/utils/NettyByteBufUtils.java create mode 100644 app-stream-network/app-stream-network-api/target/app-stream-network-api-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 app-stream-network/app-stream-network-api/target/app-stream-network-api-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 app-stream-network/app-stream-network-api/target/app-stream-network-api-1.0.8-SNAPSHOT-sources.jar create mode 100644 app-stream-network/app-stream-network-api/target/app-stream-network-api-1.0.8-SNAPSHOT-sources.jar.asc create mode 100644 app-stream-network/app-stream-network-api/target/app-stream-network-api-1.0.8-SNAPSHOT.jar create mode 100644 app-stream-network/app-stream-network-api/target/app-stream-network-api-1.0.8-SNAPSHOT.jar.asc create mode 100644 app-stream-network/app-stream-network-api/target/app-stream-network-api-1.0.8-SNAPSHOT.pom create mode 100644 app-stream-network/app-stream-network-api/target/app-stream-network-api-1.0.8-SNAPSHOT.pom.asc create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/BaseSession.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/ClientConnectionListener.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/ConnectOption$1.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/ConnectOption$Builder.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/ConnectOption.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/Context.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/EndPointConnection.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/NetworkSharedResources.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/Protocol.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/ServiceException.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/Session.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/ThreadSafe.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/TransportConnector.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/TransportProtocol.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/exception/DingTalkNetworkException.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/exception/NetWorkError.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/logger/InternalLogger.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/logger/InternalLoggerFactory.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/logger/NettyInternalLogger.class create mode 100644 app-stream-network/app-stream-network-api/target/classes/com/dingtalk/open/app/stream/network/api/utils/NettyByteBufUtils.class create mode 100644 app-stream-network/app-stream-network-api/target/maven-archiver/pom.properties create mode 100644 app-stream-network/app-stream-network-core/pom.xml create mode 100644 app-stream-network/app-stream-network-core/src/main/java/com/dingtalk/open/app/stream/network/core/BackoffPolicy.java create mode 100644 app-stream-network/app-stream-network-core/src/main/java/com/dingtalk/open/app/stream/network/core/Connector.java create mode 100644 app-stream-network/app-stream-network-core/src/main/java/com/dingtalk/open/app/stream/network/core/DefaultSessionPool.java create mode 100644 app-stream-network/app-stream-network-core/src/main/java/com/dingtalk/open/app/stream/network/core/EndPointConnectionFactory.java create mode 100644 app-stream-network/app-stream-network-core/src/main/java/com/dingtalk/open/app/stream/network/core/ExponentialBackoffPolicy.java create mode 100644 app-stream-network/app-stream-network-core/src/main/java/com/dingtalk/open/app/stream/network/core/NetWorkService.java create mode 100644 app-stream-network/app-stream-network-core/src/main/java/com/dingtalk/open/app/stream/network/core/SessionPool.java create mode 100644 app-stream-network/app-stream-network-core/src/main/java/com/dingtalk/open/app/stream/network/core/Subscription.java create mode 100644 app-stream-network/app-stream-network-core/target/app-stream-network-core-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 app-stream-network/app-stream-network-core/target/app-stream-network-core-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 app-stream-network/app-stream-network-core/target/app-stream-network-core-1.0.8-SNAPSHOT-sources.jar create mode 100644 app-stream-network/app-stream-network-core/target/app-stream-network-core-1.0.8-SNAPSHOT-sources.jar.asc create mode 100644 app-stream-network/app-stream-network-core/target/app-stream-network-core-1.0.8-SNAPSHOT.jar create mode 100644 app-stream-network/app-stream-network-core/target/app-stream-network-core-1.0.8-SNAPSHOT.jar.asc create mode 100644 app-stream-network/app-stream-network-core/target/app-stream-network-core-1.0.8-SNAPSHOT.pom create mode 100644 app-stream-network/app-stream-network-core/target/app-stream-network-core-1.0.8-SNAPSHOT.pom.asc create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/BackoffPolicy.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/Connector.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/DefaultSessionPool$1.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/DefaultSessionPool$ConnectionTask.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/DefaultSessionPool$RetryRunner.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/DefaultSessionPool$TransportConnectionListener.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/DefaultSessionPool.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/EndPointConnectionFactory.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/ExponentialBackoffPolicy.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/NetWorkService.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/SessionPool.class create mode 100644 app-stream-network/app-stream-network-core/target/classes/com/dingtalk/open/app/stream/network/core/Subscription.class create mode 100644 app-stream-network/app-stream-network-core/target/maven-archiver/pom.properties create mode 100644 app-stream-network/app-stream-network-rsocket/pom.xml create mode 100644 app-stream-network/app-stream-network-rsocket/src/main/java/com/dingtalk/open/app/stream/network/rsocket/RSocketPushSession.java create mode 100644 app-stream-network/app-stream-network-rsocket/src/main/java/com/dingtalk/open/app/stream/network/rsocket/RSocketUnaryContext.java create mode 100644 app-stream-network/app-stream-network-rsocket/src/main/java/com/dingtalk/open/app/stream/network/rsocket/ReceiverSocket.java create mode 100644 app-stream-network/app-stream-network-rsocket/src/main/java/com/dingtalk/open/app/stream/network/rsocket/RsocketTransportConnector.java create mode 100644 app-stream-network/app-stream-network-rsocket/src/main/java/com/dingtalk/open/app/stream/network/rsocket/SetupPayload.java create mode 100644 app-stream-network/app-stream-network-rsocket/src/main/resources/META-INF/services/com.dingtalk.open.app.stream.network.api.TransportConnector create mode 100644 app-stream-network/app-stream-network-rsocket/target/app-stream-network-rsocket-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 app-stream-network/app-stream-network-rsocket/target/app-stream-network-rsocket-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 app-stream-network/app-stream-network-rsocket/target/app-stream-network-rsocket-1.0.8-SNAPSHOT-sources.jar create mode 100644 app-stream-network/app-stream-network-rsocket/target/app-stream-network-rsocket-1.0.8-SNAPSHOT-sources.jar.asc create mode 100644 app-stream-network/app-stream-network-rsocket/target/app-stream-network-rsocket-1.0.8-SNAPSHOT.jar create mode 100644 app-stream-network/app-stream-network-rsocket/target/app-stream-network-rsocket-1.0.8-SNAPSHOT.jar.asc create mode 100644 app-stream-network/app-stream-network-rsocket/target/app-stream-network-rsocket-1.0.8-SNAPSHOT.pom create mode 100644 app-stream-network/app-stream-network-rsocket/target/app-stream-network-rsocket-1.0.8-SNAPSHOT.pom.asc create mode 100644 app-stream-network/app-stream-network-rsocket/target/classes/META-INF/services/com.dingtalk.open.app.stream.network.api.TransportConnector create mode 100644 app-stream-network/app-stream-network-rsocket/target/classes/com/dingtalk/open/app/stream/network/rsocket/RSocketPushSession.class create mode 100644 app-stream-network/app-stream-network-rsocket/target/classes/com/dingtalk/open/app/stream/network/rsocket/RSocketUnaryContext.class create mode 100644 app-stream-network/app-stream-network-rsocket/target/classes/com/dingtalk/open/app/stream/network/rsocket/ReceiverSocket.class create mode 100644 app-stream-network/app-stream-network-rsocket/target/classes/com/dingtalk/open/app/stream/network/rsocket/RsocketTransportConnector.class create mode 100644 app-stream-network/app-stream-network-rsocket/target/classes/com/dingtalk/open/app/stream/network/rsocket/SetupPayload.class create mode 100644 app-stream-network/app-stream-network-rsocket/target/maven-archiver/pom.properties create mode 100644 app-stream-network/app-stream-network-ws/pom.xml create mode 100644 app-stream-network/app-stream-network-ws/src/main/java/com/dingtalk/open/app/stream/network/ws/KeepAliveHandler.java create mode 100644 app-stream-network/app-stream-network-ws/src/main/java/com/dingtalk/open/app/stream/network/ws/NettyClientHandler.java create mode 100644 app-stream-network/app-stream-network-ws/src/main/java/com/dingtalk/open/app/stream/network/ws/ProtocolConnectHandler.java create mode 100644 app-stream-network/app-stream-network-ws/src/main/java/com/dingtalk/open/app/stream/network/ws/ProtocolFrameHandler.java create mode 100644 app-stream-network/app-stream-network-ws/src/main/java/com/dingtalk/open/app/stream/network/ws/WebSocketContext.java create mode 100644 app-stream-network/app-stream-network-ws/src/main/java/com/dingtalk/open/app/stream/network/ws/WebSocketSession.java create mode 100644 app-stream-network/app-stream-network-ws/src/main/java/com/dingtalk/open/app/stream/network/ws/WebsocketIdleHandler.java create mode 100644 app-stream-network/app-stream-network-ws/src/main/java/com/dingtalk/open/app/stream/network/ws/WebsocketTransportConnector.java create mode 100644 app-stream-network/app-stream-network-ws/src/main/resources/META-INF/services/com.dingtalk.open.app.stream.network.api.TransportConnector create mode 100644 app-stream-network/app-stream-network-ws/target/app-stream-network-ws-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 app-stream-network/app-stream-network-ws/target/app-stream-network-ws-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 app-stream-network/app-stream-network-ws/target/app-stream-network-ws-1.0.8-SNAPSHOT-sources.jar create mode 100644 app-stream-network/app-stream-network-ws/target/app-stream-network-ws-1.0.8-SNAPSHOT-sources.jar.asc create mode 100644 app-stream-network/app-stream-network-ws/target/app-stream-network-ws-1.0.8-SNAPSHOT.jar create mode 100644 app-stream-network/app-stream-network-ws/target/app-stream-network-ws-1.0.8-SNAPSHOT.jar.asc create mode 100644 app-stream-network/app-stream-network-ws/target/app-stream-network-ws-1.0.8-SNAPSHOT.pom create mode 100644 app-stream-network/app-stream-network-ws/target/app-stream-network-ws-1.0.8-SNAPSHOT.pom.asc create mode 100644 app-stream-network/app-stream-network-ws/target/classes/META-INF/services/com.dingtalk.open.app.stream.network.api.TransportConnector create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/KeepAliveHandler$1.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/KeepAliveHandler$PingTask.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/KeepAliveHandler.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/NettyClientHandler.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/ProtocolConnectHandler.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/ProtocolFrameHandler.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/WebSocketContext.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/WebSocketSession.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/WebsocketIdleHandler.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/WebsocketTransportConnector$1.class create mode 100644 app-stream-network/app-stream-network-ws/target/classes/com/dingtalk/open/app/stream/network/ws/WebsocketTransportConnector.class create mode 100644 app-stream-network/app-stream-network-ws/target/maven-archiver/pom.properties create mode 100644 app-stream-network/pom.xml create mode 100644 app-stream-network/target/app-stream-network-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 app-stream-network/target/app-stream-network-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 app-stream-network/target/app-stream-network-1.0.8-SNAPSHOT.pom create mode 100644 app-stream-network/target/app-stream-network-1.0.8-SNAPSHOT.pom.asc create mode 100644 app-stream-network/target/maven-archiver/pom.properties create mode 100644 app-stream-protocol/pom.xml create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/CommandType.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/ContentType.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/DefaultProtocolRequestFacade.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/HeaderNames.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/ProtocolRequest.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/ProtocolRequestFacade.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/ProtocolResponse.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/SpecificationVersion.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/StringUtils.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/callback/CallbackResponsePayload.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/event/AckPayload.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/event/EventAckStatus.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/event/ResponsePayload.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/system/DisconnectPayload.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/system/SystemTopic.java create mode 100644 app-stream-protocol/src/main/java/com/dingtalk/open/app/stream/protocol/system/ping/PingPayload.java create mode 100644 app-stream-protocol/target/app-stream-protocol-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 app-stream-protocol/target/app-stream-protocol-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 app-stream-protocol/target/app-stream-protocol-1.0.8-SNAPSHOT-sources.jar create mode 100644 app-stream-protocol/target/app-stream-protocol-1.0.8-SNAPSHOT-sources.jar.asc create mode 100644 app-stream-protocol/target/app-stream-protocol-1.0.8-SNAPSHOT.jar create mode 100644 app-stream-protocol/target/app-stream-protocol-1.0.8-SNAPSHOT.jar.asc create mode 100644 app-stream-protocol/target/app-stream-protocol-1.0.8-SNAPSHOT.pom create mode 100644 app-stream-protocol/target/app-stream-protocol-1.0.8-SNAPSHOT.pom.asc create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/CommandType.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/ContentType.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/DefaultProtocolRequestFacade.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/HeaderNames.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/ProtocolRequest.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/ProtocolRequestFacade.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/ProtocolResponse.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/SpecificationVersion.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/StringUtils.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/callback/CallbackResponsePayload.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/event/AckPayload.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/event/EventAckStatus.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/event/ResponsePayload.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/system/DisconnectPayload.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/system/SystemTopic.class create mode 100644 app-stream-protocol/target/classes/com/dingtalk/open/app/stream/protocol/system/ping/PingPayload.class create mode 100644 app-stream-protocol/target/maven-archiver/pom.properties create mode 100644 dingtalk-stream/pom.xml create mode 100644 dingtalk-stream/target/dingtalk-stream-1.0.8-SNAPSHOT-javadoc.jar create mode 100644 dingtalk-stream/target/dingtalk-stream-1.0.8-SNAPSHOT-javadoc.jar.asc create mode 100644 dingtalk-stream/target/dingtalk-stream-1.0.8-SNAPSHOT-sources.jar create mode 100644 dingtalk-stream/target/dingtalk-stream-1.0.8-SNAPSHOT-sources.jar.asc create mode 100644 dingtalk-stream/target/dingtalk-stream-1.0.8-SNAPSHOT.jar create mode 100644 dingtalk-stream/target/dingtalk-stream-1.0.8-SNAPSHOT.jar.asc create mode 100644 dingtalk-stream/target/dingtalk-stream-1.0.8-SNAPSHOT.pom create mode 100644 dingtalk-stream/target/dingtalk-stream-1.0.8-SNAPSHOT.pom.asc create mode 100644 dingtalk-stream/target/maven-archiver/pom.properties create mode 100644 dingtalk-stream/target/original-dingtalk-stream-1.0.8-SNAPSHOT.jar create mode 100644 pom.xml create mode 100644 version.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0c74040 --- /dev/null +++ b/.gitignore @@ -0,0 +1,204 @@ +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Eclipse template +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +### macOS template +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +./.idea/* +./.idea +.idea/ + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3dd18cc --- /dev/null +++ b/LICENSE @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright © 2023 钉钉开放平台 + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README b/README new file mode 100644 index 0000000..3e2154d --- /dev/null +++ b/README @@ -0,0 +1 @@ +## 钉钉开放平台JAVA客户端 \ No newline at end of file diff --git a/app-stream-api/pom.xml b/app-stream-api/pom.xml new file mode 100644 index 0000000..8647f46 --- /dev/null +++ b/app-stream-api/pom.xml @@ -0,0 +1,34 @@ + + + + open-app-stream-client + com.dingtalk.open + 1.0.7 + ../pom.xml + + 4.0.0 + app-stream-api + + + + junit + junit + + + com.dingtalk.open + app-stream-network-core + ${project.parent.version} + + + com.dingtalk.open + app-stream-network-ws + ${project.parent.version} + + + com.alibaba + fastjson + + + \ No newline at end of file diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/ClientOption.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/ClientOption.java new file mode 100644 index 0000000..4f9d886 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/ClientOption.java @@ -0,0 +1,64 @@ +package com.dingtalk.open.app.api; + +/** + * @author feiyin + * @date 2023/3/1 + */ +class ClientOption { + /** + * 最大连接数 + */ + private int maxConnectionCount; + /** + * 连接生命周期 ms + */ + private int connectionTTL; + /** + * 建连超时时间 + */ + private long connectTimeout; + + private String openApiHost; + + private KeepAliveOption keepAliveOption; + + public int getMaxConnectionCount() { + return maxConnectionCount; + } + + public void setMaxConnectionCount(int maxConnectionCount) { + this.maxConnectionCount = maxConnectionCount; + } + + public int getConnectionTTL() { + return connectionTTL; + } + + public void setConnectionTTL(int connectionTTL) { + this.connectionTTL = connectionTTL; + } + + public String getOpenApiHost() { + return openApiHost; + } + + public void setOpenApiHost(String openApiHost) { + this.openApiHost = openApiHost; + } + + public KeepAliveOption getKeepAliveOption() { + return keepAliveOption; + } + + public void setKeepAliveOption(KeepAliveOption keepAliveOption) { + this.keepAliveOption = keepAliveOption; + } + + public long getConnectTimeout() { + return connectTimeout; + } + + public void setConnectTimeout(long connectTimeout) { + this.connectTimeout = connectTimeout; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/DingTalkAppError.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/DingTalkAppError.java new file mode 100644 index 0000000..1bf95d3 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/DingTalkAppError.java @@ -0,0 +1,80 @@ +package com.dingtalk.open.app.api; + +/** + * @author feiyin + * @date 2023/3/2 + */ +public enum DingTalkAppError { + + /** + * 异常信息 + */ + ILLEGAL_PARAM_ERROR(400, "10000", "illegal param"), + + ILLEGAL_URL(400, "10001", "illegal url"), + + HTTP_ERROR_RESPONSE(500, "10002", "http failed status"), + + ILLEGAL_PROTOCOL(400, "10003", "illegal protocol"), + /** + * 未知content-type + */ + UNKNOWN_CONTENT_TYPE(400, "10004", "unknown content type"), + + + BAD_REQUEST_TYPE(400, "10005", "bad request data type"), + + + ILLEGAL_CALLBACK(400, "10006", "illegal callback implementation"), + + + REFLECTION_ERROR(500, "10008", " reflection error"), + + + TOPIC_NOT_EXIST(404, "10009", "topic not exist"), + + TYPE_NOT_EXIST(404, "100010", "type not exist"), + + DUPLICATE_TOPIC_ERROR(500, "10011", "duplicate topic"), + + LAMBDA_PARSE_FAILED(500, "10012", "not valid lambda"), + + ILLEGAL_KEEP_ALIVE_IDLE(400, "10013", "keep alive idle can not be less than 1000 millisecond"), + + + CLIENT_STATE_ERROR(500, "10014", "client state error"), + + + /** + * 未知错误 + */ + UNKNOWN_ERROR(500, "99999", "unknown error"); + + private final int code; + + private final String errorCode; + private final String message; + + DingTalkAppError(int code, String errorCode, String message) { + this.code = code; + this.errorCode = errorCode; + this.message = message; + } + + public String getErrorCode() { + return this.errorCode; + } + + + public int getCode() { + return this.code; + } + + public String getMessage() { + return this.message; + } + + public OpenDingTalkAppException toException(String... appendMessage) { + return new OpenDingTalkAppException(this, appendMessage); + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/GenericEventListener.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/GenericEventListener.java new file mode 100644 index 0000000..1645c64 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/GenericEventListener.java @@ -0,0 +1,24 @@ +package com.dingtalk.open.app.api; + +import com.dingtalk.open.app.api.message.GenericOpenDingTalkEvent; +import com.dingtalk.open.app.stream.protocol.event.EventAckStatus; + +/** + * @author feiyin + * @date 2022/12/23 + */ +public interface GenericEventListener { + + + GenericEventListener DEFAULT = event -> EventAckStatus.SUCCESS; + + /** + * 收到事件 + * + * @param event + * @return + */ + EventAckStatus onEvent(final GenericOpenDingTalkEvent event); + + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/KeepAliveOption.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/KeepAliveOption.java new file mode 100644 index 0000000..0857d7a --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/KeepAliveOption.java @@ -0,0 +1,38 @@ +package com.dingtalk.open.app.api; + +/** + * @author feiyin + * @date 2023/9/4 + */ +public class KeepAliveOption { + + /** + * 最小时间为1s + */ + private static final Long MINI_KEEP_ALIVE_IDLE = 1000L; + private Long keepAliveIdle = 120 * 1000L; + + public static KeepAliveOption create() { + return new KeepAliveOption(); + } + + protected KeepAliveOption() { + + } + + public Long getKeepAliveIdleMill() { + return keepAliveIdle; + } + /** + * 毫秒 + * + * @param keepAliveIdle + */ + public KeepAliveOption withKeepAliveIdleMill(Long keepAliveIdle) { + if (keepAliveIdle < MINI_KEEP_ALIVE_IDLE) { + throw new OpenDingTalkAppException(DingTalkAppError.ILLEGAL_KEEP_ALIVE_IDLE); + } + this.keepAliveIdle = keepAliveIdle; + return this; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkAppException.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkAppException.java new file mode 100644 index 0000000..4561c48 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkAppException.java @@ -0,0 +1,33 @@ +package com.dingtalk.open.app.api; + +import com.dingtalk.open.app.stream.network.api.ServiceException; + +/** + * @author feiyin + * @date 2023/3/2 + */ +public class OpenDingTalkAppException extends ServiceException { + private final int code; + private final String errorCode; + private final String message; + public OpenDingTalkAppException(DingTalkAppError dingTalkAppError, String... appendMessage) { + this.code = dingTalkAppError.getCode(); + this.errorCode = dingTalkAppError.getErrorCode(); + this.message = (appendMessage != null && appendMessage.length > 0) ? dingTalkAppError.getMessage() + appendMessage[0] : dingTalkAppError.getMessage(); + } + + + public String getErrorCode() { + return this.errorCode; + } + + @Override + public String getMessage() { + return message; + } + + @Override + public int getCode() { + return this.code; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkClient.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkClient.java new file mode 100644 index 0000000..7df1c8d --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkClient.java @@ -0,0 +1,24 @@ +package com.dingtalk.open.app.api; + +/** + * 钉钉客户端 + * + * @author feiyin + * @date 2022/12/23 + */ +public interface OpenDingTalkClient { + /** + * 启动客户端 + * + * @throws Exception + */ + void start() throws Exception; + + /** + * 关闭客户端 + * + * @throws Exception + */ + void stop() throws Exception; + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkStreamClient.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkStreamClient.java new file mode 100644 index 0000000..d3690f2 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkStreamClient.java @@ -0,0 +1,100 @@ +package com.dingtalk.open.app.api; + +import com.dingtalk.open.app.api.command.CommandDispatcher; +import com.dingtalk.open.app.api.open.OpenApiClient; +import com.dingtalk.open.app.api.open.OpenApiClientBuilder; +import com.dingtalk.open.app.api.open.OpenConnectionRequest; +import com.dingtalk.open.app.api.open.OpenConnectionResponse; +import com.dingtalk.open.app.api.protocol.AppServiceListener; +import com.dingtalk.open.app.api.security.DingTalkCredential; +import com.dingtalk.open.app.api.util.IpUtils; +import com.dingtalk.open.app.stream.network.api.ClientConnectionListener; +import com.dingtalk.open.app.stream.network.api.EndPointConnection; +import com.dingtalk.open.app.stream.network.core.EndPointConnectionFactory; +import com.dingtalk.open.app.stream.network.core.NetWorkService; +import com.dingtalk.open.app.stream.network.core.Subscription; + +import java.util.Collections; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.atomic.AtomicReference; + + +/** + * @author feiyin + * @date 2022/12/26 + */ +class OpenDingTalkStreamClient implements OpenDingTalkClient { + private final DingTalkCredential credential; + private final CommandDispatcher dispatcher; + private final ExecutorService executor; + private final ClientOption option; + private NetWorkService netWorkService; + private OpenApiClient openApiClient; + private Set subscriptions; + private final AtomicReference status; + + public OpenDingTalkStreamClient(DingTalkCredential credential, CommandDispatcher dispatcher, ExecutorService executor, ClientOption option, Set subscriptions) { + this.credential = credential; + this.dispatcher = dispatcher; + this.executor = executor; + this.option = option; + this.subscriptions = Collections.unmodifiableSet(subscriptions); + this.status = new AtomicReference<>(Status.INIT); + } + + @Override + public synchronized void start() throws OpenDingTalkAppException { + if (status.get() == Status.INIT) { + this.openApiClient = OpenApiClientBuilder.create().setHost(option.getOpenApiHost()).setTimeout(option.getConnectionTTL()).build(); + final EndPointConnectionFactory factory = () -> openConnection(this.credential, subscriptions); + ClientConnectionListener listener = new AppServiceListener(dispatcher, executor); + this.netWorkService = new NetWorkService(factory, listener, option.getMaxConnectionCount(), option.getConnectionTTL(), option.getConnectTimeout(),option.getKeepAliveOption().getKeepAliveIdleMill()); + this.netWorkService.start(); + this.status.set(Status.ACTIVE); + } else if (status.get() == Status.INACTIVE) { + throw new OpenDingTalkAppException(DingTalkAppError.CLIENT_STATE_ERROR); + } + } + + @Override + public synchronized void stop() throws Exception { + if (status.get() == Status.ACTIVE) { + if (this.netWorkService != null) { + this.netWorkService.shutdown(); + } + if (executor != null) { + this.executor.shutdown(); + } + status.set(Status.INACTIVE); + } + } + + private EndPointConnection openConnection(DingTalkCredential credential, Set subscriptions) throws Exception { + OpenConnectionRequest request = new OpenConnectionRequest(); + request.setClientId(credential.getClientId()); + request.setClientSecret(credential.getClientSecret()); + request.setUa(UserAgent.getUserAgent().getUa()); + request.setSubscriptions(subscriptions); + request.setLocalIp(IpUtils.getLocalIP()); + OpenConnectionResponse response = openApiClient.openConnection(request); + return new EndPointConnection(credential.getClientId(), response.getEndpoint(), response.getTicket()); + } + + + enum Status { + /** + * 初始化 + */ + INIT, + /** + * 启动 + */ + ACTIVE, + /** + * 关闭 + */ + INACTIVE + + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkStreamClientBuilder.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkStreamClientBuilder.java new file mode 100644 index 0000000..13ea84f --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/OpenDingTalkStreamClientBuilder.java @@ -0,0 +1,118 @@ +package com.dingtalk.open.app.api; + +import com.dingtalk.open.app.api.command.CommandDispatcher; +import com.dingtalk.open.app.api.util.ThreadUtil; +import com.dingtalk.open.app.api.callback.CallbackCommandExecutor; +import com.dingtalk.open.app.api.callback.OpenDingTalkCallbackListener; +import com.dingtalk.open.app.api.protocol.CommandExecutor; +import com.dingtalk.open.app.api.protocol.EventCommandExecutor; +import com.dingtalk.open.app.api.security.DingTalkCredential; +import com.dingtalk.open.app.stream.network.core.Subscription; +import com.dingtalk.open.app.stream.protocol.CommandType; + +import java.util.*; +import java.util.concurrent.ExecutorService; + +/** + * @author feiyin + * @date 2023/1/3 + */ +public class OpenDingTalkStreamClientBuilder { + private int consumeThreads = 16; + private final Map commands = new HashMap<>(); + + private final Set subscriptions = new HashSet<>(); + private DingTalkCredential credential; + private int maxConnectionCount = 1; + private int connectionTimeToLive = 6 * 60 * 60 * 1000; + private long connectTimeout = 3 * 1000L; + + private KeepAliveOption keepAliveOption = new KeepAliveOption(); + + private String openApiHost = "https://api.dingtalk.com"; + + private OpenDingTalkStreamClientBuilder() { + } + + public static OpenDingTalkStreamClientBuilder custom() { + return new OpenDingTalkStreamClientBuilder(); + } + + public OpenDingTalkStreamClientBuilder consumeThreads(int threads) { + this.consumeThreads = Preconditions.checkPositive(threads); + return this; + } + + public OpenDingTalkStreamClientBuilder registerAllEventListener(GenericEventListener listener) { + Preconditions.notNull(listener); + this.commands.put(CommandType.EVENT, new EventCommandExecutor(Preconditions.notNull(listener))); + subscribe(CommandType.EVENT, "*"); + return this; + } + + public OpenDingTalkStreamClientBuilder keepAlive(KeepAliveOption keepAliveOption) { + this.keepAliveOption = Preconditions.notNull(keepAliveOption); + return this; + } + + + public OpenDingTalkStreamClientBuilder registerCallbackListener(String topic, OpenDingTalkCallbackListener callbackListener) { + Preconditions.notNull(topic); + Preconditions.notNull(callbackListener); + CallbackCommandExecutor executor = (CallbackCommandExecutor) this.commands.computeIfAbsent(CommandType.CALLBACK, (key) -> new CallbackCommandExecutor()); + executor.register(topic, callbackListener); + subscribe(CommandType.CALLBACK, topic); + return this; + } + + + public OpenDingTalkStreamClientBuilder maxConnectionCounts(int maxConnectionCount) { + this.maxConnectionCount = Preconditions.checkPositive(maxConnectionCount); + return this; + } + + public OpenDingTalkStreamClientBuilder credential(DingTalkCredential credential) { + this.credential = Preconditions.notNull(credential); + return this; + } + + @Deprecated + public OpenDingTalkStreamClientBuilder timeout(int timeout) { + this.connectTimeout = Preconditions.checkPositive(timeout); + return this; + } + + + public OpenDingTalkStreamClientBuilder connectTimeout(long connectTimeout) { + this.connectTimeout = connectTimeout; + return this; + } + + + private OpenDingTalkStreamClientBuilder openApiHost(String host) { + this.openApiHost = Preconditions.notNull(host); + return this; + } + + + public OpenDingTalkStreamClientBuilder preEnv() { + return this.openApiHost("https://pre-api.dingtalk.com"); + } + + public OpenDingTalkClient build() { + ClientOption option = new ClientOption(); + option.setConnectTimeout(connectTimeout); + option.setMaxConnectionCount(maxConnectionCount); + option.setConnectionTTL(connectionTimeToLive); + option.setOpenApiHost(openApiHost); + option.setKeepAliveOption(keepAliveOption); + ExecutorService executor = ThreadUtil.newFixedExecutor(consumeThreads, "DingTalk-Consumer"); + return new OpenDingTalkStreamClient(credential, new CommandDispatcher(commands), executor, option, subscriptions); + } + + private void subscribe(CommandType type, String topic) { + if (!subscriptions.add(new Subscription(type, topic))) { + throw new OpenDingTalkAppException(DingTalkAppError.DUPLICATE_TOPIC_ERROR, type.name(), topic); + } + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/Preconditions.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/Preconditions.java new file mode 100644 index 0000000..d8a903c --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/Preconditions.java @@ -0,0 +1,29 @@ +package com.dingtalk.open.app.api; + +/** + * @author feiyin + * @date 2023/3/2 + */ +public class Preconditions { + + public static long checkPositive(long value) { + if (value <= 0) { + throw DingTalkAppError.ILLEGAL_PARAM_ERROR.toException("value must greater than zero"); + } + return value; + } + + public static int checkPositive(int value) { + if (value <= 0) { + throw DingTalkAppError.ILLEGAL_PARAM_ERROR.toException("value must greater than zero"); + } + return value; + } + + public static T notNull(T value) { + if (value == null) { + throw DingTalkAppError.ILLEGAL_PARAM_ERROR.toException("value can not be null"); + } + return value; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/UserAgent.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/UserAgent.java new file mode 100644 index 0000000..0e704b1 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/UserAgent.java @@ -0,0 +1,26 @@ +package com.dingtalk.open.app.api; + +/** + * @author feiyin + * @date 2023/3/29 + */ +public class UserAgent { + + private final String name = "java"; + private String version; + + private UserAgent() { + + } + + public static UserAgent getUserAgent() { + UserAgent userAgent = new UserAgent(); + userAgent.version = UserAgent.class.getPackage().getImplementationVersion(); + return userAgent; + } + + public String getUa() { + return this.name + "/" + this.version; + } + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackCommandExecutor.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackCommandExecutor.java new file mode 100644 index 0000000..e9184b1 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackCommandExecutor.java @@ -0,0 +1,58 @@ +package com.dingtalk.open.app.api.callback; + +import com.dingtalk.open.app.api.DingTalkAppError; +import com.dingtalk.open.app.api.OpenDingTalkAppException; +import com.dingtalk.open.app.api.protocol.MessageConverter; +import com.dingtalk.open.app.api.protocol.CommandExecutor; +import com.dingtalk.open.app.api.protocol.MessageConverterMapping; +import com.dingtalk.open.app.stream.network.api.Context; +import com.dingtalk.open.app.stream.network.api.logger.InternalLogger; +import com.dingtalk.open.app.stream.network.api.logger.InternalLoggerFactory; +import com.dingtalk.open.app.stream.protocol.ContentType; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author feiyin + * @date 2023/3/17 + */ +public class CallbackCommandExecutor implements CommandExecutor { + + private static final InternalLogger LOGGER = InternalLoggerFactory.getLogger(CallbackCommandExecutor.class); + + public final Map callbackDescriptors; + + public CallbackCommandExecutor() { + this.callbackDescriptors = new HashMap<>(); + } + + public void register(String service, OpenDingTalkCallbackListener callback) { + callbackDescriptors.put(service, CallbackDescriptor.build(callback)); + } + + @Override + public void execute(Context context) { + CallbackDescriptor descriptor = callbackDescriptors.get(context.getRequest().getTopic()); + if (descriptor == null) { + context.exception(new OpenDingTalkAppException(DingTalkAppError.TOPIC_NOT_EXIST)); + return; + } + + MessageConverter converter = MessageConverterMapping.getConverter(ContentType.of(context.getRequest().getContentType())); + if (converter == null) { + context.exception(DingTalkAppError.UNKNOWN_CONTENT_TYPE.toException()); + return; + } + Object parameter = converter.convert(context.getRequest().getData(), descriptor.getParameterType()); + Object payload; + try { + payload = descriptor.getMethod().execute(parameter); + } catch (Exception e) { + LOGGER.error("[DingTalk] execute callback failed, topic={}", context.getRequest().getTopic(), e); + context.exception(e); + return; + } + context.replay(payload); + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackDescriptor.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackDescriptor.java new file mode 100644 index 0000000..263e112 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackDescriptor.java @@ -0,0 +1,59 @@ +package com.dingtalk.open.app.api.callback; + +import com.dingtalk.open.app.api.DingTalkAppError; +import com.dingtalk.open.app.api.OpenDingTalkAppException; +import com.dingtalk.open.app.api.common.AopUtils; +import com.dingtalk.open.app.api.common.LambdaUtils; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.List; + +/** + * @author feiyin + * @date 2023/3/17 + */ +class CallbackDescriptor { + private final CallbackMethod method; + private final Type parameterType; + + private CallbackDescriptor(CallbackMethod callbackMethod, Type parameterType) { + this.method = callbackMethod; + this.parameterType = parameterType; + } + + public static CallbackDescriptor build(OpenDingTalkCallbackListener callback) { + Type target = null; + if (LambdaUtils.isLambda(callback)) { + List types = LambdaUtils.getLambdaParameterTypes(callback); + if (types == null || types.size() != 1) { + throw new OpenDingTalkAppException(DingTalkAppError.LAMBDA_PARSE_FAILED); + } + target = types.get(0); + } else { + Type[] types = AopUtils.getTargetClass(callback).getGenericInterfaces(); + for (Type type : types) { + if (type instanceof ParameterizedType) { + Class rawType = (Class) ((ParameterizedType) type).getRawType(); + if (OpenDingTalkCallbackListener.class.isAssignableFrom(rawType)) { + target = ((ParameterizedType) type).getActualTypeArguments()[0]; + break; + } + } + } + } + if (target == null) { + throw new OpenDingTalkAppException(DingTalkAppError.ILLEGAL_CALLBACK); + } + return new CallbackDescriptor(new SimpleMethod(callback), target); + } + + public Type getParameterType() { + return this.parameterType; + } + + + public CallbackMethod getMethod() { + return this.method; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackMethod.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackMethod.java new file mode 100644 index 0000000..9b9e27b --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/CallbackMethod.java @@ -0,0 +1,18 @@ +package com.dingtalk.open.app.api.callback; + +import com.dingtalk.open.app.stream.protocol.callback.CallbackResponsePayload; + +/** + * @author feiyin + * @date 2023/3/17 + */ +interface CallbackMethod { + + /** + * 执行回调 + * + * @param req + * @return + */ + CallbackResponsePayload execute(Object req); +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/JsonMarshaller.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/JsonMarshaller.java new file mode 100644 index 0000000..342d226 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/JsonMarshaller.java @@ -0,0 +1,22 @@ +package com.dingtalk.open.app.api.callback; + +import com.alibaba.fastjson.JSON; +import com.dingtalk.open.app.api.Preconditions; + +import java.lang.reflect.Type; + +/** + * @author feiyin + * @date 2023/3/17 + */ +class JsonMarshaller implements Marshaller{ + private final Type type; + + public JsonMarshaller(Type type) { + this.type = Preconditions.notNull(type); + } + @Override + public T marshal(Object data) { + return JSON.parseObject(JSON.toJSONString(data), type); + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/Marshaller.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/Marshaller.java new file mode 100644 index 0000000..e68416d --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/Marshaller.java @@ -0,0 +1,17 @@ +package com.dingtalk.open.app.api.callback; + +/** + * @author feiyin + * @date 2023/3/17 + */ +interface Marshaller { + + /** + * 序列化 + * + * @param data + * @param + * @return + */ + T marshal(Object data); +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/OpenDingTalkCallbackListener.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/OpenDingTalkCallbackListener.java new file mode 100644 index 0000000..94a66f2 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/OpenDingTalkCallbackListener.java @@ -0,0 +1,18 @@ +package com.dingtalk.open.app.api.callback; + +import java.io.Serializable; + +/** + * @author feiyin + * @date 2023/4/3 + */ +public interface OpenDingTalkCallbackListener extends Serializable { + + /** + * 执行回调 + * + * @param param + * @return + */ + Output execute(Input param); +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/SimpleMethod.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/SimpleMethod.java new file mode 100644 index 0000000..124d43f --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/callback/SimpleMethod.java @@ -0,0 +1,25 @@ +package com.dingtalk.open.app.api.callback; + +import com.dingtalk.open.app.stream.protocol.callback.CallbackResponsePayload; + +/** + * @author feiyin + * @date 2023/3/17 + */ +class SimpleMethod implements CallbackMethod { + + private final OpenDingTalkCallbackListener callback; + + @SuppressWarnings("unchecked") + public SimpleMethod(OpenDingTalkCallbackListener callback) { + this.callback = callback; + } + + @SuppressWarnings("unchecked") + @Override + public CallbackResponsePayload execute(Object req) { + CallbackResponsePayload payload = new CallbackResponsePayload(); + payload.setResponse(callback.execute(req)); + return payload; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/command/Command.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/command/Command.java new file mode 100644 index 0000000..b155962 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/command/Command.java @@ -0,0 +1,20 @@ +package com.dingtalk.open.app.api.command; + +import com.dingtalk.open.app.stream.protocol.ProtocolResponse; +import com.dingtalk.open.app.stream.protocol.ProtocolRequest; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public interface Command { + + /** + * 处理数据 + * + * @param request + * @return + */ + ProtocolResponse execute(ProtocolRequest request); + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/command/CommandDispatcher.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/command/CommandDispatcher.java new file mode 100644 index 0000000..50e31b0 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/command/CommandDispatcher.java @@ -0,0 +1,40 @@ +package com.dingtalk.open.app.api.command; + +import com.dingtalk.open.app.api.DingTalkAppError; +import com.dingtalk.open.app.api.GenericEventListener; +import com.dingtalk.open.app.api.protocol.CommandExecutor; +import com.dingtalk.open.app.api.protocol.EventCommandExecutor; +import com.dingtalk.open.app.api.protocol.SystemCommandExecutor; +import com.dingtalk.open.app.stream.network.api.Context; +import com.dingtalk.open.app.stream.protocol.CommandType; + +import java.util.Collections; +import java.util.Map; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public class CommandDispatcher { + + private final Map registry; + + public CommandDispatcher(Map registry) { + registry.putIfAbsent(CommandType.SYSTEM, new SystemCommandExecutor()); + this.registry = Collections.unmodifiableMap(registry); + } + + /** + * 执行命令 + * + * @param context + */ + public void execute(Context context) { + CommandExecutor executor = registry.get(context.getRequest().getType()); + if (executor == null) { + context.exception(DingTalkAppError.TYPE_NOT_EXIST.toException()); + } else { + executor.execute(context); + } + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/common/AopUtils.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/common/AopUtils.java new file mode 100644 index 0000000..b4643cb --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/common/AopUtils.java @@ -0,0 +1,68 @@ +package com.dingtalk.open.app.api.common; + +import com.dingtalk.open.app.api.DingTalkAppError; +import com.dingtalk.open.app.api.OpenDingTalkAppException; + +import java.lang.reflect.Method; + +/** + * @author feiyin + * @date 2023/3/17 + */ +public class AopUtils { + + private static final String SPRING_PROXY = "org.springframework.aop.SpringProxy"; + + private static final String TARGET_CLASS_AWARE = "org.springframework.aop.TargetClassAware"; + + private static final String DECORATING_PROXY = "org.springframework.core.DecoratingProxy"; + + public static Class getTargetClass(Object candidate) { + Class result = null; + if (instanceOf(candidate.getClass(), TARGET_CLASS_AWARE)) { + result = (Class) invoke(candidate, TARGET_CLASS_AWARE, "getTargetClass"); + } + + if (result == null) { + if (isCglibProxy(candidate)) { + result = candidate.getClass().getSuperclass(); + } else if (isDecoratingProxy(candidate)) { + result = (Class) invoke(candidate, DECORATING_PROXY, "getDecoratedClass"); + } else { + result = candidate.getClass(); + } + } + + return result; + } + + public static boolean isCglibProxy(Object object) { + return instanceOf(object.getClass(), SPRING_PROXY) && object.getClass().getCanonicalName().contains("$$"); + } + + private static boolean isDecoratingProxy(Object candidate) { + return instanceOf(candidate.getClass(), DECORATING_PROXY); + } + + + private static boolean instanceOf(Class clazz, String interfaceName) { + Class[] superInterfaces = clazz.getInterfaces(); + for (Class interf : superInterfaces) { + if (interf.getCanonicalName().equals(interfaceName)) { + return true; + } + } + return false; + } + + private static Object invoke(Object object, String clazzName, String methodName, Object... args) { + try { + Class klass = Class.forName(clazzName); + Method method = klass.getDeclaredMethod(methodName); + method.setAccessible(true); + return method.invoke(object, args); + } catch (Exception e) { + throw new OpenDingTalkAppException(DingTalkAppError.REFLECTION_ERROR); + } + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/common/LambdaUtils.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/common/LambdaUtils.java new file mode 100644 index 0000000..d86e92f --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/common/LambdaUtils.java @@ -0,0 +1,60 @@ +package com.dingtalk.open.app.api.common; + +import com.dingtalk.open.app.api.DingTalkAppError; +import com.dingtalk.open.app.api.OpenDingTalkAppException; + +import java.lang.invoke.SerializedLambda; +import java.lang.reflect.Method; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** + * @author feiyin + * @date 2023/3/19 + */ +public class LambdaUtils { + private static final Pattern LAMBDA_PATTERN = Pattern.compile(".*\\$\\$Lambda\\$[0-9]+/.*"); + + private static final Pattern PARAMETER_TYPE_PATTERN = Pattern.compile("\\((.*)\\).*"); + + private static final String WRITE_REPLACE = "writeReplace"; + + public static boolean isLambda(Object obj) { + if (obj == null) { + return false; + } + + if (obj.getClass().isSynthetic() && LAMBDA_PATTERN.matcher(obj.getClass().getSimpleName()).matches()) { + return true; + } + return false; + } + + + public static List getLambdaParameterTypes(Object obj) { + try { + Method method = obj.getClass().getDeclaredMethod(WRITE_REPLACE); + method.setAccessible(true); + SerializedLambda lambda = (SerializedLambda) method.invoke(obj); + Matcher matcher = PARAMETER_TYPE_PATTERN.matcher(lambda.getInstantiatedMethodType()); + if (!matcher.find() || matcher.groupCount() != 1) { + throw new OpenDingTalkAppException(DingTalkAppError.LAMBDA_PARSE_FAILED); + } + return Arrays.stream(matcher.group(1).split(";")).filter(s -> !s.isEmpty()).map(s -> s.replace("L", "").replace("/", ".")).map(s -> { + try { + return Class.forName(s); + } catch (ClassNotFoundException e) { + throw new RuntimeException("can not load class", e); + } + }).collect(Collectors.toList()); + } catch (Exception e) { + return new ArrayList<>(); + } + } + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/message/EventHeaders.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/message/EventHeaders.java new file mode 100644 index 0000000..72f7ec1 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/message/EventHeaders.java @@ -0,0 +1,18 @@ +package com.dingtalk.open.app.api.message; + +/** + * @author feiyin + * @date 2023/4/7 + */ +public class EventHeaders { + + public static final String ID = "eventId"; + + public static final String TIME = "eventBornTime"; + + public static final String CORP_ID = "eventCorpId"; + + public static final String APP_ID = "eventUnifiedAppId"; + + public static final String TYPE= "eventType"; +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/message/GenericOpenDingTalkEvent.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/message/GenericOpenDingTalkEvent.java new file mode 100644 index 0000000..bdcd075 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/message/GenericOpenDingTalkEvent.java @@ -0,0 +1,70 @@ +package com.dingtalk.open.app.api.message; + +import com.alibaba.fastjson.JSONObject; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public class GenericOpenDingTalkEvent { + + private String eventId; + + private Long eventBornTime; + + private String eventCorpId; + + private String eventType; + + private String eventUnifiedAppId; + + private JSONObject data; + + public String getEventId() { + return eventId; + } + + public void setEventId(String eventId) { + this.eventId = eventId; + } + + public Long getEventBornTime() { + return eventBornTime; + } + + public void setEventBornTime(Long eventBornTime) { + this.eventBornTime = eventBornTime; + } + + public String getEventCorpId() { + return eventCorpId; + } + + public void setEventCorpId(String eventCorpId) { + this.eventCorpId = eventCorpId; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public String getEventUnifiedAppId() { + return eventUnifiedAppId; + } + + public void setEventUnifiedAppId(String eventUnifiedAppId) { + this.eventUnifiedAppId = eventUnifiedAppId; + } + + public JSONObject getData() { + return data; + } + + public void setData(JSONObject data) { + this.data = data; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/HttpOpenApiClient.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/HttpOpenApiClient.java new file mode 100644 index 0000000..bf51337 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/HttpOpenApiClient.java @@ -0,0 +1,48 @@ +package com.dingtalk.open.app.api.open; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.dingtalk.open.app.api.DingTalkAppError; +import com.dingtalk.open.app.api.open.http.HttpConstants; +import com.dingtalk.open.app.api.util.IoUtils; + +import java.net.HttpURLConnection; +import java.net.URL; + +/** + * @author feiyin + * @date 2023/2/9 + */ +class HttpOpenApiClient implements OpenApiClient { + + private final String host; + + private final int timeout; + + public HttpOpenApiClient(String host, int timeout) { + this.host = host; + this.timeout = timeout; + } + + @Override + public OpenConnectionResponse openConnection(OpenConnectionRequest request) throws Exception { + final HttpURLConnection connection = (HttpURLConnection) new URL(host + "/v1.0/gateway/connections/open").openConnection(); + connection.setRequestMethod(HttpConstants.METHOD_POST); + connection.setReadTimeout(this.timeout); + connection.setConnectTimeout(this.timeout); + connection.setRequestProperty(HttpConstants.HEADER_CONTENT_TYPE, HttpConstants.CONTENT_TYPE_APPLICATION_JSON); + connection.setRequestProperty(HttpConstants.HEADER_ACCEPT, "application/json"); + connection.setDoInput(true); + connection.setDoOutput(true); + connection.connect(); + connection.getOutputStream().write(JSON.toJSONBytes(request, SerializerFeature.WriteEnumUsingToString)); + connection.getOutputStream().flush(); + if (connection.getResponseCode() == HttpConstants.STATUS_OK) { + byte[] content = IoUtils.readAll(connection.getInputStream()); + return JSON.parseObject(content, OpenConnectionResponse.class); + } else { + byte[] content = IoUtils.readAll(connection.getErrorStream()); + throw DingTalkAppError.HTTP_ERROR_RESPONSE.toException(String.format("status=%s,msg=%s", connection.getResponseCode(), content != null ? new String(content) : "")); + } + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenApiClient.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenApiClient.java new file mode 100644 index 0000000..74fa42a --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenApiClient.java @@ -0,0 +1,18 @@ +package com.dingtalk.open.app.api.open; + +/** + * @author feiyin + * @date 2023/2/9 + */ +public interface OpenApiClient { + /** + * 创建GateWay endpoint + * + * @param request + * @return + * @throws Exception + */ + OpenConnectionResponse openConnection(OpenConnectionRequest request) throws Exception; + + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenApiClientBuilder.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenApiClientBuilder.java new file mode 100644 index 0000000..2075ae9 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenApiClientBuilder.java @@ -0,0 +1,34 @@ +package com.dingtalk.open.app.api.open; + +/** + * @author feiyin + * @date 2023/3/1 + */ +public class OpenApiClientBuilder { + + private OpenApiClientBuilder() { + + } + + public static OpenApiClientBuilder create() { + return new OpenApiClientBuilder(); + } + + public String host; + + private int timeout = 3000; + + public OpenApiClientBuilder setHost(String host) { + this.host = host; + return this; + } + + public OpenApiClientBuilder setTimeout(int timeout) { + this.timeout = timeout; + return this; + } + + public OpenApiClient build() { + return new HttpOpenApiClient(host, timeout); + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenConnectionRequest.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenConnectionRequest.java new file mode 100644 index 0000000..f1dd305 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenConnectionRequest.java @@ -0,0 +1,69 @@ +package com.dingtalk.open.app.api.open; + + +import com.dingtalk.open.app.stream.network.core.Subscription; + +import java.util.Set; + +/** + * @author feiyin + * @date 2023/2/9 + */ +public class OpenConnectionRequest { + /** + * key + */ + private String clientId; + /** + * secret + */ + private String clientSecret; + + private String ua; + + private Set subscriptions; + + private String localIp; + + + public String getClientId() { + return clientId; + } + + public void setClientId(String clientId) { + this.clientId = clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public void setClientSecret(String clientSecret) { + this.clientSecret = clientSecret; + } + + public String getUa() { + return ua; + } + + public void setUa(String ua) { + this.ua = ua; + } + + public Set getSubscriptions() { + return subscriptions; + } + + public void setSubscriptions(Set subscriptions) { + this.subscriptions = subscriptions; + } + + public String getLocalIp() { + return localIp; + } + + public void setLocalIp(String localIp) { + this.localIp = localIp; + } +} + diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenConnectionResponse.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenConnectionResponse.java new file mode 100644 index 0000000..93fb611 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/OpenConnectionResponse.java @@ -0,0 +1,28 @@ +package com.dingtalk.open.app.api.open; + +/** + * @author feiyin + * @date 2023/2/9 + */ +public class OpenConnectionResponse { + + private String endpoint; + + private String ticket; + + public String getEndpoint() { + return endpoint; + } + + public void setEndpoint(String endpoint) { + this.endpoint = endpoint; + } + + public String getTicket() { + return ticket; + } + + public void setTicket(String ticket) { + this.ticket = ticket; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/http/HttpConstants.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/http/HttpConstants.java new file mode 100644 index 0000000..c546911 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/open/http/HttpConstants.java @@ -0,0 +1,20 @@ +package com.dingtalk.open.app.api.open.http; + +/** + * @author feiyin + * @date 2023/3/1 + */ +public class HttpConstants { + + public static final String METHOD_POST = "POST"; + + public static final int CONNECTION_TIME_OUT = 3000; + + public static final int READ_TIME_OUT = 3000; + + public static final int STATUS_OK = 200; + public static final String HEADER_CONTENT_TYPE = "Content-Type"; + public static final String HEADER_ACCEPT = "Accept"; + public static final String CONTENT_TYPE_APPLICATION_JSON = "application/json"; + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/AppServiceListener.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/AppServiceListener.java new file mode 100644 index 0000000..3806746 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/AppServiceListener.java @@ -0,0 +1,36 @@ +package com.dingtalk.open.app.api.protocol; + +import com.dingtalk.open.app.api.Preconditions; +import com.dingtalk.open.app.api.command.CommandDispatcher; +import com.dingtalk.open.app.stream.network.api.ClientConnectionListener; +import com.dingtalk.open.app.stream.network.api.Context; +import com.dingtalk.open.app.stream.network.api.logger.InternalLogger; +import com.dingtalk.open.app.stream.network.api.logger.InternalLoggerFactory; + +import java.util.concurrent.Executor; + +/** + * @author feiyin + * @date 2022/12/28 + */ +public class AppServiceListener implements ClientConnectionListener { + private static final InternalLogger LOGGER = InternalLoggerFactory.getLogger(AppServiceListener.class); + private final CommandDispatcher commandDispatcher; + private final Executor executor; + + public AppServiceListener(CommandDispatcher commandDispatcher, Executor executor) { + this.commandDispatcher = Preconditions.notNull(commandDispatcher); + this.executor = Preconditions.notNull(executor); + } + + @Override + public void receive(Context context) { + this.executor.execute(() -> { + try { + commandDispatcher.execute(context); + } catch (Exception e) { + LOGGER.error("[DingTalk] dispatch command failed", e); + } + }); + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/CommandExecutor.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/CommandExecutor.java new file mode 100644 index 0000000..74cede1 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/CommandExecutor.java @@ -0,0 +1,18 @@ +package com.dingtalk.open.app.api.protocol; + +import com.dingtalk.open.app.stream.network.api.Context; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public interface CommandExecutor { + + /** + * 执行命令 + * + * @param context + */ + void execute(Context context); + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/EventCommandExecutor.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/EventCommandExecutor.java new file mode 100644 index 0000000..2689679 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/EventCommandExecutor.java @@ -0,0 +1,70 @@ +package com.dingtalk.open.app.api.protocol; + +import com.alibaba.fastjson.JSONObject; +import com.dingtalk.open.app.api.DingTalkAppError; +import com.dingtalk.open.app.api.GenericEventListener; +import com.dingtalk.open.app.api.Preconditions; +import com.dingtalk.open.app.api.message.EventHeaders; +import com.dingtalk.open.app.api.message.GenericOpenDingTalkEvent; +import com.dingtalk.open.app.stream.network.api.Context; +import com.dingtalk.open.app.stream.network.api.logger.InternalLogger; +import com.dingtalk.open.app.stream.network.api.logger.InternalLoggerFactory; +import com.dingtalk.open.app.stream.protocol.ContentType; +import com.dingtalk.open.app.stream.protocol.event.AckPayload; +import com.dingtalk.open.app.stream.protocol.event.EventAckStatus; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public class EventCommandExecutor implements CommandExecutor { + private static final InternalLogger LOGGER = InternalLoggerFactory.getLogger(EventCommandExecutor.class); + private final GenericEventListener listener; + + public EventCommandExecutor(GenericEventListener listener) { + this.listener = Preconditions.notNull(listener); + } + + @Override + public void execute(Context context) { + ContentType contentType = ContentType.of(context.getRequest().getContentType()); + if (contentType == null) { + context.exception(DingTalkAppError.UNKNOWN_CONTENT_TYPE.toException()); + return; + } + MessageConverter converter = MessageConverterMapping.getConverter(contentType); + if (converter == null) { + context.exception(DingTalkAppError.UNKNOWN_CONTENT_TYPE.toException()); + return; + } + + final GenericOpenDingTalkEvent message = new GenericOpenDingTalkEvent(); + Object object = converter.convert(context.getRequest().getData(), JSONObject.class); + if (object instanceof JSONObject) { + message.setData((JSONObject) object); + } else { + context.exception(DingTalkAppError.BAD_REQUEST_TYPE.toException()); + return; + } + + message.setEventId(context.getRequest().getHeader(EventHeaders.ID)); + if (context.getRequest().getHeader(EventHeaders.TIME) != null) { + message.setEventBornTime(Long.valueOf(context.getRequest().getHeader(EventHeaders.TIME))); + } + message.setEventCorpId(context.getRequest().getHeader(EventHeaders.CORP_ID)); + message.setEventType(context.getRequest().getHeader(EventHeaders.TYPE)); + message.setEventUnifiedAppId(context.getRequest().getHeader(EventHeaders.APP_ID)); + message.setData((JSONObject) object); + EventAckStatus status; + try { + status = listener.onEvent(message); + } catch (Exception e) { + LOGGER.error("[DingTalk] consume message failed, eventId={}", message.getEventId(), e); + context.exception(e); + return; + } + AckPayload ackPayload = new AckPayload(); + ackPayload.setStatus(status); + context.replay(ackPayload); + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/JsonMessageConverter.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/JsonMessageConverter.java new file mode 100644 index 0000000..c77952d --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/JsonMessageConverter.java @@ -0,0 +1,20 @@ +package com.dingtalk.open.app.api.protocol; + +import com.alibaba.fastjson.JSON; + +import java.lang.reflect.Type; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public class JsonMessageConverter implements MessageConverter { + + @Override + public T convert(String data, Type type) { + if (data == null) { + return null; + } + return JSON.parseObject(data, type); + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/MessageConverter.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/MessageConverter.java new file mode 100644 index 0000000..98a1e76 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/MessageConverter.java @@ -0,0 +1,22 @@ +package com.dingtalk.open.app.api.protocol; + +import java.lang.reflect.Type; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public interface MessageConverter { + + /** + * 转换器 + * + * @param data + * @param type + * @param + * @return + */ + T convert(String data, Type type); + + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/MessageConverterMapping.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/MessageConverterMapping.java new file mode 100644 index 0000000..ea4e346 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/MessageConverterMapping.java @@ -0,0 +1,24 @@ +package com.dingtalk.open.app.api.protocol; + +import com.dingtalk.open.app.stream.protocol.ContentType; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public class MessageConverterMapping { + + private static final Map MAPPING = new HashMap<>(); + + static { + MAPPING.put(ContentType.APPLICATION_JSON, new JsonMessageConverter()); + } + + public static MessageConverter getConverter(ContentType contentType) { + return MAPPING.get(contentType); + } + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/OpenBusinessType.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/OpenBusinessType.java new file mode 100644 index 0000000..ab605e9 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/OpenBusinessType.java @@ -0,0 +1,34 @@ +package com.dingtalk.open.app.api.protocol; + +/** + * 开放平台业务类型 + * + * @author feiyin + * @date 2022/12/28 + */ +public enum OpenBusinessType { + + /** + * 心跳 + */ + PING, + + /** + * 钉钉事件 + */ + EVENT, + /** + * http回调 + */ + CALLBACK; + + public static OpenBusinessType of(String type) { + for (OpenBusinessType value : OpenBusinessType.values()) { + if (value.name().equalsIgnoreCase(type)) { + return value; + } + } + return null; + } + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/SystemCommandExecutor.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/SystemCommandExecutor.java new file mode 100644 index 0000000..cd4220c --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/protocol/SystemCommandExecutor.java @@ -0,0 +1,30 @@ +package com.dingtalk.open.app.api.protocol; + +import com.alibaba.fastjson.JSON; +import com.dingtalk.open.app.stream.network.api.Context; +import com.dingtalk.open.app.stream.network.api.logger.InternalLogger; +import com.dingtalk.open.app.stream.network.api.logger.InternalLoggerFactory; +import com.dingtalk.open.app.stream.protocol.system.DisconnectPayload; +import com.dingtalk.open.app.stream.protocol.system.SystemTopic; + +/** + * @author feiyin + * @date 2023/3/7 + */ +public class SystemCommandExecutor implements CommandExecutor { + + private static final InternalLogger LOGGER = InternalLoggerFactory.getLogger(SystemCommandExecutor.class); + + @Override + public void execute(Context context) { + if (SystemTopic.PING.equals(context.getRequest().getTopic())) { + context.replay(JSON.parseObject(context.getRequest().getData())); + return; + } + + if (SystemTopic.DISCONNECT.equals(context.getRequest().getTopic())) { + DisconnectPayload payload = JSON.parseObject(context.getRequest().getData(), DisconnectPayload.class); + LOGGER.info("[DingTalk] receive connection close info, connection will close later, connectionId={}, reason={}", context.connectionId(), payload.getReason()); + } + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/AbstractDingTalkCredential.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/AbstractDingTalkCredential.java new file mode 100644 index 0000000..1260334 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/AbstractDingTalkCredential.java @@ -0,0 +1,8 @@ +package com.dingtalk.open.app.api.security; + +/** + * @author feiyin + * @date 2023/2/9 + */ +public abstract class AbstractDingTalkCredential implements DingTalkCredential { +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/AuthClientCredential.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/AuthClientCredential.java new file mode 100644 index 0000000..af8e74e --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/AuthClientCredential.java @@ -0,0 +1,28 @@ +package com.dingtalk.open.app.api.security; + +import com.dingtalk.open.app.api.Preconditions; + +/** + * @author feiyin + * @date 2023/4/10 + */ +public class AuthClientCredential extends AbstractDingTalkCredential{ + private String clientId; + + private String clientSecret; + + public AuthClientCredential(String clientId, String clientSecret) { + this.clientId = Preconditions.notNull(clientId); + this.clientSecret = Preconditions.notNull(clientSecret); + } + + @Override + public String getClientId() { + return this.clientId; + } + + @Override + public String getClientSecret() { + return this.clientSecret; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/DingTalkCredential.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/DingTalkCredential.java new file mode 100644 index 0000000..420762a --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/security/DingTalkCredential.java @@ -0,0 +1,23 @@ +package com.dingtalk.open.app.api.security; + +/** + * @author feiyin + * @date 2023/2/9 + */ +public interface DingTalkCredential { + /** + * 获取aK + * + * @return + */ + String getClientId(); + + /** + * 获取sk + * + * @return + */ + String getClientSecret(); + + +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/IoUtils.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/IoUtils.java new file mode 100644 index 0000000..c24dc3d --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/IoUtils.java @@ -0,0 +1,22 @@ +package com.dingtalk.open.app.api.util; + +import java.io.InputStream; + +/** + * @author feiyin + * @date 2023/3/1 + */ +public class IoUtils { + public static byte[] readAll(InputStream stream) throws Exception { + if (stream == null) { + return null; + } + int count = stream.available(); + byte[] content = new byte[count]; + while (count > 0) { + int readBytes = stream.read(content); + count -= readBytes; + } + return content; + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/IpUtils.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/IpUtils.java new file mode 100644 index 0000000..c35aaa5 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/IpUtils.java @@ -0,0 +1,70 @@ +package com.dingtalk.open.app.api.util; + +import java.net.*; +import java.util.ArrayList; +import java.util.Enumeration; + +/** + * @author feiyin + * @date 2023/2/9 + */ +public class IpUtils { + + private static volatile String LOCAL = null; + + static { + try { + InetAddress address = IpUtils.getIPv4(); + if (address != null) { + LOCAL = address.getHostAddress(); + } + } catch (Exception e) { + } + } + + public static String getLocalIP() { + return LOCAL; + } + + private static InetAddress getIPv4() throws SocketException, UnknownHostException { + final ArrayList v4Interfaces = new ArrayList<>(); + + Enumeration enumeration = NetworkInterface.getNetworkInterfaces(); + while (enumeration.hasMoreElements()) { + NetworkInterface interfaces = enumeration.nextElement(); + Enumeration addresses = interfaces.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress address = addresses.nextElement(); + if (address.isLoopbackAddress()) { + continue; + } + + if (address instanceof Inet6Address) { + continue; + } + + v4Interfaces.add(address); + } + } + + int v4InterfacesSize = v4Interfaces.size(); + if (v4InterfacesSize == 0) { + return null; + } + + for (InetAddress address : v4Interfaces) { + + final String host = address.getHostAddress(); + if (host == null) { + continue; + } + if (host.startsWith("127.0") || host.startsWith("192.168")) { + continue; + } + + return address; + } + + return v4Interfaces.get(v4InterfacesSize - 1); + } +} diff --git a/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/ThreadUtil.java b/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/ThreadUtil.java new file mode 100644 index 0000000..85b2122 --- /dev/null +++ b/app-stream-api/src/main/java/com/dingtalk/open/app/api/util/ThreadUtil.java @@ -0,0 +1,24 @@ +package com.dingtalk.open.app.api.util; + +import io.netty.util.concurrent.DefaultThreadFactory; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * @author feiyin + * @date 2023/3/3 + */ +public class ThreadUtil { + + private static final int QUEUE_SIZE = 2048; + + private static final int DEFAULT_KEEP_LIVE = 3000; + + public static ExecutorService newFixedExecutor(int count, String name) { + return new ThreadPoolExecutor(count, count, DEFAULT_KEEP_LIVE, TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>(QUEUE_SIZE), new DefaultThreadFactory(name)); + + } +} diff --git a/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-javadoc.jar b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-javadoc.jar new file mode 100644 index 0000000000000000000000000000000000000000..3a2720a6ea1fcc308eb026fa5e139a2ed09fc149 GIT binary patch literal 1806 zcmWIWW@h1HVBlb2@JKWXXFvj+K(?=Ih@-BjpPPOFP?-o&83$NdmQPTP9wP(8A0`F{ zpeRC_ucM!*n`>~0p08W$q|<(f4Fp`jPyEFHuW{qAguv44N{TB&R%9H#ry~65+D6^# zOULgU$9>@NJyrJXSH-)lvD&M(dsy-%7L}Fh9V?oW?%!*EV}YuxP0L)h=Hi8W+C3OU znNPjezM9`M=is->jW_M~z4?^$dgFzudU=Q5^>zuGb-g-wPHAq8g~LN8CvlzcT7RZK zo9U6I_D}iS!HL>)UQRabuqEK+M(>EjRGFG3N-p0zf*w~%N`M1*D%O-Dr zd0lw?QG|WnLhfRVCL!(>oqsNrzt0W5YteS!c)7%_>!+rr{rKrG5w^7Ei{Qeozs}sL zYoFS+rGL-N4J!lFO&D#2Z>y%Tn{ek%3*YBBtWx{9L`1%)IoH z#GGus`~tk%4T#a6SWuu_TvC*pn5&yukcpHs)+CsO&){}oXalAUHdY1(b23aT0J^p! zH|K0{tp6bck=p0sI^FBD+kZKDNPaw;!Q{jw6|W!Lc<7p0Zlc8F`t3Q)W=5^%cWxCLg!?Nb9+t&tH7u`-}xf&yp^Fj$hvIc>KM)?xHO*hFP}9#g;wSUmF_R z6MVy{(Sb46NaZV2zq@lyzf<_qr?UHOmhLwGGh zbs4zSpFe-KH09aS=_=1sUOyFI@~m*`QZdo=XU}g+y^?$p`GW1YB^yiikM;sah5&Cy zCJ|=rIRaFQL4W|mTSpKJsZ0ZD!(FOD^)W1IR7ci^RL0@67?f`z0Az7HFi*fOhUH@1 zt_I~}gyt=nnz7|-+{S_OHNv>h#2AN>%MoFPEuX{8U()CZtP{|Dis@K1)1kQ@5}b$# iK~HfAOJrEcvjma;0=!w-K<2Rnp$X8*M}Q_WFaQ91(N%>2 literal 0 HcmV?d00001 diff --git a/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-javadoc.jar.asc b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-javadoc.jar.asc new file mode 100644 index 0000000..2d5792b --- /dev/null +++ b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-javadoc.jar.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHUEABYIAB0WIQQ6tvGiqKRC++k9HVs26JaqlNCpHwUCZQpwqQAKCRA26JaqlNCp +H3PKAP9KAbfBQk7KsTzZpMzHGwiHSHOVRGdjDzLmTaS/dyE9CwD/X7ceamp4tZtB +vfI4+5CH05NVH6VHBhi0BnWvTDUbDwc= +=I34m +-----END PGP SIGNATURE----- diff --git a/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-sources.jar b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT-sources.jar new file mode 100644 index 0000000000000000000000000000000000000000..eccf731db2eb01cf984ac3b87345adb4bbb05db1 GIT binary patch literal 27660 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

2WkLI*i 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.jar.asc b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.jar.asc new file mode 100644 index 0000000..2080fab --- /dev/null +++ b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.jar.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHUEABYIAB0WIQQ6tvGiqKRC++k9HVs26JaqlNCpHwUCZQpwqAAKCRA26JaqlNCp +H6b2AP9ozHLXUwoIM1HtXrivh2e02quo1oRzSPnJ6yF73uv7rwD/XCm27IsT74f4 +he2KaADTjTwc8pf+ZDGCI9Z78wE46g4= +=bp1W +-----END PGP SIGNATURE----- diff --git a/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.pom b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.pom new file mode 100644 index 0000000..2d7bc04 --- /dev/null +++ b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.pom @@ -0,0 +1,34 @@ + + + + open-app-stream-client + com.dingtalk.open + 1.0.8-SNAPSHOT + ../pom.xml + + 4.0.0 + app-stream-api + + + + junit + junit + + + com.dingtalk.open + app-stream-network-core + ${project.parent.version} + + + com.dingtalk.open + app-stream-network-ws + ${project.parent.version} + + + com.alibaba + fastjson + + + \ No newline at end of file diff --git a/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.pom.asc b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.pom.asc new file mode 100644 index 0000000..1453e38 --- /dev/null +++ b/app-stream-api/target/app-stream-api-1.0.8-SNAPSHOT.pom.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHUEABYIAB0WIQQ6tvGiqKRC++k9HVs26JaqlNCpHwUCZQpwqAAKCRA26JaqlNCp +HyciAP4+5Ad6HHyDRnfPZLKuXNKclyElhxlsejZjDitKwm0g+AEA1xCTr62R4GgE +QCIZNjoGQHQkKDmthK7jVWw7MvKfSQM= +=NffH +-----END PGP SIGNATURE----- diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/ClientOption.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/ClientOption.class new file mode 100644 index 0000000000000000000000000000000000000000..ec54bcfb2ef0c7eaa3a8114f7236cea6a5cba00e GIT binary patch literal 1621 zcmb7@ZEw<06vzL!JZ;c1z%g~xp;K7_M|Dn3oWU$4i<>AfM)tn22JZ$ffwK6aG|^6^v4q`aL{Ma-vw6nmIh(x*UPQ1j zkZK!W%C=>h4M*Bm+3s78fH)RdX^g$KT16l}dalW~Y4EB1XeFivvb&zS7x=tEd&achTYcB>9u3DE_E)U8=Vf_QvWa;O!?ur z(vnU|AfV;W1cGJz+@z`%X_=q;?Yh~m8TA%w zZHfwdgcI1MqW`0Fin`4eDc+={?r@<6Fb;g*VJL{-Gt#IdR(fusr*D+1ZYpE+HNj%PBS)%pcZJRZ=mutdL02nyGy zox&~Lm1?^yb#qs0NNbF4!hygV?Q~iNt)cu+h#$03kR}^;oe`|lUL6MDHtx`qz+G&R zolU-m^3{{P;hVgPd!ytMwNkiMesch2(mLvTx9E#9ZiV$>)Tlk9@pm%yeP57(7i8NP zWXm5U;04JN$j$-~7MejabPV%~1iyO}$@_vl#P%q8qDWzYpckY_Ao>CjK4AuVgvUN0 zAuq_DFUS*Q{XjxqkXHoqdI1QJ7=!FU8-pmc;{m%y_?t(OH@+Y_T literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/DingTalkAppError.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/DingTalkAppError.class new file mode 100644 index 0000000000000000000000000000000000000000..18c1d8297e8518744affa6e6f145c555ccc861c3 GIT binary patch literal 3453 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 Olb=xEKn82%ul)w%A#-H_ literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/KeepAliveOption.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/KeepAliveOption.class new file mode 100644 index 0000000000000000000000000000000000000000..d749c503201786e0767a2fa68a2c13bd2b2ea666 GIT binary patch literal 1329 zcmb7DYfsZ)6n@@a=vKRdV<4hafr(qWR1vSB$&_gZg_(>jA$}mG)KMsHQw#b-{OFHR zykI0=KKt1p;jb{Bw;eFK7+JEump`}tkO z6%>+mU*tQP?}h{nCozIi0g4C_S3@wOzXV)k$j(;gDvLAa@{`4qTB(;8D^qHjp+jBO zHZ{f4?1rK`c4LAewPqM@$uc*M%CcoJwCSFq`Lr1+6jj|>SC&n?;cM2K;<$#bXs%0t zQ<>R~s=B`E*hCb2=qyuMyK36T+{XHn;mvDH0pp};oBn-IE@U$*zr77YTFd` zaGrWta^3Pv-3VGH;Fg5jxI2RrHmt#KrgMHjvArqd-t@LysFY+)ObH?*fx=-Eaqh$F_E*+iER z4Q|`zZA9fPVxQ3V0m54XMuMO;0YD9pA%!%F^wLQRLvRk~>BNx3g(jUsD;J5&?;&vI zkR(*@X$g++1z)6$!_3!7gy)_g`iR69lJtD_8krr43tKo9{Q_wlsc-TSpPJA0>WwrkJKJEau*G&OMLseCN!czdw!uEZ{)`N#qllL7^W8W|cIjBvZ$& z1mfY_Z6(dCt=-xzE#^X-G+2btI^lY5mTrAsQIQvW`UqH*nLyAchQF#We#doD&%D zob%eQU8_jXz;)$wA1ek{m6TTA^QRB{Gz z@Q&gmnI3__D79bIHQtZ&hY d#YB7XKxgno&tNWUk6`UfN9D<$!P&qo_YYxXB{Kj3 literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkClient.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkClient.class new file mode 100644 index 0000000000000000000000000000000000000000..7dfd453202e1e62340b66c2a3c7a55c5d187c6f4 GIT binary patch literal 238 zcmZXOO$x#=6olt#f3zwHF1&(*n2k5^XWND1KGslDYZBThp3Q{^@KECGMiCc}$9yvb z^L*VO02Ua;NMiH|VeMt*3GK;rPe|6cOgXQusblmBLG7($ytS7qQyX0>!Z>xxthC8@ zvOFzIt&E=+@+t|l%$~)O9nX%i923$xJ}v$`gkjSXr8K!n4~5Ej#psJZOCkcH#jAl< Vz(WzR4p}unViNxnrky5>?i;|TI1m5; literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkStreamClient$Status.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/OpenDingTalkStreamClient$Status.class new file mode 100644 index 0000000000000000000000000000000000000000..aaf8d4e1eff4fdd20886afbbdcd6a9d0a8cdfe4d GIT binary patch literal 1325 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 literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/Preconditions.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/Preconditions.class new file mode 100644 index 0000000000000000000000000000000000000000..5f998d8ee189f6a3023a703a7d45dfcbd68b48a5 GIT binary patch literal 1149 zcma)4T~E_c7=8}xRyKyffH^*#^$XgG?8Yl0B#TZnQa;=k65|EwN;3+jZMu%Azr$Pq zfhOvOCMN2oi9gEtv|}p5f*={>DoWru`TW;C#eGa?49ayI4?%AR3xt$e(QFGri54XJzGsonW)OBrL zAbD&!U50||(MD*PhZ~09ucFqp8n-xP*9$khjw7(3>IcTLQFaWsUEXRPSZ27QT}(y7 zFW?07XS;dn_d7~7n-rOD*lpJcy8#sySDOzmQmm;2YB4y|@VbF%J+@<;&h)z+mChoK zj0`P{67C9&pUP>30X-9#kDFJHx}8vI2bK|9ffDW;uJXzXyeyV*Phh%-F`1He@j#)Ne*FfMA2B3-MdDc^CpA7H`Mvm# zdx@Cu3TLoris$lVJ>@MRhe_^D#aNM#3rwFBc*+8iy8P^4=x5)?M^&e6{hH_OrUDJnR}=ug3U N21B^UK8o?``fnQ6{G4~6*cIEhNR=!LyIvoqh!{JX#Z{QL!A3)=?rSk|$ULk2fBtQuUG4cx+-feO|m zx255>fn4Oy<4&~O(6Je>~#1!_NT52c3R2{*@f9s;m8(PtE^uzG1nVX1STSg6qsZ7 zeejJkYRZ;vq^VW~0=_f2+Uh zIc`%0CLZCji6?j}AZ!!QP!gCK2fyDxP>qlpk6l$)cB!Mm(LTt=p=`1D`7`q+Zi-kK zr;TElnE1BcaaEf_%a9jaAKtIdqXa*Dh8R1^%krj_*A&>OoY(Wb#L19M)I)#pzEI}t z%<~ccEf@n`*j&ZUp(ae-_+(c%aUsxoL-;6~g=`7g0e+7JK$ literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackCommandExecutor.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackCommandExecutor.class new file mode 100644 index 0000000000000000000000000000000000000000..dccd197a022644ec144c02cf25475cd1ab88a1d0 GIT binary patch literal 4440 zcmcIo`*#y%8h*Yc%{0kC0TEjPE$%K`+G0dOv8h!op;SxSZ6Z+6t<&Tq9Y{07WWq&I zbT8i6b#Ln4*IoDGuKpylLf7M-{mpasZ{qCwe3?u-ZIgg{Y)|LReDhwP_kEx5oBsEI z|N1w8-FQEat(emAoj5|6ilGbz-@V>RGKsLr}oQA-Z5?0aw-B{6DN%`MzZRfrQ{*Qrd%v*7R!cP zb)>+t*6Omp=_3=lTvwU73rKY^R+~3SO?)_2tG^#`)(zfw*CY*EeGqo z?E{wns>X-=`&HGBeGNF(OxLiIwb~G?J$)_WZPM|h7JL1i>!EEM=S!ARP;Ik>_T=12 znRgkzpy}HKFVg4o(soU&%y(Mevm_Bd!%=IKVqx3FEu^LRnSB^@u~CA!k_J$zro z4|MzxFY9;(ud>3;8SN$ru{f>ug0r#Dwj0IO@S2X-aamy9QcrjUrtU+8!fZ|Qg&mv#ISztZt*75Z=RTMZX<{0_g@@dv!4;g32V#-GTqOQsu+ zb$kQg6c{}2GsH8!^$zd#$G-Q3L9`2ly{=`O`A051zbr_vaW%ZF0z<74 z@U1pDcSY?qyr<*u_(xk98?CiMS>S=zo*POl`%&P&=31>MS)gOCYL+;}&$Xg~Wo;6y zyWg}+9NcDzR>8HjH*$>DEHyV9oBNbqbp`eY39wEq0Y<5>>{z`-iYQ8VTAr@T3hg}F zx1&X5bzmBZPSr=fu6n@88wJVuQf+ZSln*Aa+6czqqCXG+-&;jcs9o&X@N#FeFpb?5sa9dDdbNyzfp2^&^JHf7NM?3)GLuVZah@lfR7Bd?xeM7*30>YojFabTIG+H{DwMu42b& zS+T8hMNWBVEQU1F*3wNsOGxz6(R{!b8^xrXpR5&5ttJ;>`?N`TfP*o-c0!A?Huo(}Fsl26=_ zv5U5qy#l3`{JQ?Dhztx~N5>+fVH{ER!cg|qM=@|WZS~e{^?LGkThzq;c%W{7H}+8a zLCX6ccjF})tcu;XabAqRF_x?|3UoF;AiL__ymcWE6~HA zV$C(IT|`$19}d)o*9lz5`s>(`+4&hZ4qU-)O6+57^u%`ha<_AD`52oPaYqAE#!cfP1NDf7>VDpA89iL+BOxRap9NC#jPc*xTyTTagiPk;$5T3gk0&}o%5toRw zhtdJo4Xj@`tG9*qyN@~VV%0{O>lkr7LhOzbeT!&aBqo=L*-QN2!@ET6eIoV&_TnR= zqpCHHPRfLl!Z120)sIIoLbQlg1NEzT6pt~AZXQJUu`5FKbeezrsb?Y0-(hyZ2Z+_J z9H912L~dZ0hOryiuHoSS8D@uuaScy!jSCu{gwQZ?0|V-|6NegYw~emUPi#Z)b!__x Vn^k`hR$imESDSdv@F|4J&jGhCE?NKp literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackDescriptor.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackDescriptor.class new file mode 100644 index 0000000000000000000000000000000000000000..eac53e88c80b9e98294c3be0bbf9dfc62fe7e7b5 GIT binary patch literal 3192 zcmbtW+jA3D9R5yj+l1|f(i94aD4=N?8f~FSTPoWd7B&T&aw({Fn=WM`H#Qq?zUqum zKKRxrM_+gaMnGf)e9;;IBxe-Avzu+xLOZogCTI8j&hPsDE@%Jx_t$3t4&kd9c48!o zc8tnpEQWEMkjp1qFoBZ_PDP<3qhK-y1*awPjDk;Nm_jy&t(aDDb_<$uPQiHv7bIy$ z?k`HQOA0mD0RGubwLv((_hv!7=jJ(xtLlOdI7g|5iF@ z>ULJ0+WeH2H9NCyp1^(yRciuTiBx@r(zzaipyAF z5>#A)CD60B{rZB`%H^?JIkW6orJ{nXDy|{VwppHAS;uC3N}B~0MU+^l%ZK$4C@8DA z4qHV9tmb{MaxI~0-7)873#zDsBd~dy)vZ{8kJonIZ@zSW6h2b^&UiCw!k)B%M6cdvuCua?AYwMHldG=GQ@TIVYLpLA6{<^yux2Uti5_2kgx{b zu^LZI)OT$SB!SMggW`zY(JB==PkCvN+ob|We7$kclFWHK#k8DLHS#jmn!Qjh zm_Jg@)<#YVjIM|8hFXjWV=q6PcJf;-fL1w<_|_^X5}zT`*aQ%G zhr1c>f_ye7A44R&9wLxTJw)(6NddgewUq)u8`n7Gw_X!J%l477*Av5j9N>-$@E*+w z_e~lKko$ck_@o(eA7M1`?19jezaX@TUOvK^)E{U}Jwb#;{R3K`LYaAhhTw0AK1S?$ zD)}qdZD3jo6$gCbLAPNJMTCgKvn!x1@iEgZLiZ_z@qt z2o51a9SL+INu5P%?m~*6%jfYSIrs2XLx!i_JSB2SQ%+{(9?$m>=^pN67CarjOF9lw zhsS@I&p!Tpq5Om03XUlFsOfJszC;Tm3XZyzeg*x4c{}!!ISP1Gnf3t+1~5oN$1uc| uX`~B+KOmg^89|ARS0fRZc*u=P^%!b(!TSQoNm(r%SS@_?wZfWfV)#D}k8Roj literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackMethod.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/CallbackMethod.class new file mode 100644 index 0000000000000000000000000000000000000000..38dc4d99ac9fe35efe3bba4e89e2d9a330ac5990 GIT binary patch literal 257 zcmZvXJ#NB45QX3JXP`pj5}{!fDV<9sDiA1XX@>R47}lPZy&$+61qa|zQH%%;(9C?r zd-`Uszvl~pFZ3cr5xNGE9L4T~7_2^KTRt#3E>c>ow_-y)npw>$$%-_v+mU)Hh`pyO zl)^drQiED`WZAhj+Z|2*;ae)NMI}oO=xv@*?H?HWFEa|s(w#y7FS=X)9Z e>{W0t8VsIq?f?dj`pJ5?44P=&2<>_{(D?(9(@lZ^ literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/JsonMarshaller.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/JsonMarshaller.class new file mode 100644 index 0000000000000000000000000000000000000000..faa9a7babbb574bcd2ff77fcb6be7feca8a9129f GIT binary patch literal 1088 zcmb7DT~8B16g|_{t}P3#AQi+96os}3qtPczc+v1cDv-3{#i!|ZDO0w)&30lQWyGUjdH6`ptT*(8;GBN&E`yQiZ{7ye|r9i3%k7G(<+8&xa{lqTmV+iYV7wuMa_kFX`M z7Ij5=x}{o5o~VK8vIVlws@+iTxiME8+mHfJ{=0z!#R-W~6Ik~@z)WT!kS<3v-?%vI zD0H2`Z)>9ipM$piz#I%cPhfd!ZTpSG0|DCv(WYTS-iXVmJBs5JX5!ZTs->Nr);K0H z(`4Ukuj31NNvo$_DXj8U<-i-je?A%?UtWs)SbxE8CQAgY_^NPR>4BQo#f z$Rgz&(v$^cP^7%Z4=9ath`B(G*)g^t=5;L67a_l7UW`o8E7cFkq`x404(lC#DP{m! W#)BEt5lgs1|56;i%-zj+xAGIYJRIBr literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/Marshaller.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/Marshaller.class new file mode 100644 index 0000000000000000000000000000000000000000..bbd92f4a4c90799c04ca9538d09dd131631e1488 GIT binary patch literal 263 zcmZusyAFat5S&Bg1PlENqlI2$CC1W9V*x*~oEHR+M-cot3qQb*GM-wPh{a}SHaj!B z_s8`HV2L4z%i%Hboa*z5G{a=NOX)&FQxS_plq%Wyv+jt&4U)K^rmYpjd>yX3JDY!2 zVdyh>LD|+)Z4+(8qx~mat9tQ@Hg>Yi#W5-3hIA&%N)>{t%2XmGX&sTw#8<>H{=L`% X7%cOm={7?Tw&8ulEI0=7HyS(vNJ2=E literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/OpenDingTalkCallbackListener.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/callback/OpenDingTalkCallbackListener.class new file mode 100644 index 0000000000000000000000000000000000000000..c4cf53216ef33e75c83cbebfd6600f68a29ad60c GIT binary patch literal 401 zcmaKozfQw25XQeNrKaVNsKg7fpt9hF2@niaNJy13BpZ`sPLW&VM8QFbM`Pdtcqqg* zVQMOdPrCd0`_A@#|9pM{xWtjdzQTdRAwlsw+a@yMY_?dMH>14?g--G%+jxE6M}%?e zieO?>OK3XF9z)fLGfSGdE(lLIExPJwJIj`X+rGCWuGA^l&Up7>a?dh-l9o+v`N4U) z{xqpL%v~rl<5%~_``p;o!o5ZgTwkoeL%6f$i+&bQ6ptMhCpaj#fOX`HdUH5A-Sowc}wGvxCs6g zNWcV0`~ZFw;<{~Mj52kCSaJNg_nhNY~zZ992SeXifd+6 zwQ=3X4I4KZ3IPwpHV+ON9{YjndL0?FHkqsqU45Bq z5s74#Vd8;|q<+Y-Ui)XXdW#{yraFS5wTFr z+#82_OLpT>YzV!tIwaf{uSL+)guGkx5BMwYg*@8xHrodx(5v;oAf`GIyz9k@(kf8l zuP|kyc`njeMX7kk--L=AqFf?g8u@>4kcN0*#qi|+@i|+nmjt3IP1I(NpZczm;KIc% z7Y>RH&C&Tk>mhC2b}@$~7k5x&@J6HlR#nGkF-)I~4W)DpkSykdoKmD~rh*=g;dxq7 zGc1iPh?5#AwZ&BEEa430QEn|%=}H#BFiG#Mi920ai^eX_Q$IzsCe1DSI*lW+#_|VP z@A@_+>Zj=Xnm&&bAxu*P<_Ff8Aw2UqeN;whbGR_Xd_jK3v+@PGog?HoRvPbNEq}r} s3m-AD@|N~2!ps=Tq;a0wLZ6{J@cqe9L7DdG=Rvy*sE{Ya#XiENAHCo_h5!Hn literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/command/Command.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/command/Command.class new file mode 100644 index 0000000000000000000000000000000000000000..004bad5812e39a486d5edd4797470e861d4a2c54 GIT binary patch literal 263 zcmb7@%_Z(s^s$yTe=(IC@_?n|!8wqip z{>=sNY>+i!dU8#zWm}kbz-;5HO4)2#s+%IDzt<>VaGP{R{sM$~hp+ZCFXy>`{qx&105kY1fnj9gn8LJ% z_Y#OAlf*R`30%jGI9|fdByM3QiCNqZCgwEE$MHTs(2z}VTnMH=Od^Rz4RaT_{*?%_!SWMVZw-!}X+Nn4V`4 zN}4sp^IhdyZq>-SwVLUaO9!6J_Sj;2_Nn#xeQ7n6>t`29V_?B{Y_%vbobDu%o!k3LJvR(H~W$j9z zR8pOo^eV*t?geW9UwncXXtEhEIz5~2;aQj%N2T2QV!Ud57zk9Fj* zEHK}_Dm%_D9@Lerg>XlOrXjCm1)pg6RL3el)A2H1(eSyB0@gIF>)61ijxTVR5jw*m zr{Ie^O88RXVpC*Q)2SFm5$fZD3xXmT3oX&UAJ2%Pn!fr zPJnZ6wMs8-*P)z;8cxkE+Yg&cXAKFAzo5r#h}YKLuJ;X07oo5sD^lH+-!x>Me%wh< zo-sO`VK)r7u9%itmW)%jFN5PA+I2fcPclJY4McxdCb_nD%mN{Tz?Clf=obg-;!RCVS&~3*KPIC z5)M<^o6rU?q;^tAP(+T)qYr`6cHc|8zWX@1E7%b+!RvIGw=VCIpcQZ&;a3DH{so)P zD96`m@et!1FqU}&G4&H7zazT+1hGS$i{f5p>L~_(f%YR;MDaSG!(0!d#E3CMl(&fT zM$^(n!JD)Mzp?PtF}~|Ov1Lge^SHz}whKN37T*&+%5g69GqkBgoEJDmJa{A`c#h=S z^q)wPogV!IgTLa!A%-IO0f}j@y%@m>y%f$7W`e}tCY8%D@GfrSYLnu4>xg5Db6j(o d1V(WQ?{HlNSGYHh$lowDTpi$4nuZ7_{{_+ji=6-f literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/common/AopUtils.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/common/AopUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..bf28e55827e51c3f71e027a0459f3faacee6fe62 GIT binary patch literal 3037 zcmb7GTUQfT7~MlAnGgrWU{FA-;H3~QDM+<~T4F$@4TL6$w^|&+03%^0P6ltix3&-c z2fX%$7awdNBCB21zI831`WyNy`p{Lo&rElGMAf5UP)$$CDaWKr!v{(gwI*%jA0tiISGNb z_DKnH%9^3|?zCa*V@r$Ex;>#y7lgmGmDdWBnr(=4MJPM-MoB_PI&Uo|W(dU53JVFV zsGA9`SmeKv;FCqmOeC%1WydI#h_rT2cP2EOYpS4?Xnw5CM<_FWThBWK?LLvKM#Jj7 zX3iKhn&ZOR$U((KLde!jO9e;5o^7lfHWPSITqCjfRpm4Bb0VQRN6RmaYDJeTt4jbm zW6so^C7S@+-UPJgNi|BTxq>l0Zd>;sNQiA`d7bDjmpaiKr6E0U*_y+QR*WKsTiv{# znU!$d@4?HCk3*#;+J#HQbaa~*!F)k`_>iPLftJ_Dv_(LsGd8G#K{v`>Yk}Tw`f*jN;`3GkwpHTyzD@nt>l<9~8YZ-;JM-3zgeIRaTc0hk za}uNOGZs)HqL@!%_l~cqL|}Zn^n1I*$ds8RqXZ+N%Ed%>ni#|>~*hp zzKS6Xvz8ljw{9v<;*<&-cT}9lsT~5b&-Css?Y4*0SrO_pt~UuscEXu+vAd0`q6E%g z)lnv533pZ8!+jMG1dfOJRK;ibT)`JAzQk7o_1Dbw2I}Ehj4TorLhll~dog-33!ag`60Oyw_)S!ay@E)8N(T^~c^#hU>R) zIB%Jb#u=5+>>q;Eyk_V0J4?Em*9XKziV*&Bqd$MExv6H2L$uKf^rp;OwikKREx9)1 zzV==-t(307hMDnZLBgOPQ^j^`Sbs{kOw<02I&FSNP9@z*=6QRR4EI$bw_O*nlGFa6 zl^OO2echzTcdoy`_O@-=taopygIlZqeX(>62F7-r;vVfT^#2s zlmHcPyQ`~!Hnj6pjW{|ONErVKnLFUJl#Z8C6_r;JTtsglmkU8c>UU!oBDGx3IdzPe3j z;t%2#Q{nZTLET^-tBCc>jdCZOrMirU{$OKJE@NL~Fy2+h{wMwNuV}jVGn)DQz*8K2 zP6r^W!)UBj#p8E|?#?1g#QTZ$FwwRm>GHe81cumK7syJcMlCMl65+IRsz&euWrC?! jN3r|RD@w)^iB^qC8RY3nvkAp)AYXY`@a5zwBOrZSu1RZrax%+?Yud@nKv_U^!SsP z9|5ox|Bj#mW8$Gj5W#pI!k7@N$p~~DiC_wbj9eI|3`@}S5!?k^MnSwC8ATy+G=fDq zCYXhU_fJ_ZT*h}D~8sKPxF zybW&`pYM?IP8si#@$LvV2#67!m2pnSd%}2c1g&^q81E0`UZL{?VSF%*4~gZ6!}y4R z{?RZ#CZRE%?Az0mJUoyb8cGfJOIVdYq8?QfMMpOhwl<+1PYkGzquFMcgyjRt!DL^G zjE9GY2U2CBhT8{whf;?JQv>N_cS=IcQ(~y*L?YwZx;a7VhHlF&II8I!P>rG{p?0Tk z>dr0+)h(?DB!s%HF;W+$byMpv=0-JpNF6muiKVTqY8+5)U3~k*kTa8sju{BCiox^L)w!p-t-rhj3~sGii-USRKG( zYvTsNB>LPv!DYBUNLU}>(#@mRl$OY7jEkY)t&Mp=$S&tpCp)Rx^BrcNw?!_ApDYEN-aBOElZOIuCm#$s3+vGXZyg=xh zH%r(MwBhGZYd~kWp%%npuDh1jZ#jFdqB&Ofg?`e9bJsU}tAtywV|F%^ujfMNHOWA7jzAu3Qo7j`Q61U{+YQU*XUgXxhTdHnc6#bZ%)^YyhT?o{w~JTBuK3ZB3> zqxcrd-;Ux%3ciEyD)=70Pr?tP7?$xv1wX=%75oH0Wyf?Kcl)C#VhKyik(h;CqPlEJ z+g48qUIjnHFjKKC;6{8-*0LRxSq6)yqvy1M>R47an@r1TGAwnhDJzOW#Np=*L0SS7 z`~tt^I>BFuf?tUgSam>)xVJ>YzbCu_oQlPw7ZI$nbo>{2y>ybZTS6>U3xJA^k|Hrt&Np@+#S^E zV>oneqbcck%ce3)G|*7coMbku6$-k0gN0fSiW{!hD-;RagC_jTC1}DY1;aRd1+60F zUhf{&Ri^}7bXQ)X(Yb=?a2?jH%!+Vpx z=~NH9%u`&o*Xm#l_Ov`5{-F1M%tgd%Tu($d?F|NFHZy7pc|)g@8-oEY$TyaAdXCF9+ve& zDwlT{e!7#(yJJ9mP_@q)jB4dXF5^!M{*1pXI4rKSJH+MnLUF^aE4Og}a`rkudz?D1 zig43veXjf^jwT&tHx?EpK-NX z3_b398@BV0+YYX)PzRZ74s?7zo0J6Kys1$WzX<68mt_~9wJvcfp2M}`F<>{6{Hntq zbdw^4r>IZ}Z;U^Nn(FEJ460^OeHJS(Amn}2%%FA#@>$e`rmLsPS`DFoIcoU45h2_} zQ%zV;{2TZzo7;#Uq{y?EzYwZw*U<2DaT^WNu+&akh&yM5l~`T%!-&kFKHV0YfzlS| zXTuB{AH|}+3y5x-!D6E5Z=XTzEb94M61o?$D_A;w0n5m{{32FdZKvqU*s2+n8ewz)dDPd0JMny^>2e$PbI$Ik=F>dp zeHd`9oe6~KMpQqE9Wq`ZV^Bt>@juiq$ruuk{Ww4*Rk%GG5j9C!adxT*E8mObm#|Uz z(K;N9w_QZrRabe4P+ELf8u~M=lP4u(gyz@> zd~-XfL*jlk9@`Y-8Fa)Fu};3ulUC*CgqL!ifgFf>I;n?E#n-ckZ=t7wCx7cX$f5fX z3MAHCB@F>!HK?lJ%?Xjtm-4^e)y6QyHebS)2N8;Gb>C4@3;d7CXT*)uGK#IB6QeHR pEdJ*1Ncao>fxluEUdit!?!St^SK~E!t-E>y-iSB(tGD2-{{xlY4C5QhKFeUgJS-06TKrl12M1t*9|fkY%kqCy*c2^*ZXWjm30EGi@l9)O2J zj13ZQDRwm9Kdbp?XFtE*KLDJdo`H*$nb%JUoq&p=ar7)XLsAWTK_~HoE5u*CHc>l9LtF|wc-vx7sGajmZgsfbwoU?1+U@5I#?|jvj%U|pS1`yAh-!|Kj48>!VK-m1I}Qn)^xfS@5lykaO;fw!MX3)*1MDAqvOW8Xa<-& zvm@rA}%BKuc`%VjkPS&I?jxM?l;njJggDZua)8w5~?n#>W7E{3o=`+|-d0Kdw zfOkGxjw@`7yDomx>I&cIZDG9;w(w;082=rhu#Un*DheXx+9FV6I$E(*9ytBq66O2> z%}nWE3Bl*1K>bn{hQjrVnU8|?b<=|(m5c&TL;<71PeePT1v65F%`l_?;j|e29d1uC zQVlN~s6J4QTSn@uTW4UHP`^^TQclOooj4a>Q@obc(1lSQ*`yn4!ZZ|3$ibKiCXAaf zL8D1Bc`{Q_VDO9>|F7-Xto}m?FC#4BlgZ-S%0Pk=<0wJ7mB;kTBZ2Y=p*(V+9|uOf zXlHO{p=apRmG8j5DA_F9j9SdXbsU?a0OsHZ&KTT;TWE(je}%;7*ycIy=6P7?ZQe!V z1f{C1eS<_lbxy6$LmHKoel}F~(i0k;m#A;U9Suk_4zj2PS;P{Crx*fB#z9sPWOW1x z6`VlsYAce8gOs!&%le9>;vnk?vM~aLI!+)fT99-cWJ?ROss~BOL8=I{JpzQT9D&@^ zf@I<#PqiTT^&puz$PR+M7y&|eosJ$35dU2g+z_@1K|!bwd?y%OA82dQT0pE&AT$YTq^(`T0*lFR+})tq_e=YJ z(zk8x!`hdvS`Ac>)=xb>{pSDEQ#*GPl0Z;u&mnX7&YhV%^Sd*1FMs`W`5J&mTz12U zU9mGb zlVMY5RF6vow4)`*4oP}K(Ih#Mpr4wa?6IswfVj;GwKb+Hnnj+Kaj{li)0C*C>KcRY zoy!b2k<$n&hm(qFHTmvT%}nT;sc>+jx@M6#3`Kn{G&Rx|8MfZ3$+Ra7ZnBsSXmJ{2 zO|c{nKyR=!=RECxSICm1hq~m14W^x8be_ir>=bZ9z{_;}0$!oxC$nuwqe_CqWD0nd z<{>?4M3vntKbfimbl3Al5U~ZXiP(ruA~vIuLA29@dqbWuRL{(omZTaRPz({T;|+$T z(&)zZ8>AuGQjW-DQZ6pjK2i~H;w`?#+ak8(9fsPh^@3O#HqMbB!vv3w5dmacvSv|I zIeP-3u!wj04)0-H#QPYhAV`8ASwna%L9v%pn#I(p%%PD+OkET40Y0QeZ;o=nM0|vg zMSQ}^ryPxw_$=d%98>${epwonO^Yi^rb4M5Q;#Wz6v}??R%9z_C?Y<`7XnU+_!3_U z_*%p_I4$B^Zt@Ji6Y)KM5b&djpKz98%N)_pOyhJuGOXl!1%4%DgItrcp8SkoM4aRM zoe*&z7YKxzCrKIJ4 zgo2b~@Xw(#t^OGr|ATn0Tr#!JP=9N+UDSWV)PI^2i8jN~4Tj3T!Y((1n}&j_u`&l@ zw%8aPUfvYvQI;v%07JtpZPQn()XP@tRqwRHZ`GG-}M8XftuXELJif9&bwx5xrJk!D24 zP<(_3N29l|g(Frx7)zSNX@r7Gx&@@~UdlPTs>=vD8{;Y9s`G%$TcAMK+`1-`mKu}V z^!z68g4 zTku|@9(v0HRYa>%f<-7p4Ym=dF0F?9&_pvbU~fZr0)6p~_%_?IgGSnhT|=pD=f)K{ zBUexynZUgIizrG#@VJPiP%;5`3Z>T}cKJPJDa`lNx+8`1%vj;~cs!LUEbx04rblNA zRemDX{uCC`uV$U|DrzH+3%ENpiNz@_;mj14(y*)of1W}Oebr53d3S?nh2tt#PGZ${ ztT;#9)tq|)YskXdh{NM8z6xK&!4)S_ABs2|{y^CkT56cUx-%&D_-TiRPzvjRr+^*c zK((Np=n|~LQq*G^VO~ezEGPa7bYLX{v=YW@?8h3!=|OJ6OK)@^j+68_{PfOfuz_u) ze2qCq`>d3uQFHbmytri?!05LS{SR=R#WRLcJjQQY`pz;=CC3 z{*~p{=$uD{czQ|MdiOj+-SN_#jw#Pn#)P(a8(THW6zgKJm1jxl|FGd(Luh%G$fVwg jWVLmN5;~vO+dU)@O71-X1%xsJ#}!9Dhb|&lmr#8I@4jJL literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenApiClientBuilder.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenApiClientBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..f4c8ade2303fd23f571573536bbe2da40d1fe835 GIT binary patch literal 1090 zcmbVLYikoh6g`v2Zn|09G-_&%kJJ}Q1XoZ|R4Q7K215IxCD4zXWN4>uc9+e>-=)wJ zvEUEzM~P=PD^*evv#>LJ@7#OtId|@U|MB%3fTwuipoCjX$m6z+hQmEIHf-E+VBxNf zdjf@{XsiXQ-DCfw?*)E%=;MY^_Ezn($b31gzI8RC-e&-)!}mxD^ehz)Dwz za%VE?%Vgj02lQ0C(ZCOSexi(>IScwojRl@{2hqqI5?=ek2QP|c==pKXSIvxFdfvur zD^N1j?g`l(r#UZnQB;Sh`@g#MqS;v#r`R`I1s?yW zKK91hizdlHzE`IC>lZcfk-1wJm$2-j3|HXE0=M8|2@VPVBXwKr_zw=I?tOvE`F!p6 zkL7?vRlDFGI;|cyIH@I0a1O%MOutB*dyzh>pnrwdW*Pyw?I}ciwfyB2xzA~Ih3hg= z!2AL(Q*;@tv|MJIwMw5kyMn73R)bjPDV-sIFh$`Lze$>_mFAe5HLPXPZy0Uj?e@b{ z6x${^mj*kjyGEjGX~EhoEGx)_R1p6sT*LYtSe*jq!0H6M@fR@D6$5r1^$hGK^%{+p fGgt@h6OubYZVLOH;!IEDw|-PIdV+O~kefdNI2`Y1 literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenConnectionRequest.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenConnectionRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..5ce25939e437a53d7822a4663e4f7384e2460db2 GIT binary patch literal 1765 zcmbu8&2G~`5XWboZ^tERXbTi5w1twUP(xewK&u>xgj5l=2t)6VvkKcfwz1bB-U=iT z5(gfDheFKQNt&7smtJPSW_Eu2pV{Ake*OZ0J=oKs438^Nf+u9Q$(UrGl6h8wof7Oa zC_Ap;o;>O^Xmro)kGARB-oUhED7?V|10y}RxD#^8K#Oe#b5Y!joKOT(_+G@ImIlUB zxTeJ=MpY~^@N5}}oWarM)5EUg56wQ_E^YVR^aJjhb`Y4647oitJuW}_;koJfAvdk5 zJO^#Ox8(Yc?H&aTiig4zvdtjZ+&pEF@A!SpRqG0mAIHNU58v877k3(6ia51HLF>_G zUcMK|y*~rR4n)dzf^Z$*^SDDVeZxP*Jfi1S2V8b0x-B#}RmxSPX{W{Jzdi(Bn_M-P zxHgF!?-bDI9qL}d6B_Hdo|XomGCyXRD#EMm-j$@UWAaSW#^_Cxob;fj%YuIn#-evK z-dCWZJUWVyq@r%n5$mu4>vT48)&W+RoZoo}kF}MZGXfFqU1MN#Dctsg}8}5vP+eoBQs@B$b z&@NKz$?h7yY(2SQDfJqqCp3C5QQuX9;)orW+2jUAkA6`slnD? D>*PVn literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenConnectionResponse.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/open/OpenConnectionResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..dea1bef95e7fa1ede9ab6f8cfef49836d3b08273 GIT binary patch literal 803 zcmbV}OHaZ;5Xb+^qlHpMd8wcWZ-9xtXgp}R5Iqq|#CR`dgR5n?f#T=VL}TK?58#I~ z&K4BKdNECBXJ+T|o7uPbmsbD>*s+ktW)>-IX;C#%GqKH(;c^ftAwz~j=f=Hr9p9Bh zrx%We93C?mq3~`w-5MuCim=6ytT(P0Qf)Qh4Ec_b{Cqm<^YNwI_sLV}D9`n;+_BL1 z+?fim#f0Ig5BCH{{{z7ip>9 zh-1x7z6X`-zhg9cmP%dDhssjMr*8GsbnNjnp{J!756)KT!%-d@;J&&d?#eyW4 bK`OBz<#>?fGDwv`YJY&}g=&yWH2TH|tV)ka literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/open/http/HttpConstants.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/open/http/HttpConstants.class new file mode 100644 index 0000000000000000000000000000000000000000..d21eb879076a1620269a0ffe91d134d94aea5ebd GIT binary patch literal 695 zcmb7>O>fgc5Qg8)r<W?0e85(YWEE(2(rDd=(a;|KVPRS4qE8$zLPxSNJONpu+1^nJq^rd!1giO9q-xK7oBKTev~C YMeb#DH_7(O|0Wf>O~i1AYz=pR0zB)KQvd(} literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/AppServiceListener.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/AppServiceListener.class new file mode 100644 index 0000000000000000000000000000000000000000..4124cc06202892bcd9748e7b573ecadfaafbd42a GIT binary patch literal 2544 zcmbtWZCBJr6ntOg2b|HU;L6}Cigz~x%WPIlHdP){sO=ie49lNrm}bs7Ytb4 z$m61c_x1f!fefzZ(1{PT=)gw?KGxf%F3cFXmcuMQF>pPLIovQ%X2?|5mX;RoFkG+L zvToHJZ(DJ9*OI>QEbjYOLj{7@El;TLWUxzHj^)bjZ4p?@o)Uq_-AcGDG4v5aoqM%; zr{QyD?}&h5`UqH!6PsJ*zq=7umv|`brji74y7GYUajU5ums~u%83e*p)_01EaOuXw@}fS5r+N{@%7wI6wuEwx;amivrdz9Z=@E>e78rs->Su~L(@Y_@rVF5Z(no_ z=UZdwTHhuaNU!E-2hz3SNwwN^U50bx2|+|jl_m~vWl_a?md>Hi89IWd$MEF(>)lX?mWXQ$1qQ38S@`OyZS=mh5cnlC&sm%QKOoQv`uN!>%PmR8>G?DJ9Bu zFiM+=-TitJk%c!SvdC>ZN*^(FZwnQj*9_Gpr?Sf%4Qkz+#VHxsFmV@~Cf?N(GkTzS z$J>*;!m5PF3Jn{-zt1UGKUf*Kr@u*3?lye}bD2~cgwzDd?vEtl7%v*zoAlLjMPn>- zOjh=AtzUCof8>j#`M-Y|g>3JeR9=i+=B`_Hl%Ps|!*KRceOl$iaH_o>&d_M}fWE-= z$sg1w68!`e^f4IT>7=83n%*}#dR3|A>f!ZZ@D!-z(fi$rlCyuN*Ze`hxlmrt>SW9b1_G(vI zt(>H#g_cJPEzm-NmiMC&o`s~XV>hIvz`zXr4g3ep@FUZiz;N#FN?t1~Crp3Y)jfO9 zIp00!JLlf3zy0^Ew*h<@e~zFVCnNYMW;i|;Mn6tP@o_vF#V2q&f=@yYV-^LDVuap` z_%;{8JkD^GBG`nJV&VeFViYRMLZS%;oud-MS@F>j!fFU+1T`#)!MPC5i}!^P9ux1! zL->?R7a~XqtO-0La6HTL#R$HH=Qy5c2xg|n z$J56c4rK~@Iaw@e^QNpWCiRMf>TcsgPb$G&AF9kalpmq?ODOhCPY@SGnf|Lm;IW6^1RD zlBQ&9H_K00dr>LDbhXmwc)s)Q|!5D4XS;fD$grq#a0u`DBH5uu@V-XNp*%z5r@Z!(0L-Xl|(WW)Mpoz zf+=XR7O*KxMqeXxVR2f%pz3mwVP6ZZ-dUl9IGSW<6Xm9`I4M^wx^aA&<11A8RG3tz z9ABkc87`;}-~9#P;GImXeNpheuZC4_zhm8^jNaPx}oJuWrgFn5`KqE5-#I)qP+Dnr5hEY^oE!p zwnU-^B)lmEcUXesT4}DN6h|x8%w@bL;R;q5wyuS*QHm0hxQ}7rRGpBIc2ZeXYh|U= z!QDA0Q|^oXotEv1;(^DXSeFSqCK6Uf#@>=}6~AZL>z#yKQB=Y;ye;7mxX$pPw~2KX znHG&FwY~*%yd&X{_!D)O+py52%y7TAQZsT_E1~}5t+Nj5WK;8KNz`UfR@j@GE5p65 zT}~ScrLb5MomLP{)6Hy6RT*|AZtg8TH;ZVO^fvAw^XSObCgv6Mm~ytJRH=s@O!VAl zkD7KiGe`A^T%huxMm4k{f<{O7RA<;sVAdsQ8v$A)f6nS1C{v1j+5^(*_7!QRf~YYFydaPLj_kr4P{QHJvu2G?vR^MjeVL| z>qfimwQR79SmBEu9vwS`Q8Sit(JFM|vu%j`agPs!!Heh_x+l@mkiNkCkQtTkc*f`P_6Xp=1xqb|jw;;{#B98~bMc(V| zpkIeDO6a$+{Wy#iai@oMV2mvIG0qr{5W)Z<{3niLg1C|-rrGxP5wjk`!(=Z*EA0lq zfi8~88;Emc|0AwKQykN=z5f>PM{b~-;~0@HhrCTf3J4=bAlyz28+aW%1+VGYP0yh9 NX*)fS)5wPt{{w?BXF>n~ literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/JsonMessageConverter.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/JsonMessageConverter.class new file mode 100644 index 0000000000000000000000000000000000000000..4fe3a0531bb38a11ef9ea73d5c91e02ec4ab6e86 GIT binary patch literal 967 zcmbVLO>Yx15Pg$PvNTDXw0yOE7J6wZ!UvELr0S)jhbnCkyXu7l@^0MJ>2|&HI+gfW z6re*O0GGk|AUYoLY|AGaE~jXOT>`nc!gKB2y) zQ|-11-ulK7p}J%GiqP)qR2_`YB4tAvB^+7mnOG)A((1yW1gq{u=Y$u%*qn*JP6tjV zr@~|^6*9~C(;~CRnb;&^FE{DF%5ynTJ0?9>)+yU1`0>~wY_Io*@?45UrUMZ;%W&PP zh*iglik%4GW~#d}l{k!s9A~I%UpiSZ{R4(`j>`zkQ@LLN3G;!I@#((ICU=_)^dOaP zWV!6sR`_zNa&qFO2!|mvYy@UxW3{UbMOS7i@}%J2f{!bNwL(>y=txFV9LwAdSwfLX zn=31JRmsiAY6}nWknsFJ-+<8hsn_^sgs1-i_WNVo;|_>+6+<@ zzk$aC=xlyLjV?AHd!JDG0Plih9txa=GT-LoJB+zh;;oKrCU{)UW3fD=!#l1r_O-H} Q>bTB}3T|-nX1QAa4y@n<8vpDdyB{#l=5%0e%NQhnEk!v zrJa4u&g}m1^9x{zUWQJFE+I4CZ8;{wr2nzdTdk~il`2xKU6o%|B7a*pNtL_6`O8&f zHeX0RCv=Lsayo4y6W+$<=ziv3C(2SdyM^CG!|$~f(&tZJuXV-Kvt*8gqhP|T@hkNu ydXu(G2N76g`urP8_Fc3uWuZT9N=Y1*9SpMXDkJsj^f`RKydSxTDm;u`PR2sec9K zp(>RS&wLc(I*po=CRSf&e9zqFoO@^d=kL#70N&u03Jq&Xq;Nll2Y9I9k%Gr6;sN*s z>k6K#NMJ2E%qqw!$TKLl?cLo<{R2a$+U18_?@QCtYuqg`B%5Z(=CbbzhNJ&ai&ewv z>HDVLk=**KJFc*G?z*}!J;8gr>p9Xf97``dwiLE(9l4?~C4{@?$iF6hpLYa>9STnh zuTUZ$Gey%jWr-o0&FwM7%FaG9%2Z8T)cd`*@LIfW5wcKq3~udl&kXD#7?TI4&oGT} zXmx6XOA?8K))Df86hk*VMNF9f+?1G53RF8~jGD;sdPP$a|LfS1MXj^1c@g&`TzBdX*^caA2{u%11?|Cd|~xvLPv=43h{ z(;*i01gn+ucB|5;f7xj^>QvS3Q`NTveQW0qxP{wfC2I?C}9wsK1L*eif9DC5&K3! z1fwL2my)E3%@Um_uzbOwgcu>f>KWpnPcZWX5lVLqUaeJ6a}nBfN&oap2G11I|Vz9?adL42BBUt^fd70q&dM>9%wMc<2? z71f9PZIwe^_Lr1sYBLl|~x4 z@>WwO85+XccGl{(2YJ;O_5)57Wx>DSGqEuR?or$8}DzMg8K4Ub>iH=%K(zM-q zvr#Rok2J1h|KHbPl8Y(B&#&Zwj0Bb$W;(c5GD1koxQP)Ng9ymDfrk=SWTdbv!-rlO zeSGOhFN5cDg1k4>YD>W`vd(l5Np07;NSJ*>ew73%BZ2`1XXVy;50p1{2lMr^e zxD;Rrk~Km*|GArBN3fkjI3SB*h*pOca}hp-a0@>Ro8@);#EH+apF-q#+ZFtE^2p~X z(tFs7(*y{`D^5Y62aqOWp<_5cS>g6_m&YaC;?yx}VaABa?F%ArDV?4C#6rr&PL_pa zIP?MGSa^C-42VZ?P8`AY9*%%`@J?VKfBj&bs9+KGTPK5*dx!{zh*}U4`o}B#DQ_>j zF;1(<^HXG)_9(p`2xo9f5EvW$NjaPp9cu}rT4*5k72=l9Ega+8A!N(w5-r1H8Qpfv y@H)N`PG~~TZ;4HK@>}*My!k^gF37q5J}adMT|^~Fvl}M?Y%MWjxI;J_?*0a(OH5P% literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/SystemCommandExecutor.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/protocol/SystemCommandExecutor.class new file mode 100644 index 0000000000000000000000000000000000000000..02a33a1ce4cf4539c01a26e4676c9be909fd6647 GIT binary patch literal 2188 zcmbtVU31$+6g?X!kz*@Oa8qal6o;=mO{hv~XsOe*U?;)Fi9;O%Y2aZkZ;g_*R!Bd$|E{T;wne4WA+<_%m- zVj+!1yqCr$SSeh_``Wsa!UwpjCzg`<(7-i4zCMA|_$Y}R2J(7pIfXQCrm=!s25zVD zF+MR+U>Gk~*4J0>GTbiPs%h07w-IuAU@1?y7WX_W2z|kumMg-C%0D2NV@cI$2;VBX zq3~TU%dKIaVl6wa6Rt2Ma`QV3qXktL3{z#t6`P06n(()IO_C>5RyLPA+;{Xia*l@I zIswCtJ}~sTp07e>D`{1af>1OIs@ddjef5#B4@2b>07JBFI$|l;Cr*!a3W^eW6y`N% z!{bL%@%m6cx>$l17OUt4wsKuzhg}cWPM=^=YhyZj62HB z+EN7~>$vyTV%+`EkusW-oa7pxEY)v*|HC2$~UbTi3YF>w@&0ABbS^c7`N@i9|I+P@Ym<4SlLC#gEb7_EAeA^juP3IFpO*Xcs3x ze~<1MMJ@7>Gn~`txO8f~#;yB22=}S1)}3l)lOgSKKM?J0t>*CD>1}R$ZjVkQFuw34 zKk5U9y2rIR$SAEC?1JP$kdLR{4Q)P^a*3MHM5}OGm&5MR(7sGpSl83-CJ5(}>{>Wa&9e_FuFvL2oycSUABb!wJS1o?!e( zoL%U642EMQPcSip$C*^e+gZ2NanQ0%`WWUPNN@av$;_#--!QeS<4zMfyQ7Ow@KW^z znFKV-L<{A47-Y{-l4o#%(#ug=c|um9*(TxD=(Du8LdfUvCgnz0qdc_r7T%^z-XZTe mMsk0nh$PMw395He6d5j4&vEe{`@&ikWSt1hRv+tzp9`p zK1iSaQR10Rs-=k_vh2Ng?#w;++%xmz=eO?w_VAz%A2;i`g*6||8md@#=C+SJKJE(4 zso3bmzK#SM-4ppxxjX7`t)>W=SaZoq>&a_ z?3zR$jfdug62{mM9QYqPK)Ieh}m zW5dU0fP1(vuyj?k0CT7XsG}zE_&MEgX+pjIB((>591Cn+zSuYY6Rqt2Wd$cGPG9BA0!sWiaS?H7`Z9P22xzZyrMX|G zUvGbbXzzYS=^W+H@Y)YA!pg^@c!9P7k9L7}k>3)USf&Ry#}Ldcb49SCr6?lTw8Ul& ttV~*l^lq=x{sixgL5YwcUzc1h03ACXm;myX%q*^4EpE;%UM*VO_yyT?%k2OF literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/security/DingTalkCredential.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/security/DingTalkCredential.class new file mode 100644 index 0000000000000000000000000000000000000000..5ee012a42b4f9ce0b7afe20f5ca66fa3841706b2 GIT binary patch literal 223 zcmZXOF$%&!6h!C8XfzgD2wp)Ox6#TnA_#&-yuiBogpF$w){WrREIfdR5;u(&7N3Ft zW`=paA5Q>F#1Z-t283bGE-{)*x625V*?eEfn-oTtxk#PWWxghizNVCwWk-n9sfgc5Ph3Cagw@?Ng7HBg|) zQF>3H=yeYStOw~N5~vSV5f8n(Bb2S(6hG9AlCMr47 zGCm2?EJ^~IWn3y)XcY&8^cmHBSHPY{a&kY81=`;5SiX>fN`pa?E%Zn;G~MkU_64dY ztN%(zY%T@_InRRvt$)@Cl)`k8Xtod2L`TLdm_ExREyI(2ndNwGv;=AoUxrbpRhrCg zY;iwI7qc*Wq|A`c1<<<&nS(NH8#f)?!fglJxFfLre}f9R`E0RFj)EuS<0vGe<{#H@ z48Od8lRyG^zKYM8=f#i$%TU5Wy~BQYfK6DuPV*H&dSFvlxC^KSb;*AZ@h%TnDa*OD ziW+U_JON9zfGU=;!X~EpHMK>(<$p#=ocd=d^g16a`<*v%{hc!u_d4s7-rFBvcTSmA zWG%>wkxQ&Ibgj^;^LNq2CA87tOKV~StNF=3v)WuHUNq-0r;%5$G0P>cI`t}A#Bn+I Y7t7yJ5jNIbT%p5aN}KB{?E*SK0nLw=O8@`> literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/util/IpUtils.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/util/IpUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..d2af579b13700cda1127af388315488007761bbf GIT binary patch literal 2317 zcma)7%TpXh9R3<+nPqm!0|;aZd0`S^ldwP#2oMY*U{)4_*#z?Nkzsd$fn{c$9SB6L zym_(8dvdhO!YVJsSR`tdr57!|c(clz2mK#%NW`yam(4&@mbJA#-M{{R&;EYhzy9;> z_W(Nap@s&GR3eHuR9w@;N=yjUHn+SiB$b%N#B!&={w;uQ zdhrB@!A!7ny%qlj!l#@=j1&BeYvxwOZ>h7e$aJ|)ufg8h>n=gl?C<$l~UGSmQ*BU@Y~9| zn%gREJYY2tMgQ|Og7p}nztaJYQXKz*?+oBy?%{<(NjFs~&qyzf89AQ=`4dP3jfG-APS$rw{ez33A@>9Cw?3q21X~rF2tHdcpJpVI3@OU9%T# z=Z<}eWDo4uvMYBMnCy>kwdl^ENR{1lMt;n3&Ec%MXxbjpyku^&Gi-CkD++hs0)*c2`kJQ@cw|J*Yzva}DyNTchS4<5@c|SMsF%Z1% z$#l*X&PjZZhq;RLEBFn?9zi_dqzp$mR`|jQ)d9T#Koef!suIU=oD!+r=9c{RU4&25WWcV!4pc^0IEIvjrK0zNo z#W{S20ep@@e1VI8(XY@;56`I?E%bhv=ol@Q(NiZ*(OWsSn`plgA=+vw;==fn{@NI& zjy1FsC+Iar-)E@XN%;|K7Hqu6SpnZw!gmwj!&Mg|&!DR~tD^TA>Q(e{@)UD6uR@yMlZB#Y2=mM*V2)CulsRYA)Bv zh6mhLP=h+`XH-XsJOq_v6{UM=shauJ`1^INdOd$fxhshoM#Rq@e%xV{*IZC}0NlAq IL>Y$v1)bU~{r~^~ literal 0 HcmV?d00001 diff --git a/app-stream-api/target/classes/com/dingtalk/open/app/api/util/ThreadUtil.class b/app-stream-api/target/classes/com/dingtalk/open/app/api/util/ThreadUtil.class new file mode 100644 index 0000000000000000000000000000000000000000..86b4974037eb11a451898eda67645b31cefd9a0b GIT binary patch literal 1047 zcma)5Yflt06g`E7VIMpNR1_6_Fbl${@!J{`WoMI-kw^BC;1^P6D->p196AX9O8v4# z5`Ta{%6Mni4XB%FlRob4xu^G@w%>nz{RZGUp5;)$oP~J{_Xo&BEq|WH13a|wCV9o!&2=|- ze6QisM*f^(@P$;;ykzLNiw%a%s%{E~QC}*t9=CQyRO7oLc_w@v@UX!nnb^Oa8M7~s z8J7G&x16R_dxnRHjy@8~;YUZ*r4t(&I<@^s@MfKsC5AC2K33$ZXu78&h>eaIO19@8 z@DuKYT;8&wt2i3|i04g@+@hH_WDm1g=E6{%F!aTJJ( zOlldu%x5LR7H|!d3=3)8pXYV3n_7q6lNpNtU9W}51uSEQ!S2aUIvre-WRC8H; zh((f(!>}y1ql7VM9SN@}P!{ib9GXsI6&{d;XGzeLWOzyfU)H~|dmsXmX13?yHQ5q% zx_ySiThI5ss=K#>Vu+M48G>wC)a|G9E zUFZOC12@Ua65%cKB*6{ji4K^*K;QPv%p@{jFn9rLdwd9O3|%0*z0^jojr=D<_2H6v YDrKJTMB_Fkn6!D!;tp|>{3-t4Pc`Zc-T(jq literal 0 HcmV?d00001 diff --git a/app-stream-api/target/maven-archiver/pom.properties b/app-stream-api/target/maven-archiver/pom.properties new file mode 100644 index 0000000..df87def --- /dev/null +++ b/app-stream-api/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=app-stream-api +groupId=com.dingtalk.open +version=1.0.8-SNAPSHOT diff --git a/app-stream-client/dependency-reduced-pom.xml b/app-stream-client/dependency-reduced-pom.xml new file mode 100644 index 0000000..6734853 --- /dev/null +++ b/app-stream-client/dependency-reduced-pom.xml @@ -0,0 +1,107 @@ + + + + open-app-stream-client + com.dingtalk.open + 1.0.8-SNAPSHOT + + 4.0.0 + app-stream-client + app-stream-client + 1.0.8-SNAPSHOT + + + + maven-shade-plugin + 3.1.1 + + + package + + shade + + + true + true + false + + + com.dingtalk.open:app-stream-api + com.dingtalk.open:app-stream-network-api + com.dingtalk.open:app-stream-network-core + com.dingtalk.open:app-stream-network-ws + com.dingtalk.open:app-stream-protocol + io.netty:* + + + + + io.netty + shade.io.netty + + + + + *:* + + META-INF/maven/** + + + + + + META-INF/services/com.dingtalk.open.app.stream.network.rsocket.RsocketTransportConnector + + + + + + + + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + + jar + + + + + + maven-jar-plugin + 3.3.0 + + + empty-javadoc-jar + package + + jar + + + javadoc + ${basedir}/javadoc + + + + + + + + + com.dingtalk.open + app-stream-network + 1.0.8-SNAPSHOT + pom + compile + true + + + com.alibaba + fastjson + 2.0.0 + compile + + + diff --git a/app-stream-client/pom.xml b/app-stream-client/pom.xml new file mode 100644 index 0000000..7b8049d --- /dev/null +++ b/app-stream-client/pom.xml @@ -0,0 +1,142 @@ + + 4.0.0 + + com.dingtalk.open + open-app-stream-client + 1.0.7 + ../pom.xml + + + app-stream-client + jar + 1.0.7 + app-stream-client + + + + com.dingtalk.open + app-stream-api + ${project.version} + compile + true + + + com.dingtalk.open + app-stream-network + ${project.version} + compile + true + pom + + + com.dingtalk.open + app-stream-protocol + ${project.version} + compile + true + + + io.netty + netty-common + + + io.netty + netty-transport + + + io.netty + netty-codec-http + + + com.alibaba + fastjson + + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.1.1 + + + package + + shade + + + true + true + false + + + com.dingtalk.open:app-stream-api + com.dingtalk.open:app-stream-network-api + com.dingtalk.open:app-stream-network-core + com.dingtalk.open:app-stream-network-ws + com.dingtalk.open:app-stream-protocol + io.netty:* + + + + + io.netty + shade.io.netty + + + + + *:* + + META-INF/maven/** + + + + + + + META-INF/services/com.dingtalk.open.app.stream.network.rsocket.RsocketTransportConnector + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + empty-javadoc-jar + package + + jar + + + javadoc + ${basedir}/javadoc + + + + + + + diff --git a/app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-javadoc.jar b/app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-javadoc.jar new file mode 100644 index 0000000000000000000000000000000000000000..8a8064d12ea23c5b47e258ae4c8488bb1d08e5eb GIT binary patch literal 2362 zcmWIWW@h1HVBlb2@J%!cXFvj+K(?=Ih@-BjpPPOFP?-o&83$OI+KzWzMvM#$D$EQF zKv9G;Uq?SrH`m}0Jzuxp$*1!U83?$3pZJOYU*pD#lExd3OINura%C-jZ#6loAm{YF z4?lkUEm+l&vEcU3@Z+C%%+pTy@?nvenEWwM=hvp`>H47?A{HvU#`q?j)Zii* z%6dyGY<>Ba9A{b5U4xLsdQThr8N7L*sVr^I5(-u~zd zc1llX{+R!pZ@Q)Uv)Wykojd03`S$J9wSq+ne6l+au6iVDb7G&&*Qb*UPtCJPpSq|> z^M^;h)QrRP&hOGOEE7~x%P+sX>zk|b^fuGL9jTXMA4TmvG*8ar?ayZ-ef;~JSIo66 z@r%=XrgBR~jD63}d;VWzq!{ElVue@RU%ekS&o?`ndxmIq#-nR31xGp`T^0~Cug9hJ34lKF+WudW%=+RwCva`%qY+jVl>O5CgZIZ`?DfR(x z>hDkdwIStV*S5;)u8QxwKfmuQ-{bwIYWmX2ycxlN^wmZM_Z47gdb`}1%>s;z&5uBB_hHcu}3M~PNi(*TRqOv13Y>H+IPS-ho zN&V3o<*3zKDO2xA6nn>=ohE<(j$Zxm67h>s?<6mZE!CLJxg=g|E5E@a*_rNJEo{$Q zoQh;qoHM=ph{n9{tsb*aghZ|R_-s|Oa>lvXNl#;EuunU%hK23Zt&=xIcdAT}WfEm7 zJHQ<-vrIMjv~|+)H;s}V8x7{&kTSUauc9T=d)h4JMAbgq+&xj>Yg62u%LJ$Y^jgDx zmMLeBl>Wg(L1MF-f6je*;}z52??=>m?lXl&HTCZL&*OPeap%;?Oj(Q*c-!AGvcMLVTfzSdj|-^Fq}cu~|78{J6_iP5*;uX0^oGE+!!?Zp3geEG_> zzh2&Xw{YddIsdjjlezanXzddt*_YlPP5bk|cXul`yNPQsTZOPsY}-0VjCyU!Hg$yriX9{JZr<3(Tyw)6bU9;@Lyp2yJ zOiha9XUf?Y{Qqt8>Z0}OsnOTZO>sIg<*xbk7si+TAML-J`_FHYdybi=vD+G!GS8#Z zum3A>KR&oe^p^QUyMHf#+p*dKi}&9Wl^_=S8 zf4=(4HSO+-sdt&*#wE6%;JL5){ptx`ccZ?!LYmY3Ds#33?fjDvJ7soi@tVt*yMNr2 z*${GPbG4bw-!94D87VuiM&)0%xsu_m_*G&%%Tw21x!3>B@4jCTF0CLnf(NkTICkdo z7k^+z_XA=_@-uuv5wLVBD#=VO_SVrl>ErFA_t9sgua3qAT|G@N-!oTz&zL&tEM~dA4-A%CnT$PsNu!E1bGiOf>!3^P5tyBws|nVEb*!#!~&Gy?~J+ zz?+dtgc*B*399HIK!D*b$nl8!45AHp#Rt{Lu%uBPSsPL{h|gkBu?_(si@SjpD!jgh z74o=U4Jzglns;Do##ZR#HV#zmBaHh_jB(g10gwfV;6kqkU{)+?^kBm9ET(%gEr3=E i$kBo=^ WFy-iL|P2+W(69G literal 0 HcmV?d00001 diff --git a/app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-javadoc.jar.asc b/app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-javadoc.jar.asc new file mode 100644 index 0000000..a937718 --- /dev/null +++ b/app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-javadoc.jar.asc @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- + +iHUEABYIAB0WIQQ6tvGiqKRC++k9HVs26JaqlNCpHwUCZQpwswAKCRA26JaqlNCp +H2MUAP0dg2HIPvXwTJOgviBbO38KE0U/J0yIz6JKqqrDTFVg+QD+OI+qwY/JDzLF +1LizQo/gUCybe5FZwQJLCT4D7lwVbQk= +=cIcq +-----END PGP SIGNATURE----- diff --git a/app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-sources.jar b/app-stream-client/target/app-stream-client-1.0.8-SNAPSHOT-sources.jar new file mode 100644 index 0000000000000000000000000000000000000000..15658aa0f5b2ecfc90cdaa4eaf0263bd9d12c8cc GIT binary patch literal 2379767 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

;Hi^o)n#(tl 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%0AATg3#wG$G;@^p-_l=)Jluvqkcsbm_} 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