26
26
import com .google .common .util .concurrent .MoreExecutors ;
27
27
import io .grpc .ChannelLogger ;
28
28
import io .grpc .ExperimentalApi ;
29
- import io .grpc .internal .AbstractManagedChannelImplBuilder ;
29
+ import io .grpc .ForwardingChannelBuilder ;
30
+ import io .grpc .Internal ;
31
+ import io .grpc .ManagedChannelBuilder ;
30
32
import io .grpc .internal .ClientTransportFactory ;
31
33
import io .grpc .internal .ConnectionClientTransport ;
32
34
import io .grpc .internal .GrpcUtil ;
35
+ import io .grpc .internal .ManagedChannelImplBuilder ;
36
+ import io .grpc .internal .ManagedChannelImplBuilder .ClientTransportFactoryBuilder ;
33
37
import io .grpc .internal .SharedResourceHolder ;
34
38
import io .grpc .internal .TransportTracer ;
35
39
import java .lang .reflect .InvocationTargetException ;
46
50
47
51
/** Convenience class for building channels with the cronet transport. */
48
52
@ ExperimentalApi ("There is no plan to make this API stable, given transport API instability" )
49
- public final class CronetChannelBuilder extends
50
- AbstractManagedChannelImplBuilder <CronetChannelBuilder > {
53
+ public final class CronetChannelBuilder extends ForwardingChannelBuilder <CronetChannelBuilder > {
51
54
52
55
private static final String LOG_TAG = "CronetChannelBuilder" ;
53
56
@@ -81,6 +84,8 @@ public static CronetChannelBuilder forAddress(String name, int port) {
81
84
private ScheduledExecutorService scheduledExecutorService ;
82
85
83
86
private final CronetEngine cronetEngine ;
87
+ private final ManagedChannelImplBuilder managedChannelImplBuilder ;
88
+ private TransportTracer .Factory transportTracerFactory = TransportTracer .getDefaultFactory ();
84
89
85
90
private boolean alwaysUsePut = false ;
86
91
@@ -103,12 +108,30 @@ public static CronetChannelBuilder forAddress(String name, int port) {
103
108
private int trafficStatsUid ;
104
109
105
110
private CronetChannelBuilder (String host , int port , CronetEngine cronetEngine ) {
106
- super (
111
+ super ();
112
+
113
+ // An anonymous class to inject client transport factory builder.
114
+ final class CronetChannelTransportFactoryBuilder implements ClientTransportFactoryBuilder {
115
+ @ Override
116
+ public ClientTransportFactory buildClientTransportFactory () {
117
+ return buildTransportFactory ();
118
+ }
119
+ }
120
+
121
+ managedChannelImplBuilder = new ManagedChannelImplBuilder (
107
122
InetSocketAddress .createUnresolved (host , port ),
108
- GrpcUtil .authorityFromHostAndPort (host , port ));
123
+ GrpcUtil .authorityFromHostAndPort (host , port ),
124
+ new CronetChannelTransportFactoryBuilder (),
125
+ null );
109
126
this .cronetEngine = Preconditions .checkNotNull (cronetEngine , "cronetEngine" );
110
127
}
111
128
129
+ @ Internal
130
+ @ Override
131
+ protected ManagedChannelBuilder <?> delegate () {
132
+ return managedChannelImplBuilder ;
133
+ }
134
+
112
135
/**
113
136
* Sets the maximum message size allowed to be received on the channel. If not called,
114
137
* defaults to {@link io.grpc.internal.GrpcUtil#DEFAULT_MAX_MESSAGE_SIZE}.
@@ -188,8 +211,7 @@ public final CronetChannelBuilder scheduledExecutorService(
188
211
return this ;
189
212
}
190
213
191
- @ Override
192
- protected final ClientTransportFactory buildTransportFactory () {
214
+ final ClientTransportFactory buildTransportFactory () {
193
215
return new CronetTransportFactory (
194
216
new TaggingStreamFactory (
195
217
cronetEngine , trafficStatsTagSet , trafficStatsTag , trafficStatsUidSet , trafficStatsUid ),
0 commit comments