Package com.taobao.zeus.socket.worker.reqresp

Source Code of com.taobao.zeus.socket.worker.reqresp.WorkerWebExecute

package com.taobao.zeus.socket.worker.reqresp;

import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Future;

import javax.xml.transform.Source;

import com.taobao.zeus.socket.SocketLog;
import com.taobao.zeus.socket.master.AtomicIncrease;
import com.taobao.zeus.socket.protocol.Protocol.ExecuteKind;
import com.taobao.zeus.socket.protocol.Protocol.Response;
import com.taobao.zeus.socket.protocol.Protocol.SocketMessage;
import com.taobao.zeus.socket.protocol.Protocol.WebOperate;
import com.taobao.zeus.socket.protocol.Protocol.WebRequest;
import com.taobao.zeus.socket.protocol.Protocol.WebResponse;
import com.taobao.zeus.socket.protocol.Protocol.SocketMessage.Kind;
import com.taobao.zeus.socket.worker.WorkerContext;
import com.taobao.zeus.socket.worker.WorkerHandler.ResponseListener;

public class WorkerWebExecute {
 
  public Future<WebResponse> send(final WorkerContext context,ExecuteKind kind,String id){
   
    final WebRequest req=WebRequest.newBuilder().setRid(AtomicIncrease.getAndIncrement()).setOperate(WebOperate.ExecuteJob)
      .setEk(kind).setId(id).build();
    SocketMessage sm=SocketMessage.newBuilder().setKind(Kind.WEB_REUQEST).setBody(req.toByteString()).build();
   
    Future<WebResponse> f=context.getThreadPool().submit(new Callable<WebResponse>() {
      private WebResponse response;
      public WebResponse call() throws Exception {
        final CountDownLatch latch=new CountDownLatch(1);
        context.getHandler().addListener(new ResponseListener() {
          public void onWebResponse(WebResponse resp) {
            if(resp.getRid()==req.getRid()){
              context.getHandler().removeListener(this);
              response=resp;
              latch.countDown();
            }
          }
          public void onResponse(Response resp) {}
        });
        latch.await();
        return response;
      }
    });
    context.getServerChannel().write(sm);
    SocketLog.info("send web execute request,rid="+req.getRid()+",kind="+kind+",id="+id);
    return f;
   
  }
 
}
TOP

Related Classes of com.taobao.zeus.socket.worker.reqresp.WorkerWebExecute

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.