/* * Copyright (C) 2016 The Dagger Authors. * * Licensed 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 dagger.grpc.server; import dagger.Module; import dagger.Provides; import io.grpc.Server; import io.grpc.ServerBuilder; import io.grpc.netty.NettyServerBuilder; import java.net.InetSocketAddress; import java.net.SocketAddress; import javax.inject.Singleton; /** * Installing this module into a {@link Singleton @Singleton} component means the component can * provide a {@linkplain NettyServerBuilder Netty}-based {@link Server}. */ @Module(includes = ServerModule.class) public final class NettyServerModule { private final SocketAddress socketAddress; private NettyServerModule(SocketAddress socketAddress) { this.socketAddress = socketAddress; } /** * A module that binds to {@code port} on the wildcard address. */ public static NettyServerModule bindingToPort(int port) { return new NettyServerModule(new InetSocketAddress(port)); } /** * A module that binds to {@code socketAddress}. */ public static NettyServerModule bindingTo(SocketAddress socketAddress) { return new NettyServerModule(socketAddress); } @Provides ServerBuilder serverBuilder() { return NettyServerBuilder.forAddress(socketAddress); } }