DataChannel.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.ImException;
  19. /**
  20.  * The IMPS transport binding is divided into two channels: a mandatory data
  21.  * channel and a conditional CIR channel. All the exchange of CSP primitives is
  22.  * done in the data channel.
  23.  */
  24. abstract class DataChannel {
  25.     protected ImpsConnection mConnection;
  26.     protected PrimitiveParser mParser;
  27.     protected PrimitiveSerializer mSerializer;
  28.     protected long mMinPollMillis;
  29.     protected DataChannel(ImpsConnection connection) throws ImException {
  30.         mConnection = connection;
  31.         mParser = mConnection.getConfig().createPrimitiveParser();
  32.         mSerializer = mConnection.getConfig().createPrimitiveSerializer();
  33.     }
  34.     /**
  35.      * Establishes a data channel with the IMPS server.
  36.      *
  37.      * @throws ImException if an error occur during establishing the data
  38.      *             channel.
  39.      */
  40.     public abstract void connect() throws ImException;
  41.     /**
  42.      * Shutdown the data channel.
  43.      */
  44.     public abstract void shutdown();
  45.     /**
  46.      * Sends a CSP primitive to the IMPS server through this data channel.
  47.      *
  48.      * @param p the primitive to send.
  49.      */
  50.     public abstract void sendPrimitive(Primitive p);
  51.     /**
  52.      * Receives a primitive from this data channel, waiting until a primitive
  53.      * from the server arrived or being interrupted.
  54.      *
  55.      * @return the received primitive
  56.      * @throws InterruptedException
  57.      */
  58.     public abstract Primitive receivePrimitive() throws InterruptedException;
  59.     /**
  60.      * Gets the time when the last primitive was sent to the server through the
  61.      * data channel.
  62.      *
  63.      * @return the time last primitive was sent.
  64.      */
  65.     public abstract long getLastActiveTime();
  66.     /**
  67.      * Tells if there is any primitive waiting to send.
  68.      *
  69.      * @return <code>true</code> if there is one or more primitives waiting to send.
  70.      */
  71.     public abstract boolean isSendingQueueEmpty();
  72.     /**
  73.      * Starts the keep alive task. KeepAliveRequest will be sent to the server
  74.      * if no other transaction has occurred during the KeepAliveTime interval.
  75.      */
  76.     public abstract void startKeepAlive(long interval);
  77.     /**
  78.      * Set the ServerMinPoll value (in seconds) after capability negotiation.
  79.      * The DataChannel <b>MUST NOT</b> send more than 1 PollingRequest within
  80.      * this interval.
  81.      */
  82.     public void setServerMinPoll(long interval)
  83.     {
  84.         mMinPollMillis = interval * 1000;
  85.     }
  86. }