package pers.kanarien.chatroom.service.impl;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.Map.Entry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import pers.kanarien.chatroom.dao.GroupInfoDao;
import pers.kanarien.chatroom.model.po.GroupInfo;
import pers.kanarien.chatroom.model.vo.ResponseJson;
import pers.kanarien.chatroom.service.ChatService;
import pers.kanarien.chatroom.util.ChatType;
import pers.kanarien.chatroom.util.Constant;
@Service
public class ChatServiceImpl implements ChatService{
private static final Logger LOGGER = LoggerFactory.getLogger(ChatServiceImpl.class);
@Autowired
private GroupInfoDao groupDao;
@Override
public void register(JSONObject param, ChannelHandlerContext ctx) {
String userId = (String)param.get("userId");
Constant.onlineUserMap.put(userId, ctx);
String responseJson = new ResponseJson().success()
.setData("type", ChatType.REGISTER)
.toString();
sendMessage(ctx, responseJson);
LOGGER.info(MessageFormat.format("userId为 {0} 的用户登记到在线用户表,当前在线人数为:{1}"
, userId, Constant.onlineUserMap.size()));
}
@Override
public void singleSend(JSONObject param, ChannelHandlerContext ctx) {
String fromUserId = (String)param.get("fromUserId");
String toUserId = (String)param.get("toUserId");
String content = (String)param.get("content");
ChannelHandlerContext toUserCtx = Constant.onlineUserMap.get(toUserId);
if (toUserCtx == null) {
String responseJson = new ResponseJson()
.error(MessageFormat.format("userId为 {0} 的用户没有登录!", toUserId))
.toString();
sendMessage(ctx, responseJson);
} else {
String responseJson = new ResponseJson().success()
.setData("fromUserId", fromUserId)
.setData("content", content)
.setData("type", ChatType.SINGLE_SENDING)
.toString();
sendMessage(toUserCtx, responseJson);
}
}
@Override
public void groupSend(JSONObject param, ChannelHandlerContext ctx) {
String fromUserId = (String)param.get("fromUserId");
String toGroupId = (String)param.get("toGroupId");
String content = (String)param.get("content");
/*String userId = (String)param.get("userId");
String fromUsername = (String)param.get("fromUsername");*/
/*String responseJson = new ResponseJson().success()
.setData("fromUsername", fromUsername)
.setData("content", content)
.setData("type", ChatType.GROUP_SENDING)
.toString();*/
/*Set<Entry<String, ChannelHandlerContext>> userCtxs = Constant.onlineUserMap.entrySet();
for (Entry<String, ChannelHandlerContext> userCtx : userCtxs) {
if (!userCtx.getKey().equals(userId)) {
sendMessage(userCtx.getValue(), responseJson);
}
}*/
GroupInfo groupInfo = groupDao.getByGroupId(toGroupId);
if (groupInfo == null) {
String responseJson = new ResponseJson().error("该群id不存在").toString();
sendMessage(ctx, responseJson);
} else {
String responseJson = new ResponseJson().success()
.setData("fromUserId", fromUserId)
.setData("content", content)
.setData("toGroupId", toGroupId)
.setData("type", ChatType.GROUP_SENDING)
.toString();
groupInfo.getMembers().stream()
.forEach(member -> {
ChannelHandlerContext toCtx = Constant.onlineUserMap.get(member.getUserId());
if (toCtx != null && !member.getUserId().equals(fromUserId)) {
sendMessage(toCtx, responseJson);
}
});
}
}
@Override
public void remove(ChannelHandlerContext ctx) {
Iterator<Entry<String, ChannelHandlerContext>> iterator =
Constant.onlineUserMap.entrySet().iterator();
while(iterator.hasNext()) {
Entry<String, ChannelHandlerContext> entry = iterator.next();
if (entry.getValue() == ctx) {
LOGGER.info("正在移除握手实例...");
Constant.webSocketHandshakerMap.remove(ctx.channel().id().asLongText());
LOGGER.info(MessageFormat.format("已移除握手实例,当前握手实例总数为:{0}"
, Constant.webSocketHandshakerMap.size()));
iterator.remove();
LOGGER.info(MessageFormat.format("userId为 {0} 的用户已退出聊天,当前在线人数为:{1}"
, entry.getKey(), Constant.onlineUserMap.size()));
break;
}
}
}
@Override
public void FileMsgSingleSend(JSONObject param, ChannelHandlerContext ctx) {
String fromUserId = (String)param.get("fromUserId");
String toUserId = (String)param.get("toUserId");
String originalFilename = (String)param.get("originalFilename");
String fileSize = (String)param.get("fileSize");
String fileUrl = (String)param.get("fileUrl");
ChannelHandlerContext toUserCtx = Constant.onlineUserMap.get(toUserId);
if (toUserCtx == null) {
String responseJson = new ResponseJson()
.error(MessageFormat.format("userId为 {0} 的用户没有登录!", toUserId))
.toString();
sendMessage(ctx, responseJson);
} else {
String responseJson = new ResponseJson().success()
.setData("fromUserId", fromUserId)
.setData("originalFilename", originalFilename)
.setData("fileSize", fileSize)
.setData("fileUrl", fileUrl)
.setData("type", ChatType.FILE_MSG_SINGLE_SENDING)
.toString();
sendMessage(toUserCtx, responseJson);
}
}
@Override
public void FileMsgGroupSend(JSONObject param, ChannelHandlerContext ctx) {
String fromUserId = (String)param.get("fromUserId");
String toGroupId = (String)param.get("toGroupId");
String originalFilename = (String)param.get("originalFilename");
String fileSize = (String)param.get("fileSize");
String fileUrl = (String)param.get("fileUrl");
GroupInfo groupInfo = groupDao.getByGroupId(toGroupId);
if (groupInfo == null) {
String responseJson = new ResponseJson().error("该群id不存在").toString();
sendMessage(ctx, responseJson);
} else {
String responseJson = new ResponseJson().success()
.setData("fromUserId", fromUserId)
.setData("toGroupId", toGroupId)
.setData("originalFilename", originalFilename)
.setData("fileSize", fileSize)
.setData("fileUrl", fileUrl)
.setData("type", ChatType.FILE_MSG_GROUP_SENDING)
.toString();
groupInfo.getMembers().stream()
.forEach(member -> {
ChannelHandlerContext toCtx = Constant.onlineUserMap.get(member.getUserId());
if (toCtx != null && !member.getUserId().equals(fromUserId)) {
sendMessage(toCtx, responseJson);
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java语言开发IM即时通讯聊天系统源码.zip
共158个文件
java:29个
class:29个
png:24个
需积分: 1 3 下载量 74 浏览量
2023-06-13
21:15:27
上传
评论
收藏 1.18MB ZIP 举报
温馨提示
java即时通讯im源码
资源推荐
资源详情
资源评论
收起资源包目录
基于Java语言开发IM即时通讯聊天系统源码.zip (158个子文件)
ChatServiceImpl.class 8KB
GlobalExceptionHandler.class 6KB
WebSocketServerHandler.class 6KB
HttpRequestHandler.class 6KB
FileUtils.class 5KB
UserInfoDaoImpl.class 5KB
WebSocketServer.class 4KB
FileUploadServiceImpl.class 4KB
GroupInfoDaoImpl.class 3KB
ResponseJson.class 3KB
SecurityServiceImpl.class 3KB
UserInfo.class 2KB
UserAuthInteceptor.class 2KB
AppContext.class 2KB
GroupInfo.class 2KB
SecurityController.class 2KB
WebSocketChildChannelHandler.class 2KB
ChatroomController.class 2KB
JsonMsgHelper.class 1KB
ChatType.class 1KB
FileUploadController.class 1KB
UserInfoServiceImpl.class 1KB
Constant.class 1KB
ChatService.class 411B
SecurityService.class 377B
FileUploadService.class 302B
UserInfoDao.class 270B
GroupInfoDao.class 251B
UserInfoService.class 233B
.classpath 1KB
org.eclipse.wst.common.component 741B
org.eclipse.wst.jsdt.ui.superType.container 49B
bootstrap.min.css 118KB
layui.css 58KB
font-awesome.css 22KB
login.css 11KB
fileinput.min.css 8KB
chatroom.css 5KB
fontawesome-webfont.eot 75KB
glyphicons-halflings-regular.eot 20KB
loading-sm.gif 3KB
loading.gif 847B
chatroom.html 8KB
login.html 2KB
chat.ico 66KB
ChatServiceImpl.java 8KB
UserInfoDaoImpl.java 5KB
FileUtils.java 5KB
WebSocketServerHandler.java 4KB
GlobalExceptionHandler.java 4KB
WebSocketServer.java 4KB
HttpRequestHandler.java 3KB
FileUploadServiceImpl.java 2KB
GroupInfoDaoImpl.java 2KB
AppContext.java 2KB
ResponseJson.java 2KB
SecurityServiceImpl.java 2KB
UserInfo.java 2KB
Constant.java 1KB
UserAuthInteceptor.java 1KB
ChatroomController.java 1KB
SecurityController.java 1KB
WebSocketChildChannelHandler.java 1KB
GroupInfo.java 1KB
FileUploadController.java 1KB
JsonMsgHelper.java 934B
UserInfoServiceImpl.java 720B
ChatService.java 683B
FileUploadService.java 312B
SecurityService.java 303B
ChatType.java 262B
UserInfoDao.java 242B
GroupInfoDao.java 199B
UserInfoService.java 178B
login_bg.jpg 79KB
chat_bg.jpg 47KB
box_head.jpg 14KB
Member001.jpg 12KB
Group01.jpg 3KB
Member005.jpg 2KB
Member004.jpg 2KB
Member003.jpg 2KB
Member006.jpg 2KB
Member007.jpg 2KB
Member002.jpg 2KB
emoji.jpg 2KB
Member008.jpg 2KB
Member009.jpg 2KB
upload.jpg 1KB
fileinput.min.js 91KB
jquery-1.9.1.min.js 90KB
bootstrap.min.js 36KB
chatroom.js 35KB
zh.js 5KB
jquery.actual.min.js 1KB
.jsdtscope 562B
MANIFEST.MF 109B
MANIFEST.MF 103B
.myumldata 64B
org.eclipse.wst.jsdt.ui.superType.name 6B
共 158 条
- 1
- 2
资源评论
刘德华一不小心就打代码
- 粉丝: 4196
- 资源: 442
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功