AsyncTransaction.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:3k
源码类别:

android开发

开发平台:

C/C++

  1. /*
  2.  * Copyright (C) 2007 Esmertec AG.
  3.  * Copyright (C) 2007 The Android Open Source Project
  4.  *
  5.  * Licensed under the Apache License, Version 2.0 (the "License");
  6.  * you may not use this file except in compliance with the License.
  7.  * You may obtain a copy of the License at
  8.  *
  9.  *     http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */
  17. package com.android.im.imps;
  18. import com.android.im.engine.ImErrorInfo;
  19. abstract class AsyncTransaction extends ImpsTransaction {
  20.     private final AsyncCompletion mCompletionCallback;
  21.     private boolean mCompletionNotified;
  22.     protected final ImpsTransactionManager mTransManager;
  23.     AsyncTransaction(ImpsTransactionManager manager) {
  24.         this(manager, null);
  25.     }
  26.     AsyncTransaction(ImpsTransactionManager manager, AsyncCompletion completion) {
  27.         mTransManager = manager;
  28.         mCompletionCallback = completion;
  29.         manager.beginClientTransaction(this);
  30.     }
  31.     /**
  32.      * Sends a request within this transaction.
  33.      *
  34.      * @param request the request to send.
  35.      */
  36.     public void sendRequest(Primitive request) {
  37.         sendPrimitive(request);
  38.     }
  39.     /**
  40.      * Notify that an error occurs in the transaction.
  41.      *
  42.      * @param error the error
  43.      */
  44.     final void notifyError(ImErrorInfo error) {
  45.         notifyErrorResponse(new ImpsErrorInfo(error.getCode(), error.getDescription(), null));
  46.     }
  47.     /**
  48.      * Notify that a response from the server has arrived.
  49.      *
  50.      * @param response the response.
  51.      */
  52.     final void notifyResponse(Primitive response) {
  53.         response.setTransaction(this);
  54.         ImpsErrorInfo error = ImpsUtils.checkResultError(response);
  55.         if (error != null) {
  56.             notifyErrorResponse(error);
  57.         } else {
  58.             notifySuccessResponse(response);
  59.         }
  60.     }
  61.     protected void notifyErrorResponse(ImpsErrorInfo error) {
  62.         onResponseError(error);
  63.         mTransManager.endClientTransaction(this);
  64.         notifyAsyncCompletionError(error);
  65.     }
  66.     protected void notifySuccessResponse(Primitive response) {
  67.         onResponseOk(response);
  68.         mTransManager.endClientTransaction(this);
  69.         notifyAsyncCompletionSuccess();
  70.     }
  71.     public abstract void onResponseError(ImpsErrorInfo error);
  72.     public abstract void onResponseOk(Primitive response);
  73.     protected void notifyAsyncCompletionError(ImErrorInfo error) {
  74.         if (!mCompletionNotified) {
  75.             mCompletionNotified = true;
  76.             if (mCompletionCallback != null)
  77.                 mCompletionCallback.onError(error);
  78.         }
  79.     }
  80.     protected void notifyAsyncCompletionSuccess() {
  81.         if (!mCompletionNotified) {
  82.             mCompletionNotified = true;
  83.             if (mCompletionCallback != null)
  84.                 mCompletionCallback.onComplete();
  85.         }
  86.     }
  87. }