?? topicimpl.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 + -