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

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.engine;
  18. import java.util.Collections;
  19. import java.util.List;
  20. import java.util.Vector;
  21. import java.util.concurrent.CopyOnWriteArrayList;
  22. import android.util.Log;
  23. /**
  24.  * A ChatSession represents a conversation between two users. A ChatSession has
  25.  * a unique participant which is either another user or a group.
  26.  */
  27. public class ChatSession {
  28.     private ImEntity mParticipant;
  29.     private ChatSessionManager mManager;
  30.     private CopyOnWriteArrayList<MessageListener> mListeners;
  31.     private Vector<Message> mHistoryMessages;
  32.     /**
  33.      * Creates a new ChatSession with a particular participant.
  34.      *
  35.      * @param participant the participant with who the user communicates.
  36.      * @param connection the underlying network connection.
  37.      */
  38.     ChatSession(ImEntity participant, ChatSessionManager manager) {
  39.         mParticipant = participant;
  40.         mManager = manager;
  41.         mListeners = new CopyOnWriteArrayList<MessageListener>();
  42.         mHistoryMessages = new Vector<Message>();
  43.     }
  44.     public ImEntity getParticipant() {
  45.         return mParticipant;
  46.     }
  47.     public void setParticipant(ImEntity participant) {
  48.         mParticipant = participant;
  49.     }
  50.     /**
  51.      * Adds a MessageListener so that it can be notified of any new message in
  52.      * this session.
  53.      *
  54.      * @param listener
  55.      */
  56.     public synchronized void addMessageListener(MessageListener listener) {
  57.         if ((listener != null) && !mListeners.contains(listener)) {
  58.             mListeners.add(listener);
  59.         }
  60.     }
  61.     /**
  62.      * Removes a listener from this session.
  63.      *
  64.      * @param listener
  65.      */
  66.     public synchronized void removeMessageListener(MessageListener listener) {
  67.         mListeners.remove(listener);
  68.     }
  69.     /**
  70.      * Sends a text message to other participant(s) in this session
  71.      * asynchronously.
  72.      * TODO: more docs on async callbacks.
  73.      *
  74.      * @param text the text to send.
  75.      */
  76.     public void sendMessageAsync(String text) {
  77.         Message message = new Message(text);
  78.         sendMessageAsync(message);
  79.     }
  80.     /**
  81.      * Sends a message to other participant(s) in this session asynchronously.
  82.      * TODO: more docs on async callbacks.
  83.      *
  84.      * @param msg the message to send.
  85.      */
  86.     public void sendMessageAsync(Message msg) {
  87.         msg.setTo(mParticipant.getAddress());
  88.         mHistoryMessages.add(msg);
  89.         mManager.sendMessageAsync(this, msg);
  90.     }
  91.     /**
  92.      * Called by ChatSessionManager when received a message of the ChatSession.
  93.      * All the listeners registered in this session will be notified.
  94.      *
  95.      * @param msg the received message.
  96.      */
  97.     public void onReceiveMessage(Message msg) {
  98.         mHistoryMessages.add(msg);
  99.         for (MessageListener listener : mListeners) {
  100.             listener.onIncomingMessage(this, msg);
  101.         }
  102.     }
  103.     /**
  104.      * Called by ChatSessionManager when an error occurs to send a message.
  105.      * @param message
  106.      *
  107.      * @param error the error information.
  108.      */
  109.     public void onSendMessageError(Message message, ImErrorInfo error) {
  110.         for (MessageListener listener : mListeners) {
  111.             listener.onSendMessageError(this, message, error);
  112.         }
  113.     }
  114.     public void onSendMessageError(String msgId, ImErrorInfo error) {
  115.         for(Message msg : mHistoryMessages){
  116.             if(msgId.equals(msg.getID())){
  117.                 onSendMessageError(msg, error);
  118.                 return;
  119.             }
  120.         }
  121.         Log.i("ChatSession", "Message has been removed when we get delivery error:"
  122.                 + error);
  123.     }
  124.     /**
  125.      * Returns a unmodifiable list of the history messages in this session.
  126.      *
  127.      * @return a unmodifiable list of the history messages in this session.
  128.      */
  129.     public List<Message> getHistoryMessages() {
  130.         return Collections.unmodifiableList(mHistoryMessages);
  131.     }
  132. }