blob: 8ef5b81fd6581270923de600430ee62844ff2298 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.eventmesh.dashboard.core.function.SDK.operation;
import org.apache.eventmesh.client.grpc.consumer.EventMeshGrpcConsumer;
import org.apache.eventmesh.client.grpc.producer.EventMeshGrpcProducer;
import org.apache.eventmesh.client.http.consumer.EventMeshHttpConsumer;
import org.apache.eventmesh.client.http.producer.EventMeshHttpProducer;
import org.apache.eventmesh.client.tcp.impl.cloudevent.CloudEventTCPClient;
import org.apache.eventmesh.client.tcp.impl.eventmeshmessage.EventMeshMessageTCPClient;
import org.apache.eventmesh.client.tcp.impl.openmessage.OpenMessageTCPClient;
import org.apache.eventmesh.common.Constants;
import org.apache.eventmesh.dashboard.core.function.SDK.AbstractSDKOperation;
import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateRuntimeConfig;
import org.apache.eventmesh.dashboard.core.function.SDK.config.CreateSDKConfig;
import org.apache.eventmesh.dashboard.core.function.SDK.wrapper.RuntimeSDKWrapper;
import java.util.AbstractMap.SimpleEntry;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class RuntimeSDKOperation extends AbstractSDKOperation<RuntimeSDKWrapper> {
private final RuntimeTcpCloudEventSDKOperation tcpCloudEventSDKOperation = new RuntimeTcpCloudEventSDKOperation();
private final RuntimeTcpEventMeshSDKOperation tcpEventMeshSDKOperation = new RuntimeTcpEventMeshSDKOperation();
private final RuntimeTcpOpenMessageSDKOperation tcpOpenMessageSDKOperation = new RuntimeTcpOpenMessageSDKOperation();
private final RuntimeHttpProducerSDKOperation httpProducerSDKOperation = new RuntimeHttpProducerSDKOperation();
private final RuntimeHttpConsumerSDKOperation httpConsumerSDKOperation = new RuntimeHttpConsumerSDKOperation();
private final RuntimeGrpcProducerSDKOperation grpcProducerSDKOperation = new RuntimeGrpcProducerSDKOperation();
private final RuntimeGrpcConsumerSDKOperation grpcConsumerSDKOperation = new RuntimeGrpcConsumerSDKOperation();
@Override
public SimpleEntry<String, RuntimeSDKWrapper> createClient(CreateSDKConfig clientConfig) {
CreateRuntimeConfig runtimeConfig = (CreateRuntimeConfig) clientConfig;
final String protocol = ((CreateRuntimeConfig) clientConfig).getProtocol();
final String protocolName = ((CreateRuntimeConfig) clientConfig).getProtocolName();
final String clientType = ((CreateRuntimeConfig) clientConfig).getClientType();
SimpleEntry<String, CloudEventTCPClient> cloudSimpleEntry = null;
SimpleEntry<String, EventMeshMessageTCPClient> eventMeshMessageSimpleEntry = null;
SimpleEntry<String, OpenMessageTCPClient> openMessageSimpleEntry = null;
SimpleEntry<String, EventMeshHttpProducer> httpProducerSimpleEntry = null;
SimpleEntry<String, EventMeshHttpConsumer> httpConsumerSimpleEntry = null;
SimpleEntry<String, EventMeshGrpcProducer> grpcProducerSimpleEntry = null;
SimpleEntry<String, EventMeshGrpcConsumer> grpcConsumerSimpleEntry = null;
switch (protocol) {
case Constants.TCP:
switch (protocolName) {
case Constants.CLOUD_EVENTS_PROTOCOL_NAME:
cloudSimpleEntry = tcpCloudEventSDKOperation.createClient(runtimeConfig);
break;
case Constants.EM_MESSAGE_PROTOCOL_NAME:
eventMeshMessageSimpleEntry = tcpEventMeshSDKOperation.createClient(runtimeConfig);
break;
case Constants.OPEN_MESSAGE_PROTOCOL_NAME:
openMessageSimpleEntry = tcpOpenMessageSDKOperation.createClient(runtimeConfig);
break;
default:
break;
}
break;
case Constants.HTTP:
switch (clientType) {
case "producer":
httpProducerSimpleEntry = httpProducerSDKOperation.createClient(runtimeConfig);
break;
case "consumer":
httpConsumerSimpleEntry = httpConsumerSDKOperation.createClient(runtimeConfig);
break;
default:
break;
}
break;
case Constants.GRPC:
switch (clientType) {
case "producer":
grpcProducerSimpleEntry = grpcProducerSDKOperation.createClient(runtimeConfig);
break;
case "consumer":
grpcConsumerSimpleEntry = grpcConsumerSDKOperation.createClient(runtimeConfig);
break;
default:
break;
}
break;
default:
log.warn("clients that do not support the current protocol");
break;
}
RuntimeSDKWrapper runtimeClient = new RuntimeSDKWrapper(
cloudSimpleEntry != null ? cloudSimpleEntry.getValue() : null,
eventMeshMessageSimpleEntry != null ? eventMeshMessageSimpleEntry.getValue() : null,
openMessageSimpleEntry != null ? openMessageSimpleEntry.getValue() : null,
httpProducerSimpleEntry != null ? httpProducerSimpleEntry.getValue() : null,
httpConsumerSimpleEntry != null ? httpConsumerSimpleEntry.getValue() : null,
grpcProducerSimpleEntry != null ? grpcProducerSimpleEntry.getValue() : null,
grpcConsumerSimpleEntry != null ? grpcConsumerSimpleEntry.getValue() : null
);
return new SimpleEntry<>(clientConfig.getUniqueKey(), runtimeClient);
}
@Override
public void close(Object client) {
castClient(client).close();
}
}