📄 serverframe.java
字号:
File filedir=new File("d:\\users");
boolean is_dirmk;
if(!filedir.exists())
is_dirmk=filedir.mkdir();
try
{
File temp=new File("d:\\users\\"+name+".txt");
if (temp.exists())
{
FileReader fr=new FileReader(temp);
BufferedReader br=new BufferedReader(fr);
as=br.readLine();
System.out.println(as+" "+as.length());
if (!as.equals(passwd))
{
cc.out.println(MsgType.WRONGPASSWD);
}
else
{
//StringTokenizer st1=new StringTokenizer((String)user_online);
if(isuser_online(name))
cc.out.println(MsgType.WRONGPASSWD);
else
{
user_online.add(new String(name+" free "+getScore(name)));
user_map.put(name,cc);
broadcast(name,new String(MsgType.LOGON+" "+name+" free "+
getScore(name)));
String list = new String();
for(int i=0;i<user_online.toArray().length;i++)
{
list += (String)user_online.elementAt(i);
list += " ";
}
send(name,String.valueOf(MsgType.PASSWDOK));
send(name,new String(MsgType.SENDLIST+" "+list));
updateList();
updateInfoArea(name,true);
}
}
}
else
{
cc.out.println(MsgType.WRONGPASSWD);
return;
}
}
catch(Exception e)
{
System.out.println ("no file found!");
}
}
public synchronized void do_logout(StringTokenizer st)
//对用户下线时间做出回应
{
String name = st.nextToken();
String name_full = name+" "+st.nextToken();
String ad = null;
if(st.hasMoreTokens())
{ ad = st.nextToken();
send(ad,String.valueOf(MsgType.LOSS));
}
changeState(name,"free");
if(ad!=null)
changeState(ad,"free");
try
{
((ClientConnection)user_map.get(name)).socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
user_map.remove(name);
for(int i=0;i<user_online.toArray().length;i++)
{
st = new StringTokenizer((String)user_online.elementAt(i));
if(name.equals(st.nextToken()))
user_online.remove(i);
}
updateList();
String list = new String();
for(int i=0;i<user_online.toArray().length;i++)
{
list += (String)user_online.elementAt(i);
list += " ";
}
broadcast(name,new String(MsgType.SENDLIST+" "+list));
//broadcast(name,new String(MsgType.LOGOUT+" "+name_full));
updateInfoArea(name,false);
}
public synchronized void do_request(StringTokenizer st)
//有用户向另外一个用户发出对弈请求
{
String from = st.nextToken();
String to = st.nextToken();
String list = new String();
StringTokenizer st1;
String list1=("");
for(int i=0;i<user_online.toArray().length;i++)
{
list = (String)user_online.elementAt(i);
st1=new StringTokenizer(list);
list=st1.nextToken();
list1=st1.nextToken();
if(to==list)
break;
}System.out.println(list1);
if(list1.equals("busy"))
{
send(from,new String(MsgType.REFUSE+" "+to));
return;
}
else
send(to,new String(MsgType.REQUEST+" "+from));
}
public synchronized void do_accept(StringTokenizer st)
//有用户接受了对方的对弈请求
{
String from = st.nextToken();
String to = st.nextToken ();
send(to,new String(MsgType.ACCEPT+" "+from+" "+to));
//-----------------------------
changeState(from,"busy");
changeState(to,"busy");
String list = new String();
for(int i=0;i<user_online.toArray().length;i++)
{
list += (String)user_online.elementAt(i);
list += " ";
}
send(from,new String(MsgType.SENDLIST+" "+list));
broadcast(from,new String(MsgType.SENDLIST+" "+list));
}
public synchronized void do_refuse(StringTokenizer st)
//有用户拒绝了对方的请求
{
String name = st.nextToken();
send(name,String.valueOf(MsgType.REFUSE));
}
public synchronized void do_putchess(StringTokenizer st)
//用户下了一个棋子
{
String name = st.nextToken();
String row = st.nextToken();
String col = st.nextToken();
send(name,new String(MsgType.PUTCHESS+" "+row+" "+col));
}
public synchronized void do_chat(StringTokenizer st,String str)
//有用户发出了聊天信息
{
String from = st.nextToken();
String to = st.nextToken();
String str1 =(MsgType.CHAT+" "+str);
if(to.equals("all"))
broadcast(from,str1);
// System.out.println(str);}
else
send(to,new String(MsgType.CHAT+" "+str));
}
public synchronized void do_draw(StringTokenizer st)
//对手请求和棋,告诉客户端
{
String name = st.nextToken();
send(name,String.valueOf(MsgType.DRAW));
}
public synchronized void do_drawok(StringTokenizer st)
//接受到对方接受和棋请求的消息,告诉客户端
{
String from = st.nextToken();
String to = st.nextToken();
send(to,String.valueOf(MsgType.DRAWOK));
changeState(from,"free");
changeState(to,"free");
String list = new String();
for(int i=0;i<user_online.toArray().length;i++)
{
list += (String)user_online.elementAt(i);
list += " ";
}
send(from,new String(MsgType.SENDLIST+" "+list));
broadcast(from,new String(MsgType.SENDLIST+" "+list));
}
public synchronized void do_drawfail(StringTokenizer st)//对方拒绝和棋请求,服务器告诉客户端
{
String name = st.nextToken();
send(name,String.valueOf(MsgType.DRAWFAIL));
}
public synchronized void do_win(StringTokenizer st)
//客户端通过对方传来的棋子信息判断对方已经赢了,这时通过服务器通知对方赢了
{
String from = st.nextToken();
String to = st.nextToken();
scoreplus(from);
scoresub(to);
send(from,String.valueOf(MsgType.WIN));
changeState(from,"free");
changeState(to,"free");
String list = new String();
for(int i=0;i<user_online.toArray().length;i++)
{
list += (String)user_online.elementAt(i);
list += " ";
}
send(from,new String(MsgType.SENDLIST+" "+list));
broadcast(from,new String(MsgType.SENDLIST+" "+list));
updateUserInfo(from);
}
public synchronized void do_loss(StringTokenizer st)
//客户端已经认输,此时需要服务器通知对方他实际已经赢了
{
String from = st.nextToken();
String to = st.nextToken();
scoresub(from);
scoreplus(to);
send(to,String.valueOf(MsgType.LOSS));
changeState(from,"free");
changeState(to,"free");
String list = new String();
for(int i=0;i<user_online.toArray().length;i++)
{
list += (String)user_online.elementAt(i);
list += " ";
}
send(from,new String(MsgType.SENDLIST+" "+list));
broadcast(from,new String(MsgType.SENDLIST+" "+list));
updateUserInfo(to);
}
public void changeState(String name,String state)
//将在线用户name的状态设为state
{
for (int i=0;i<=(user_online.size ()-1);i++)
{
StringTokenizer st1=new StringTokenizer((String)user_online.get(i)) ;
System.out.println("here 2");
if(st1.nextToken().equals(name))
{
System.out.println("here 3");
user_online.remove(i);
user_online.add(name+" "+state+" "+getScore(name));
}
}
info.clear();
for(int i=0;i<user_online.size();i++)
{
System.out.println(user_online.size());
info.add((String)user_online.elementAt(i));
}
}
public static void main(String[] args)throws IOException
{
new Server(new ServerFrame()).start ();
}
static class Server extends Thread
{
ServerSocket server_socket;
ServerFrame server_frame;
public Server(ServerFrame sf)
{
try
{
server_socket = new ServerSocket(PORT);
}
catch(IOException e){
e.printStackTrace();
}
server_frame= sf;
}
public synchronized void run()
{
while(true)
{
Socket request_socket = new Socket();
try
{
request_socket = server_socket.accept();
}
catch(IOException e){
e.printStackTrace();
}
ClientConnection clientConnection = new ClientConnection(server_frame,request_socket);
clientConnection.start();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -