private DefaultServiceClient( GraphName nodeName, ServiceDeclaration serviceDeclaration, MessageFactory messageFactory, ScheduledExecutorService executorService) throws IOException { this.serviceDeclaration = serviceDeclaration; this.messageFactory = messageFactory; messageBufferPool = new MessageBufferPool(); responseListeners = new LinkedList<ServiceResponseListener<S>>(); connectionHeader = new ConnectionHeader(); connectionHeader.addField(ConnectionHeaderFields.CALLER_ID, nodeName.toString()); // TODO(damonkohler): Support non-persistent connections. connectionHeader.addField(ConnectionHeaderFields.PERSISTENT, "1"); connectionHeader.merge(serviceDeclaration.toConnectionHeader()); tcpClientManager = TcpClientManager.getInstance(executorService); ServiceClientHandshakeHandler<T, S> serviceClientHandshakeHandler = new ServiceClientHandshakeHandler<T, S>( connectionHeader, responseListeners, executorService); handshakeLatch = new HandshakeLatch(); serviceClientHandshakeHandler.addListener(handshakeLatch); tcpClientManager.addNamedChannelHandler(serviceClientHandshakeHandler); }
@Override public T newMessage() { return messageFactory.newFromType(serviceDeclaration.getType()); }
@Override public GraphName getName() { return serviceDeclaration.getName(); }