ChatSessionManager.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.engine;
  18. import java.util.Vector;
  19. import java.util.concurrent.CopyOnWriteArrayList;
  20. /**
  21.  * The ChatSessionManager keeps track of all current chat sessions and is also
  22.  * responsible to dispatch the new incoming message to the right session.
  23.  */
  24. public abstract class ChatSessionManager {
  25.     private CopyOnWriteArrayList<ChatSessionListener> mListeners;
  26.     /** Map session to the participant communicate with. */
  27.     protected Vector<ChatSession> mSessions;
  28.     protected ChatSessionManager() {
  29.         mListeners = new CopyOnWriteArrayList<ChatSessionListener>();
  30.         mSessions = new Vector<ChatSession>();
  31.     }
  32.     /**
  33.      * Registers a ChatSessionListener with the ChatSessionManager to receive
  34.      * events related to ChatSession.
  35.      *
  36.      * @param listener the listener
  37.      */
  38.     public synchronized void addChatSessionListener(ChatSessionListener listener) {
  39.         if ((listener != null) && !mListeners.contains(listener)) {
  40.             mListeners.add(listener);
  41.         }
  42.     }
  43.     /**
  44.      * Removes a ChatSessionListener so that it will no longer be notified.
  45.      *
  46.      * @param listener the listener to remove.
  47.      */
  48.     public synchronized void removeChatSessionListener(ChatSessionListener listener) {
  49.         mListeners.remove(listener);
  50.     }
  51.     /**
  52.      * Creates a new ChatSession with specified participant.
  53.      *
  54.      * @param participant the participant.
  55.      * @return the created ChatSession.
  56.      */
  57.     public synchronized ChatSession createChatSession(ImEntity participant) {
  58.         for(ChatSession session : mSessions) {
  59.             if(session.getParticipant().equals(participant)) {
  60.                 return session;
  61.             }
  62.         }
  63.         ChatSession session = new ChatSession(participant, this);
  64.         for (ChatSessionListener listener : mListeners) {
  65.             listener.onChatSessionCreated(session);
  66.         }
  67.         mSessions.add(session);
  68.         return session;
  69.     }
  70.     /**
  71.      * Closes a ChatSession. This only removes the session from the list; the
  72.      * protocol implementation should override this if it has special work to
  73.      * do.
  74.      *
  75.      * @param session the ChatSession to close.
  76.      */
  77.     public void closeChatSession(ChatSession session) {
  78.         mSessions.remove(session);
  79.     }
  80.     /**
  81.      * Sends a message to specified participant(s) asynchronously.
  82.      * TODO: more docs on async callbacks.
  83.      *
  84.      * @param message the message to send.
  85.      */
  86.     protected abstract void sendMessageAsync(ChatSession session, Message message);
  87. }