?? chatserverimpl.java
字號:
/*
* Created on 2004-11-27
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package chatserver;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import chat.ChatServer;
import chat.Chatter;
/**
* @author Lance
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class ChatServerImpl
extends java.rmi.server.UnicastRemoteObject
implements ChatServer{
/**
* @throws RemoteException
*/
protected ChatServerImpl() throws RemoteException {
super();
// TODO Auto-generated constructor stub
}
static ChatServerImpl server=null;
private static final String BINDNAME="ChatServer";
private static final String[] STATEMSG=
new String[]{"服務器啟動", "服務器停止"};
List chatters=new ArrayList();
List listeners=new ArrayList();
//獲得ChatServerImpl對象
public static ChatServerImpl getInstance(){
try{
if (server==null)
server=new ChatServerImpl();
}catch(RemoteException e){
e.printStackTrace();
return null;
}
return server;
}
public void start()throws RemoteException,MalformedURLException{
Naming.rebind(BINDNAME, server);
notifyListener(STATEMSG[0]);
}
public void stop()
throws RemoteException,NotBoundException,MalformedURLException{
notifyListener(STATEMSG[1]);
Iterator itr=chatters.iterator();
while(itr.hasNext()){
UserInfo u=(UserInfo)itr.next();
u.getChatter().serverStop();
}
Naming.unbind(BINDNAME);
}
//添加一個Listener
public void addListener(ChatServerListener listener){
listeners.add(listener);
}
//移除一個Listener
public void removeListener(ChatServerListener listener){
listeners.remove(listener);
}
//通知所有Listener事件發生
void notifyListener(String msg){
Iterator itr=listeners.iterator();
ChatServerEvent evt=new ChatServerEvent(this,msg);
while(itr.hasNext()){
((ChatServerListener)itr.next()).serverEvent(evt);
}
}
/* (non-Javadoc)
* @see chat.ChatServer#login(java.lang.String, chat.Chatter)
*/
public void login(String name, Chatter chatter) throws RemoteException {
// TODO Auto-generated method stub
if(chatter!=null && name!=null){
UserInfo u=new UserInfo(name,chatter);
notifyListener(u.getName()+"進入聊天室");
Iterator itr=chatters.iterator();
while(itr.hasNext()){
UserInfo u2=(UserInfo)itr.next();
u2.getChatter().receiveEnter(name,chatter,false);
chatter.receiveEnter(u2.getName(),u2.getChatter(),true);
}
chatters.add(u);
}
}
/* (non-Javadoc)
* @see chat.ChatServer#logout(java.lang.String)
*/
public void logout(String name) throws RemoteException {
// TODO Auto-generated method stub
if(name==null){
System.out.println("null name on logout:cannot remove chatter");
return;
}
UserInfo u_gone=null;
Iterator itr=null;
synchronized(chatters){
for(int i=0; i<chatters.size(); i++){
UserInfo u=(UserInfo)chatters.get(i);
if(u.getName().equals(name)){
notifyListener(name+"離開聊天室");
u_gone=u;
chatters.remove(i);
itr=chatters.iterator();
break;
}
}
}
if(u_gone==null || itr==null){
System.out.println(
"no user by name of "+name+" found: not removing chatter");
return;
}
while(itr.hasNext()){
UserInfo u=(UserInfo)itr.next();
u.getChatter().receiveExit(name);
}
}
/* (non-Javadoc)
* @see chat.ChatServer#chat(java.lang.String, java.lang.String)
*/
public void chat(String name, String message) throws RemoteException {
// TODO Auto-generated method stub
Iterator itr=chatters.iterator();
while(itr.hasNext()){
UserInfo u=(UserInfo)itr.next();
if(!name.equals(u.getName()))
u.getChatter().receiveChat(name, message);
}
notifyListener(name+":"+message);
}
}//END CLASS
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -