朋友圈

将客户端请求单独分出来,方便直接请求。

public class WeChatClientUtil
{
private static final String HOST="http://localhost:8000";
private static final SimpleClient client=new SimpleClient(HOST);

private WeChatClientUtil(){}

public static String makeRequest(String cmd,Map<String,String> params)
{
Request request = new Request(cmd);
for(Map.Entry<String,String> entry:params.entrySet())
{
request.addParam(entry.getKey(), entry.getValue());
}
try
{
return client.makeRequest(request);

}catch(Exception e)
{
return e.getMessage();
}
客户端的代码
public class WeChatClient extends GraphicsProgram {

JPanel northPanel;
JPanel westPanel;
JPanel eastPanel;
JPanel centerPanel;


JLabel nameJLabel;
JLabel bottomLabel;
JLabel statusJLabel;
JLabel friend;
JLabel ageJLabel;

JButton clearButton;
JButton queryButton;
JButton nameJButton;
JButton ageJButton;
JButton statusJButton;
JButton pictureJButton;
JButton friendsJButton;

JTextField nameTextField;
JTextField updateStatus;
JTextField updatePicture;
JTextField updateFriends;
JTextField updateage;

private Map<String, String> map = null; // 客户端请求参数
public static final String SUCCESS_MSG = "success";
private JPanel southPanel; // 账户管理
Font font = new Font("宋体", Font.PLAIN, 25);
Font font1 = new Font("宋体", Font.PLAIN + Font.BOLD, 25);


public void init() {
setTitle("朋友O客户端");
northPanel = getRegionPanel(NORTH);
westPanel = getRegionPanel(WEST);
eastPanel = getRegionPanel(EAST);
southPanel = getRegionPanel(SOUTH);
centerPanel = getRegionPanel(CENTER);
centerPanel.setLayout(new FlowLayout(FlowLayout.LEADING));


nameJLabel = new JLabel("姓名");
northPanel.add(nameJLabel);

nameTextField = new JTextField(10);
northPanel.add(nameTextField);

nameJButton = new JButton("添加账户");
northPanel.add(nameJButton);
clearButton = new JButton("删除账户");
northPanel.add(clearButton);
queryButton = new JButton("查询账户");
northPanel.add(queryButton);

updateStatus = new JTextField(10);
statusJButton = new JButton("更新状态");
updatePicture = new JTextField(10);
pictureJButton = new JButton("更新图片");
updateFriends = new JTextField(10);
friendsJButton = new JButton("添加好友");
updateage = new JTextField(10);
ageJButton = new JButton("更新年龄");
westPanel.add(updateStatus);
westPanel.add(statusJButton);
westPanel.add(updatePicture);
westPanel.add(pictureJButton);
westPanel.add(updateFriends);
westPanel.add(friendsJButton);
westPanel.add(updateage);
westPanel.add(ageJButton);

friend = new JLabel("好友列表");
friend.setFont(font);
eastPanel.add(friend);


statusJLabel = new JLabel();
ageJLabel = new JLabel();
map = new HashMap<>();
}

public void run() {
showAccountPanel();


// display();
}

public void showAccountPanel() {
bottomLabel = new JLabel("", JLabel.CENTER);

bottomLabel.setForeground(Color.BLACK);
bottomLabel.setFont(font);
statusJLabel.setFont(font1);

southPanel.setLayout(new BorderLayout(0, 5));
southPanel.add(bottomLabel);

registeredAccount();
updateStatus();
friend();
updateAge();
picture();
findUsers();
remove();

}

// 添加账户
public void registeredAccount() {
nameJButton.addActionListener(e -> {
String out;
String name = nameTextField.getText().trim();
if ("".equals(name)) {
out = "用户名为空";
} else if (name.contains(",") || name.contains(" ")) {
out = "用户名含有非法字符";
} else {
map.clear();
map.put("name", name);
String response = WeChatClientUtil.makeRequest("addAccount", map);
if (SUCCESS_MSG.equals(response)) // 注册成功
{

out = "注册成功";
} else // 注册失败
{
out = response;
}
}
bottomLabel.setText(out);
});
}
// 添加状态
public void updateStatus() {
statusJButton.addActionListener(e -> {
String out = null;
String status = updateStatus.getText().trim();
String name = nameTextField.getText().trim();
if (" ".equals(status)) {
out = "该用户很懒,没有设置任何状态。";
} else {
map.clear();
map.put("name", name);
map.put("status", status);
String response = WeChatClientUtil.makeRequest("setStatus", map);
if (SUCCESS_MSG.equals(response)) {
String thisStatus = name + "正在" + status;
statusJLabel.setText(thisStatus);
centerPanel.add(statusJLabel, SOUTH);
out = "状态已更新为" + status;
} else {
out = "无更新";
}

}
bottomLabel.setText(out);
});
}
// 添加年龄
public void updateAge() {
ageJButton.addActionListener(e -> {
String out = null;
String age = updateage.getText().trim();
String name = nameTextField.getText().trim();
if (" ".equals(age)) {
out = "该用户很懒,没有设置任何年龄。";
} else {
map.clear();
map.put("name", name);
map.put("age", age);
String response = WeChatClientUtil.makeRequest("setage", map);
if (SUCCESS_MSG.equals(response)) {
String thisage = "年龄为"+age;
ageJLabel.setText(thisage);
centerPanel.add(ageJLabel);
out = "年龄已更新为"+age;
} else {
out = "无更新";
}

}
bottomLabel.setText(out);
});
}
// 添加好友
public void friend() {
friendsJButton.addActionListener(e -> {
bottomLabel.setText(" ");
String out;
String name1 = nameTextField.getText().trim();
String name2 = updateFriends.getText().trim();
if ("".equals(name2) || name2.contains(",")) {
out = "用户名不合法";
} else {
ArrayList<String> friend = new ArrayList<>();
map.clear();
map.put("name1", name1);
map.put("name2", name2);
friend.add(name2);
String response = WeChatClientUtil.makeRequest("addFriend", map);
if (SUCCESS_MSG.equals(response)) {
out = "好友添加成功";

for (String s : friend) {
JTextField frien = new JTextField(s);
eastPanel.add(frien);

}
run();
} else {
out = response;
}
}
bottomLabel.setText(out);
});
}
// 更新照片
public void picture() {
pictureJButton.addActionListener(e -> {
String out = null;
String name = nameTextField.getText().trim();
String imageUrl= updatePicture.getText();
boolean exists = fileExists(imageUrl);
if (!exists){
out = "文件不存在";
}else {
map.clear();
GImage image=new GImage(new ImageIcon(imageUrl).getImage());
String imageString = HAWTools.imageToString(image);
map.put("name",name);
map.put("imageString",imageString);
String response=WeChatClientUtil.makeRequest("setAvatar", map);

if(response.startsWith("Error"))
{
out = "更新失败";
}
else
{
map.clear();
map.put("name",name);
String resp = WeChatClientUtil.makeRequest("getAvatar", map);
GImage gImage = HAWTools.stringToImage(resp);
ImageIcon imageIcon=new ImageIcon(gImage.getImage());
JLabel pic = new JLabel(imageIcon);
centerPanel.add(pic); } }



bottomLabel.setText(out); }); }


// 删除账户
public void remove(){
clearButton.addActionListener(e -> {
String out;
String name=nameTextField.getText().trim();
if("".equals(name)) {

out="用户名为空"; }

else if(!name.equals(name)) {

out="不能删除非当前登录账户信息"; }

else
{
map.clear();
map.put("name",name);
String response=WeChatClientUtil.makeRequest("deleteAccount", map);
if(SUCCESS_MSG.equals(response)) // 删除成功
{
out="删除成功"; name=
null; }

else // 删除失败
{
out=response; } }


bottomLabel.setText(out); }); }


// 查询用户
public void findUsers(){
queryButton.addActionListener(e -> {
String out;
String name=nameTextField.getText().trim();
if("".equals(name) || name.contains(",")) {

out="用户名不合法"; }

else
{
map.clear();
map.put("name",name);
String response=WeChatClientUtil.makeRequest("haveAccount", map);
if("true".equals(response)) {

out="用户存在"; }

else
{
out="用户不存在"; } }


bottomLabel.setText(out); }); }


服务器,就是用抓包工具逆向推出。
case "ping":
return "pong";
case "addAccount":
name = request.getParam("name");
account = map.get(name);
if (account == null) {
account = new Account();
account.setName(name);
map.put(name, account);
return SUCCESS_MSG;
} else {
return FAILURE_PREFIX + "账户已存在";
}
case "deleteAccount":
name = request.getParam("name");
if (name == null || map.containsKey(name)) {
map.remove(name);
Set<String> names = map.keySet();
for (String key:names) {
Account account2 = map.get(key);
account2.getFriends().remove(name);
}
return SUCCESS_MSG;
} else {
return FAILURE_PREFIX + "找不到账户【" + name + "";
}
case "haveAccount":
name = request.getParam("name");
account = map.get(name);
if (name != null && account != null) {
return "true";
} else {
return "false";
}
case "setStatus":
name = request.getParam("name");
account = map.get(name);
if (name == null || account == null) {
return String.format(FAILURE_PREFIX + "找不到账户【%s", name);
} else {
status = request.getParam("status");
account.setStatus(status);
return SUCCESS_MSG;
}
case "getStatus":
name = request.getParam("name");
account = map.get(name);
if (name == null || account == null) {
return String.format(FAILURE_PREFIX + "找不到账户【%s", name);
} else {
status = account.getStatus();
if (status == null) {
return "";
} else {
return status;
}
}
case "setage":
name = request.getParam("name");
account = map.get(name);
if (name == null || account == null) {
return String.format(FAILURE_PREFIX + "找不到账户【%s", name);
} else {
age = request.getParam("age");
account.setStatus(age);
return SUCCESS_MSG;
}
case "getage":
name = request.getParam("name");
account = map.get(name);
if (name == null || account == null) {
return String.format(FAILURE_PREFIX + "找不到账户【%s", name);
} else {
age = account.getStatus();
if (age == null) {
return "";
} else {
return age;
}
}
case "setAvatar":
name = request.getParam("name");
account = map.get(name);
if (name == null || account == null) {
return String.format(FAILURE_PREFIX + "找不到账户【%s", name);
} else {
avatar = request.getParam("imageString");
account.setAvatar(HAWTools.stringToImage(avatar));
return SUCCESS_MSG;

}
case "getAvatar":
name = request.getParam("name");
account = map.get(name);
if (name == null || account == null) {
return String.format(FAILURE_PREFIX + "找不到账户【%s", name);
} else {
GImage image = account.getAvatar();
return HAWTools.imageToString(image);
}
case "addFriend":
// 判断当前账户存在否,存在进入下一步
// 判断有无想要添加的好友名字 并判断好友列表中是否已存在该好友名字
// 如果不存在 则添加进好友列表
name = request.getParam("name1");
account = map.get(name);
if (name == null || account == null) {
return String.format(FAILURE_PREFIX + "找不到账户【888");
} else {
Account account1;
name = request.getParam("name1");
friend = request.getParam("name2");
account = map.get(name);
account1 = map.get(friend);
if (name == null || friend == null || account == null || account1 == null) {
return String.format(FAILURE_PREFIX + "找不到账户【%s", friend);
} else {
if (account.getFriends().contains(friend)) {
return FAILURE_PREFIX+"已经是好友了";
} else if (name.equals(friend)) {
return FAILURE_PREFIX+"你不能添加自己为好友";
} else {
account.getFriends().add(friend);
account1.getFriends().add(name);
return SUCCESS_MSG;
}
}
}
case "getFriends":
name = request.getParam("name");
account = map.get(name);
if (name == null || account == null) {
return FAILURE_PREFIX;
} else {
StringBuilder son = new StringBuilder();
ArrayList<String> friends = account.getFriends();
son.append("[");
for (int i = 0; i < friends.size(); i++) {
son.append(friends.get(i));
if (i != friends.size() - 1) {
son.append(", ");
}
}
son.append("]");
return son.toString();
}
default:
return FAILURE_PREFIX + "未知命令【" + cmd + "";
}

 
posted @ 2021-03-15 22:29  Ga7l  阅读(70)  评论(0)    收藏  举报