java qq聊天界面代码_【附源码】用Java写了一个类QQ界面聊天小项目,可在线聊天!...

原标题:【附源码】用Java写了一个类QQ界面聊天小项目,可在线聊天!

目录:

1.功能实现

2.模块划分

3.使用到知识

4.部分代码实现

5.运行例图

1.功能实现

1.修改功能(密码、昵称、个性签名)

2.添加好友、删除好友

3.单聊功能

4.判断好友是否在线

2.模块划分

1bc6314125f8cd0196ed3fcbb1012707.png

3.使用的知识

netty

swing

集合等同步阻塞队列synchronousQueue

数据库MySQL中的CRUD

C3p0连接池

JSON字符串4.部分代码实现

1.nettyController.java

接收到来自客户端的消息,与dao层进行交互

dao层与之数据库进行交互

修改密码

f343b07e768740dc10b0adb6bc2f4792.png

添加好友

b351607af015533ad5fbb1364679e32f.png

从添加好友逻辑实现上我走了很多的弯路频繁的访问数据库,这是一件很不好的事情

packagechat.Project.controller;

importchat.Project.bean.information;

importchat.Project.constant.EnMsgType;

importchat.Project.dao.*;

importchat.utils.CacheUtil;

importchat.utils.JsonUtils;

importcom.fasterxml.jackson.databind.node.ObjectNode;

importio.netty.channel.Channel;

importjava.util.ArrayList;

importjava.util.Iterator;

publicclassNettyController{

privatestaticUserDao userDao = newUserDaoImpl;

privatestaticinformationDao informationDao = newinformationDaoImpl;

privatestaticfriendDao friendDao = newfriendDaoImpl;

publicstaticString processing(String message, Channel channel){

//解析客户端发送的消息

ObjectNode jsonNodes = JsonUtils.getObjectNode(message);

String msgtype = jsonNodes.get( "msgtype").asText;

if(EnMsgType.EN_MSG_LOGIN.toString.equals(msgtype)){

//登录操作

returnloginOperation(jsonNodes,channel);

} elseif(EnMsgType.EN_MSG_MODIFY_SIGNATURE.toString.equals(msgtype)){

//修改签名

returnmodifySignature(jsonNodes);

} elseif(EnMsgType.EN_MSG_MODIFY_NICKNAME.toString.equals(msgtype)){

//修改昵称

returnmodifyNickname(jsonNodes);

} elseif(EnMsgType.EN_MSG_GETINFORMATION.toString.equals(msgtype)){

//获取登录信息

returngetInformation(jsonNodes);

} elseif(EnMsgType.EN_MSG_VERIFY_PASSWORD.toString.equals(msgtype)){

//进行修改密码

returnverifyPasswd(jsonNodes);

} elseif(EnMsgType.EN_MSG_CHAT.toString.equals(msgtype)){

//单聊模式

returnSingleChat(jsonNodes);

} elseif(EnMsgType.EN_MSG_GET_ID.toString.equals(msgtype)){

//获取id

returngetId(jsonNodes);

} elseif(EnMsgType.EN_MSG_GET_FRIEND.toString.equals(msgtype)){

//获取好友列表

returngetFriend(jsonNodes);

} elseif(EnMsgType.EN_MSG_ADD_FRIEND.toString.equals(msgtype)){

//添加好友

returnaddFriends(jsonNodes);

} elseif(EnMsgType.EN_MSG_DEL_FRIEND.toString.equals(msgtype)){

//删除好友

returndelFriend(jsonNodes);

} elseif(EnMsgType.EN_MSG_ACTIVE_STATE.toString.equals(msgtype)){

//判断好友的在线状态

returnfriendIsActive(jsonNodes);

}

return"";

}

//判断好友在线状态

privatestaticString friendIsActive(ObjectNode jsonNodes){

intfriendId = jsonNodes.get( "friendId").asInt;

ObjectNode objectNode = JsonUtils.getObjectNode;

objectNode.put( "msgtype",EnMsgType.EN_MSG_ACK.toString);

objectNode.put( "srctype",EnMsgType.EN_MSG_ACTIVE_STATE.toString);

//客户端保证用户独立存在且是好友

Channel channel = CacheUtil.get(friendId);

//判断用户是否在线

if(channel == null){

//用户不在线

objectNode.put( "code", 200);

} else{

//用户在线

objectNode.put( "code", 300);

}

returnobjectNode.toString;

}

//添加好友

privatestaticString delFriend(ObjectNode jsonNodes){

Integer friendId = jsonNodes.get( "friendId").asInt;

intuserId = jsonNodes.get( "id").asInt;

String localName = jsonNodes.get( "localName").asText;

//封装发回客户端的JSON

ObjectNode objectNode = JsonUtils.getObjectNode;

objectNode.put( "msgtype",EnMsgType.EN_MSG_ACK.toString);

objectNode.put( "srctype",EnMsgType.EN_MSG_DEL_FRIEND.toString);

objectNode.put( "code", 200);

//验证是否存在当前好友

information information = informationDao.getInformation(friendId);

String friendName = information.getNickname;

//查询自己是否有该好友

booleanexist = friendDao.isExist(friendName,userId);

if(exist){

//存在当前好友进行删除操作

friendDao.delFriend(userId,friendName);

friendDao.delFriend(friendId,localName);

objectNode.put( "code", 300);

}

returnobjectNode.toString;

}

//添加好友

privatestaticString addFriends(ObjectNode jsonNodes){

Integer friendId = jsonNodes.get( "friendId").asInt;

intuserId = jsonNodes.get( "id").asInt;

String localName = jsonNodes.get( "localName").asText;

//验证是否有ID

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值