📄 serverusermanager.java
字号:
package serverwork;
import java.util.*;import java.net.*;
import java.io.*;
public class ServerUserManager extends Thread {
private Server owner;
private DatagramSocket quitSock;
public ServerUserManager(Server owner) {
this.owner = owner;
}
public void sendFriendsList(Socket sock, String[] friends,String username){ //向上线用户发送该用户的好友列表
String onlineFriends = "";
String downlineFriends = "";
String group = "";
for(int i=0; i<friends.length; i++){
if(owner.getonlineuser().containsKey(friends[i])){
onlineFriends += friends[i]+ "/" + owner.getonlineuser().get(friends[i])+",";
}else{
downlineFriends += friends[i]+",";
}
}
if(owner.getgroup1().containsKey(username)){
owner.getgroup1().remove(username);
owner.getgroup1().put(username,"2");
group = group + "1111"+"/";
}
if(owner.getgroup2().containsKey(username)){
owner.getgroup2().remove(username);
owner.getgroup2().put(username,"2");
group = group + "2222"+"/";
}
try {
DataOutputStream out = new DataOutputStream(sock.getOutputStream());
System.out.println("在线好友:"+onlineFriends);
out.writeUTF("在线好友:"+onlineFriends); //发送上线好友列表的方法
System.out.println("离线好友:"+downlineFriends);
out.writeUTF("离线好友:"+downlineFriends); //发送离线好友列表的方法
System.out.println("群组:"+group);
out.writeUTF("群组:"+group);
} catch (IOException ex) {
ex.printStackTrace();
}
}
public void noticeOtherFriends(Socket sock, String username, String[] friends){ //通知用户的好友,该用户以上线
for(int i=0; i<friends.length; i++)
if(owner.getonlineuser().containsKey(friends[i])){
String message = null;
message = "好友上线:" + username + "," + sock.getInetAddress().toString().substring(1,sock.getInetAddress().toString().length()) + "/" + sock.getPort();
sentdata(friends[i],message);
}
}
public void noticeFriendsdownline(String username){
String[] friend = owner.dataservice.getallfriends(username);
for(int i=0; i<friend.length; i++)
if(owner.getonlineuser().containsKey(friend[i])){
String message = null;
message = "好友离线:"+username;
sentdata(friend[i],message);
}
}
public synchronized void addOnlineUser(Socket sock, String username){//添加上线用户(在服务器上添加)
String sr = sock.getInetAddress().toString();
String sockStr = sr.substring(1,sr.length())+"/"+sock.getPort();
String message = owner.getdownlinuser().get(username);
owner.addonlineuser(username, sockStr);
owner.servergui.onlineuser(username,sockStr);
if(!message.equals("")){
sentdata(username,"通知:"+message);
}
}
public void clear(){
owner.getonlineuser().clear();
}
public void terminate(){
if(quitSock != null) quitSock.close();
}
public void run(){
boolean done = false;
while(!done){
try {
quitSock = new DatagramSocket(5748);
byte[] buff = new byte[64];
DatagramPacket packet = new DatagramPacket(buff, buff.length);
quitSock.receive(packet);
System.out.println("收到客户端的数据包");
String usermessage = new String(packet.getData()).trim();
dealmassage(usermessage);
//onlineUser.remove(uid);
} catch (SocketException ex) {
done = true;
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if(quitSock != null) quitSock.close();
}
}
}
public void dealmassage(String user){
System.out.println("接收到的内容为:"+user);
if(user.startsWith("添加好友:")){
String message = user.substring(user.indexOf(":")+1,user.length());
String[] st = message.split(",");
System.out.println("源:"+st[0]+"目标:"+st[1]);
Vector online = owner.getvectoronline();
boolean state = false;
for(int i =0; i < online.size(); i++){
if(st[1].equals((String)online.get(i))){
state = true;
break;
}
}
if(state){
if(owner.ser.getData().updateuserfriends(st[0],st[1])){
sentdata(st[0],"加好友:success");
System.out.println("以为客户机发送了数据包");
}
}else{
sentdata(st[0],"加好友:该好友不在线,不能添加");
}
}
if(user.startsWith("获取群组:")){
String st = null;
String message = user.substring(user.indexOf(":")+1);
String[] messages = message.split("/");
if(messages[1].equals("1111")){
for(int i = 0; i < owner.group11.size(); i++){
st = st + "," + owner.group11.get(i);
}
st = "1111:" + st;
this.sentdata(messages[0],st);
}
if(messages[1].equals("2222")){
if(messages[1].equals("2222")){
for(int i = 0; i < owner.group11.size(); i++){
st = st + "," + owner.group11.get(i);
}
st = "2222:" + st;
this.sentdata(messages[0],st);
}
}
}
if(user.startsWith("离线:")){
String username = user.substring(user.indexOf(":")+1,user.length());
System.out.println("用户:"+username+"离线");
noticeFriendsdownline(username);
owner.servergui.downlineuser(username);
owner.adddownlineuser(username);
}
if(user.startsWith("加入群组:")){
String messag = user.substring(user.indexOf(":")+1,user.length());
String[] messags = messag.split("/");
String username = messags[0];
String group = messags[1];
if(group.equals("1111")){
if(owner.getgroup1().containsKey(username)){
System.out.println("此群组已存在");
this.sentdata(username,"加入群组:此群组已存在");
//发送数据
}else{
owner.getgroup1().put(username,"2");
String st1 = owner.dataservice.getallgroup(username);
st1 = st1 +",1111";
owner.dataservice.updateusergroups(username,st1);
this.sentdata(username,"加入群组:1111");
}
}else if(group.equals("2222")){
if(owner.getgroup2().containsKey(username)){
System.out.println("此群组已存在");
this.sentdata(username,"加入群组:此群组已存在");
//发送数据
}else{
owner.getgroup2().put(username,"2");
String st1 = owner.dataservice.getallgroup(username);
st1 = st1 +",2222";
owner.dataservice.updateusergroups(username,st1);
this.sentdata(username,"加入群组:2222");
}
}else{
System.out.println("该群组不存在");
this.sentdata(username,"加入群组:此群组在服务器中不存在");
}
}
}
public void sentdata(String username,String content){
DatagramSocket noticeSock;
String address = owner.getonlineuser().get(username);
if(!address.equals("")){ String friendIp = address.split("/")[0];
int friendPort = Integer.parseInt(address.split("/")[1]);
System.out.println("发送到端口:"+friendPort);
try {
noticeSock = new DatagramSocket();
byte[] buff = content.getBytes();
DatagramPacket packet;
packet = new DatagramPacket(buff, buff.length,
InetAddress.getByName(friendIp), friendPort);
noticeSock.send(packet);
} catch (Exception e) {
//e.printStackTrace();
System.out.println("发送数据报失败");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -