⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topicimpl.java

📁 《精通RMI:Java与EJB企业级应用开发》书籍的源代码. 本书是讲述RMI技术的经典著作
💻 JAVA
字号:
/*
 * Copyright 1999 by dreamBean Software,
 * All rights reserved.
 */
package masteringrmi.chat.server;

import java.io.IOException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.NoSuchElementException;

import masteringrmi.chat.interfaces.*;

/**
 *   This is the implementation of a topic in the server. It is a remote object.
 *      
 *   @see <related>
 *   @author Rickard 謆erg (rickard@dreambean.com)
 *   @version $Revision:$
 */
public class TopicImpl
   extends UnicastRemoteObject
   implements Topic
{
   // Attributes ----------------------------------------------------
   TopicInfo info;
   Collection messageQueues = new ArrayList();
   Collection listenerInfos = new ArrayList();
   
   TopicServerImpl server;
   
   // Constructors --------------------------------------------------
   public TopicImpl(TopicServerImpl server, TopicInfo info)
      throws RemoteException
   {
      super(server.getPort());
      
      this.info = info;
      this.server = server;
   }
   
   // Topic implementation ------------------------------------------
   public synchronized void publishMessage(Message message)
   {
      server.sendMessage(messageQueues.iterator(), message);
   }
   
   public synchronized Collection getListenerInfos()
   {
      return listenerInfos;
   }

   // Package protected ---------------------------------------------
   synchronized void addListener(Listener listener)
   {
      publishMessage(new Message(Message.SYSTEM, Message.USER_JOINED, listener.getInfo()));
      
      messageQueues.add(listener.getMessageQueue());
      listenerInfos.add(listener.getInfo());
   }

   synchronized void removeListener(Listener listener)
   {
      if (listener != null && listenerInfos.remove(listener.getInfo()))
      {
         messageQueues.remove(listener.getMessageQueue());
         publishMessage(new Message(Message.SYSTEM, Message.USER_LEFT, listener.getInfo()));
      }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -