what-the-bank/sources/io/grpc/ServerServiceDefinition.java

106 lines
5.3 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package io.grpc;
import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/* loaded from: classes6.dex */
public final class ServerServiceDefinition {
private final Map<String, ServerMethodDefinition<?, ?>> methods;
private final ServiceDescriptor serviceDescriptor;
public static Builder builder(String str) {
return new Builder(str);
}
public static Builder builder(ServiceDescriptor serviceDescriptor) {
return new Builder(serviceDescriptor);
}
private ServerServiceDefinition(ServiceDescriptor serviceDescriptor, Map<String, ServerMethodDefinition<?, ?>> map) {
this.serviceDescriptor = (ServiceDescriptor) Preconditions.checkNotNull(serviceDescriptor, "serviceDescriptor");
this.methods = Collections.unmodifiableMap(new HashMap(map));
}
public final Collection<ServerMethodDefinition<?, ?>> getMethods() {
return this.methods.values();
}
public final ServerMethodDefinition<?, ?> getMethod(String str) {
return this.methods.get(str);
}
/* loaded from: classes6.dex */
public static final class Builder {
private final Map<String, ServerMethodDefinition<?, ?>> methods;
private final ServiceDescriptor serviceDescriptor;
private final String serviceName;
private Builder(String str) {
this.methods = new HashMap();
this.serviceName = (String) Preconditions.checkNotNull(str, "serviceName");
this.serviceDescriptor = null;
}
private Builder(ServiceDescriptor serviceDescriptor) {
this.methods = new HashMap();
this.serviceDescriptor = (ServiceDescriptor) Preconditions.checkNotNull(serviceDescriptor, "serviceDescriptor");
this.serviceName = serviceDescriptor.getName();
}
public final <ReqT, RespT> Builder addMethod(MethodDescriptor<ReqT, RespT> methodDescriptor, ServerCallHandler<ReqT, RespT> serverCallHandler) {
return addMethod(ServerMethodDefinition.create((MethodDescriptor) Preconditions.checkNotNull(methodDescriptor, "method must not be null"), (ServerCallHandler) Preconditions.checkNotNull(serverCallHandler, "handler must not be null")));
}
public final <ReqT, RespT> Builder addMethod(ServerMethodDefinition<ReqT, RespT> serverMethodDefinition) {
MethodDescriptor<ReqT, RespT> methodDescriptor = serverMethodDefinition.getMethodDescriptor();
Preconditions.checkArgument(this.serviceName.equals(methodDescriptor.getServiceName()), "Method name should be prefixed with service name and separated with '/'. Expected service name: '%s'. Actual fully qualifed method name: '%s'.", this.serviceName, methodDescriptor.getFullMethodName());
String fullMethodName = methodDescriptor.getFullMethodName();
Preconditions.checkState(!this.methods.containsKey(fullMethodName), "Method by same name already registered: %s", fullMethodName);
this.methods.put(fullMethodName, serverMethodDefinition);
return this;
}
public final ServerServiceDefinition build() {
ServiceDescriptor serviceDescriptor = this.serviceDescriptor;
if (serviceDescriptor == null) {
ArrayList arrayList = new ArrayList(this.methods.size());
Iterator<ServerMethodDefinition<?, ?>> it = this.methods.values().iterator();
while (it.hasNext()) {
arrayList.add(it.next().getMethodDescriptor());
}
serviceDescriptor = new ServiceDescriptor(this.serviceName, arrayList);
}
HashMap hashMap = new HashMap(this.methods);
for (MethodDescriptor<?, ?> methodDescriptor : serviceDescriptor.getMethods()) {
ServerMethodDefinition serverMethodDefinition = (ServerMethodDefinition) hashMap.remove(methodDescriptor.getFullMethodName());
if (serverMethodDefinition == null) {
StringBuilder sb = new StringBuilder("No method bound for descriptor entry ");
sb.append(methodDescriptor.getFullMethodName());
throw new IllegalStateException(sb.toString());
}
if (serverMethodDefinition.getMethodDescriptor() != methodDescriptor) {
StringBuilder sb2 = new StringBuilder("Bound method for ");
sb2.append(methodDescriptor.getFullMethodName());
sb2.append(" not same instance as method in service descriptor");
throw new IllegalStateException(sb2.toString());
}
}
if (hashMap.size() > 0) {
StringBuilder sb3 = new StringBuilder("No entry in descriptor matching bound method ");
sb3.append(((ServerMethodDefinition) hashMap.values().iterator().next()).getMethodDescriptor().getFullMethodName());
throw new IllegalStateException(sb3.toString());
}
return new ServerServiceDefinition(serviceDescriptor, this.methods);
}
}
public final ServiceDescriptor getServiceDescriptor() {
return this.serviceDescriptor;
}
}