Package org.snova.framework.proxy.c4.http

Source Code of org.snova.framework.proxy.c4.http.PullWorker

/**
*
*/
package org.snova.framework.proxy.c4.http;

import java.util.concurrent.TimeUnit;

import org.arch.config.IniProperties;
import org.arch.util.NetworkHelper;
import org.jboss.netty.handler.codec.http.DefaultHttpRequest;
import org.jboss.netty.handler.codec.http.HttpChunk;
import org.jboss.netty.handler.codec.http.HttpHeaders;
import org.jboss.netty.handler.codec.http.HttpMethod;
import org.jboss.netty.handler.codec.http.HttpRequest;
import org.jboss.netty.handler.codec.http.HttpResponse;
import org.jboss.netty.handler.codec.http.HttpVersion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.snova.framework.config.SnovaConfiguration;
import org.snova.framework.proxy.c4.CumulateReader;
import org.snova.framework.util.SharedObjectHelper;
import org.snova.http.client.FutureCallback;
import org.snova.http.client.HttpClient;
import org.snova.http.client.HttpClientException;
import org.snova.http.client.HttpClientHandler;

/**
* @author yinqiwen
*
*/
public class PullWorker implements FutureCallback
{
  protected static Logger    logger  = LoggerFactory
                                              .getLogger(PullWorker.class);
  private HttpTunnelService  serv;
  HttpClientHandler        httpClientHandler;
  private CumulateReader    cumulater  = new CumulateReader();
  private int                index;
 
  public PullWorker(HttpTunnelService serv, int index)
  {
    this.serv = serv;
    this.index = index;
  }
 
  public void start()
  {
    IniProperties cfg = SnovaConfiguration.getInstance().getIniProperties();
    HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1,
            HttpMethod.POST, serv.server.url.toString() + "pull");
    request.setHeader(HttpHeaders.Names.HOST, serv.server.url.getHost());
   
    request.setHeader(HttpHeaders.Names.CONNECTION, "keep-alive");
    request.setHeader("UserToken", NetworkHelper.getMacAddress());
    request.setHeader(
            "C4MiscInfo",
            String.format("%d_%d", index,
                    cfg.getIntProperty("C4", "ReadTimeout", 55)));
    request.setHeader(
            HttpHeaders.Names.USER_AGENT,
            cfg.getProperty("C4", "UserAgent",
                    "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1"));
    request.setHeader(HttpHeaders.Names.CONTENT_TYPE,
            "application/octet-stream");
    request.setHeader(HttpHeaders.Names.CONTENT_LENGTH, "0");
    HttpClient client = HttpTunnelService.httpClient;
    try
    {
      client.execute(request, this);
    }
    catch (HttpClientException e)
    {
      logger.error("Pullworker Http client error.", e);
    }
  }
 
  @Override
  public void onResponse(HttpResponse res)
  {
    if (res.getStatus().getCode() == 200)
    {
      cumulater.fillResponseBuffer(res.getContent());
    }
    else
    {
      if (res.getStatus().getCode() != 200)
      {
        logger.error("Pullworker recv unexpected response:" + res.getStatus());
      }
    }
   
  }
 
  @Override
  public void onBody(HttpChunk chunk)
  {
    cumulater.fillResponseBuffer(chunk.getContent());
  }
 
  @Override
  public void onComplete(HttpResponse res)
  {
    start();
  }
 
  @Override
  public void onError(String error)
  {
    logger.error("Pullworker recv unexpected error:" + error);
    SharedObjectHelper.getGlobalTimer().schedule(new Runnable()
    {
      public void run()
      {
        start();
      }
    }, 1, TimeUnit.SECONDS);
  }
}
TOP

Related Classes of org.snova.framework.proxy.c4.http.PullWorker

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.