content: package backtype.storm.drpc;
  
  import backtype.storm.generated.DRPCRequest;
  import backtype.storm.generated.DistributedRPCInvocations;
  import org.apache.thrift7.TException;
  import org.apache.thrift7.protocol.TBinaryProtocol;
  import org.apache.thrift7.transport.TFramedTransport;
  import org.apache.thrift7.transport.TSocket;
  import org.apache.thrift7.transport.TTransport;
  
  public class DRPCInvocationsClient implements DistributedRPCInvocations.Iface {
      private TTransport conn;
      private DistributedRPCInvocations.Client client;
      private String host;
      private int port;    
  
      public DRPCInvocationsClient(String host, int port) {
          try {
              this.host = host;
              this.port = port;
              connect();
          } catch(TException e) {
              throw new RuntimeException(e);
          }
      }
      
      private void connect() throws TException {
          conn = new TFramedTransport(new TSocket(host, port));
          client = new DistributedRPCInvocations.Client(new TBinaryProtocol(conn));
          conn.open();
      }
      
      public String getHost() {
          return host;
      }
      
      public int getPort() {
          return port;
      }       
  
      public void result(String id, String result) throws TException {
          try {
              if(client==null) connect();
              client.result(id, result);
          } catch(TException e) {
              client = null;
              throw e;
          }
      }
  
      public DRPCRequest fetchRequest(String func) throws TException {
          try {
              if(client==null) connect();
              return client.fetchRequest(func);
          } catch(TException e) {
              client = null;
              throw e;
          }
      }    
  
      public void failRequest(String id) throws TException {
          try {
              if(client==null) connect();
              client.failRequest(id);
          } catch(TException e) {
              client = null;
              throw e;
          }
      }
  
      public void close() {
          conn.close();
      }
  }
  