Package iqq.im.actor

Source Code of iqq.im.actor.HttpActor$HttpAdaptor

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/

/**
* Project  : WebQQCore
* Package  : iqq.im.actor
* File     : HttpActor.java
* Author   : solosky < solosky772@qq.com >
* Created  : 2012-9-2
* License  : Apache License 2.0
*/
package iqq.im.actor;

import iqq.im.QQException;
import iqq.im.action.HttpAction;
import iqq.im.core.QQContext;
import iqq.im.core.QQService;
import iqq.im.event.QQActionEvent;
import iqq.im.http.QQHttpListener;
import iqq.im.http.QQHttpRequest;
import iqq.im.http.QQHttpResponse;
import iqq.im.service.HttpService;

import java.util.concurrent.Future;

/**
* <p>HttpActor class.</p>
*
* @author solosky
*/
public class HttpActor implements QQActor {
  private Type type;
  private QQContext context;
  private HttpAction action;
  private QQHttpResponse response;
  private Throwable throwable;
  private long current;
  private long total;
 
  /** {@inheritDoc} */
  @Override
  public void execute() {
    try {
      switch (type) {
      case BUILD_REQUEST: {
        HttpService service = (HttpService) context.getSerivce(QQService.Type.HTTP);
        QQHttpRequest request = action.buildRequest();
        Future<QQHttpResponse> future = service.executeHttpRequest(request, new HttpAdaptor(context, action));
        action.setResponseFuture(future);
        }
        break;

      case CANCEL_REQUEST:
        action.cancelRequest();
        break;
       
      case ON_HTTP_ERROR:
        action.onHttpError(throwable);
        break;
       
      case ON_HTTP_FINISH:
        action.onHttpFinish(response);
        break;
       
      case ON_HTTP_HEADER:
        action.onHttpHeader(response);
        break;
       
      case ON_HTTP_READ:
        action.onHttpRead(current, total);
        break;
       
      case ON_HTTP_WRITE:
        action.onHttpWrite(current, total);
        break;

      }
    } catch (QQException e) {
      action.notifyActionEvent(QQActionEvent.Type.EVT_ERROR, e);
    }
  }
 
 
  public static enum Type{
    BUILD_REQUEST,
    CANCEL_REQUEST,
    ON_HTTP_ERROR,
    ON_HTTP_FINISH,
    ON_HTTP_HEADER,
    ON_HTTP_WRITE,
    ON_HTTP_READ
  }

 
  /**
   * <p>Constructor for HttpActor.</p>
   *
   * @param type a {@link iqq.im.actor.HttpActor.Type} object.
   * @param context a {@link iqq.im.core.QQContext} object.
   * @param action a {@link iqq.im.action.HttpAction} object.
   */
  public HttpActor(Type type, QQContext context, HttpAction action) {
    this.type = type;
    this.context = context;
    this.action = action;
  }


  /**
   * <p>Constructor for HttpActor.</p>
   *
   * @param type a {@link iqq.im.actor.HttpActor.Type} object.
   * @param context a {@link iqq.im.core.QQContext} object.
   * @param action a {@link iqq.im.action.HttpAction} object.
   * @param response a {@link iqq.im.http.QQHttpResponse} object.
   */
  public HttpActor(Type type, QQContext context, HttpAction action, QQHttpResponse response) {
    this.type = type;
    this.context = context;
    this.action = action;
    this.response = response;
  }
 

  /**
   * <p>Constructor for HttpActor.</p>
   *
   * @param type a {@link iqq.im.actor.HttpActor.Type} object.
   * @param context a {@link iqq.im.core.QQContext} object.
   * @param action a {@link iqq.im.action.HttpAction} object.
   * @param throwable a {@link java.lang.Throwable} object.
   */
  public HttpActor(Type type, QQContext context, HttpAction action, Throwable throwable) {
    this.type = type;
    this.context = context;
    this.action = action;
    this.throwable = throwable;
  }


  /**
   * <p>Constructor for HttpActor.</p>
   *
   * @param type a {@link iqq.im.actor.HttpActor.Type} object.
   * @param context a {@link iqq.im.core.QQContext} object.
   * @param action a {@link iqq.im.action.HttpAction} object.
   * @param current a long.
   * @param total a long.
   */
  public HttpActor(Type type, QQContext context, HttpAction action, long current, long total) {
    this.type = type;
    this.context = context;
    this.action = action;
    this.current = current;
    this.total = total;
  }


  public static class HttpAdaptor implements QQHttpListener{
    private QQContext context;
    private HttpAction action;
   
    public HttpAdaptor(QQContext context, HttpAction action) {
      this.context = context;
      this.action = action;
    }

    @Override
    public void onHttpFinish(QQHttpResponse response) {
      context.pushActor(new HttpActor(Type.ON_HTTP_FINISH, context, action, response));
    }

    @Override
    public void onHttpError(Throwable t) {
      context.pushActor(new HttpActor(Type.ON_HTTP_ERROR, context, action, t));
     
    }

    @Override
    public void onHttpHeader(QQHttpResponse response) {
      context.pushActor(new HttpActor(Type.ON_HTTP_HEADER, context, action, response));
     
    }

    @Override
    public void onHttpWrite(long current, long total) {
      context.pushActor(new HttpActor(Type.ON_HTTP_WRITE, context, action, current, total));
    }

    @Override
    public void onHttpRead(long current, long total) {
      context.pushActor(new HttpActor(Type.ON_HTTP_READ, context, action, current, total));
    }
  }


  /** {@inheritDoc} */
  @Override
  public String toString() {
    return "HttpActor [type=" + type + ", action=" + action + "]";
  }
}
TOP

Related Classes of iqq.im.actor.HttpActor$HttpAdaptor

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.