📄 dialogueserver.java
字号:
import java.net.*;
import java.io.*;
import java.util.Vector;
class Server{
private final int DEFAULT_PORT=4700;
private final int MAX_NUMBER=100;
private Vector userList;
private Vector chatroomList;
public static void main(String args[])
{
Server server=new Server();
server.go();
}
public void go()
{
boolean listening=true;
ServerSocket serverSocket=null;
userList=new Vector(MAX_NUMBER);
chatroomList=new Vector(MAX_NUMBER);
try
{
serverSocket=new ServerSocket(DEFAULT_PORT);
}
catch(IOException e)
{
System.out.println("Could not listen on port:"+DEFAULT_PORT+","+e);
System.exit(1);
}
System.out.println("Listening on port:"+DEFAULT_PORT);
while(listening)
{
User user=new User();
userList.add(user);
try
{
new DialogueMultiServerThread(serverSocket.accept(),userList,user,chatroomList).start();
}catch(IOException e)
{}
}
try{
serverSocket.close();
}catch(IOException e)
{}
}
}
class DialogueMultiServerThread extends Thread
{
Socket socket=null;
Vector userList;
User user,tempUser;
Vector chatroomList;
boolean loginSuccess=true;
DialogueMultiServerThread(Socket socket,Vector userList,User user,Vector chatroomList)
{
this.socket=socket;
this.user=user;
this.userList=userList;
this.user.setSocket(this.socket);
this.chatroomList=chatroomList;
tempUser=new User();
}
public void run()
{
if(socket==null)
return;
while(true)
{
try
{
DataInputStream is=new DataInputStream(
new BufferedInputStream(socket.getInputStream()));
PrintStream os=new PrintStream(
new BufferedOutputStream(socket.getOutputStream(),1024),false);
//DialogueProtocol dgp=new DialogueProtocol();
String inputLine,outputLine;
do
{
loginSuccess=true;
inputLine=is.readLine();
for(int i=0;i<userList.size()-1;i++)
{
tempUser=(User)userList.get(i);
if(tempUser.getUserID()!=null&&tempUser.getUserID().equalsIgnoreCase(inputLine))
{
loginSuccess=false;
break;
}
}
if(!loginSuccess)
{
os.println("loginrefuse");
os.flush();
outputLine="There has been a same user's ID.";
os.println(outputLine);
os.flush();
}
}while(!loginSuccess);
user.setUserID(inputLine);
//outputLine=dgp.processInput(null,inputLine);
os.println("loginOK");
os.flush();
sendServerList();
while((inputLine=is.readLine())!=null)
{
String to="to ";
String kick="kick ";
String remove="remove";
String chatwith="chatwith ";
int number=inputLine.indexOf((int)':');
if(inputLine.length()>5&&inputLine.substring(0,5).equalsIgnoreCase("creat")&&user.getCurrentChatroom()==null)
{
boolean creatSuccess=true;
Chatroom croom=new Chatroom();
for(int i=0;i<chatroomList.size();i++)
{
croom=(Chatroom)chatroomList.get(i);
if(croom.getName().equalsIgnoreCase(inputLine.substring(6)))
{
creatSuccess=false;
break;
}
}
if(creatSuccess)
{
Chatroom chatroom=new Chatroom(inputLine.substring(6),user.getUserID());
chatroomList.add(chatroom);
user.setIsAdministrator(true);
user.setCurrentChatroom(inputLine.substring(6));
os.println("creatOK");
os.flush();
}
else {
os.println("creatrefuse");
os.flush();
os.println("There has been a same chatroom.");
os.flush();
}
}
else
{
if(inputLine.length()>4&&inputLine.substring(0,4).equalsIgnoreCase("join")&&user.getCurrentChatroom()==null)
{
user.setCurrentChatroom(inputLine.substring(5));
//user.setIsAdministrator(false);
for(int i=0;i<userList.size()-1;i++)
{
tempUser=(User)userList.get(i);
if(tempUser.getCurrentChatroom()!=null&&tempUser.getCurrentChatroom().equalsIgnoreCase(user.getCurrentChatroom())&&!tempUser.getUserID().equalsIgnoreCase(user.getUserID()))
{
PrintStream clientos=new PrintStream(new BufferedOutputStream(tempUser.getSocket().getOutputStream(),1024),false);
clientos.println("<"+user.getUserID()+">I'm coming");
clientos.flush();
}
}
}
else
{
if(inputLine.regionMatches(true,0,to,0,3))
{
String toName=inputLine.substring(3,number);
boolean success=false;
for(int i=0;i<userList.size()-1;i++)
{
tempUser=(User)userList.get(i);
if(tempUser.getChatter()!=null&&tempUser.getUserID().equalsIgnoreCase(toName)&&tempUser.getChatter().equalsIgnoreCase(user.getUserID()))
{
PrintStream clientos=new PrintStream(new BufferedOutputStream(tempUser.getSocket().getOutputStream(),1024),false);
clientos.println("<from "+user.getUserID()+">"+inputLine.substring(number+1));
clientos.flush();
clientos=new PrintStream(new BufferedOutputStream(user.getSocket().getOutputStream(),1024),false);
clientos.println("<to "+toName+">"+inputLine.substring(number+1));
clientos.flush();
success=true;
break;
}
}
if(!success)
{
PrintStream clientos=new PrintStream(new BufferedOutputStream(user.getSocket().getOutputStream(),1024),false);
clientos.println("Sorry,no connecting");
clientos.flush();
}
}
else
{
if(inputLine.regionMatches(true,0,kick,0,5))
{
String kickName=inputLine.substring(5);
if(user.getIsAdministrator())
for(int i=0;i<userList.size()-1;i++)
{
tempUser=(User)userList.get(i);
if(tempUser.getUserID().equalsIgnoreCase(kickName))
{
tempUser.setCurrentChatroom(null);
PrintStream clientos=new PrintStream(new BufferedOutputStream(tempUser.getSocket().getOutputStream(),1024),false);
clientos.println("kickedfromhere");
clientos.flush();
break;
}
}
}
else
{
if(inputLine.equalsIgnoreCase(remove))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -