调整类名称,新增接收状态消息

This commit is contained in:
wanggeng 2021-09-14 18:10:20 +08:00
parent 381db54988
commit b6b25142a2
5 changed files with 38 additions and 25 deletions

View File

@ -10,7 +10,7 @@ import ink.wgink.module.instantmessage.pojo.pos.NoticePO;
import ink.wgink.module.instantmessage.pojo.vos.NoticeVO;
import ink.wgink.module.instantmessage.service.IMessageService;
import ink.wgink.module.instantmessage.service.INoticeService;
import ink.wgink.module.instantmessage.websocket.enums.ClientSocketTypeEnum;
import ink.wgink.module.instantmessage.websocket.enums.MessageTypeEnum;
import ink.wgink.module.instantmessage.websocket.manager.WebSocketChannelManager;
import ink.wgink.module.instantmessage.websocket.pojo.WebSocketClientMessage;
import ink.wgink.module.instantmessage.websocket.pojo.WebSocketSession;
@ -57,7 +57,7 @@ public class MessageServiceImpl extends DefaultBaseService implements IMessageSe
public void notice(String clientName, NoticeBO noticeBO) {
List<WebSocketSession> webSocketSessions = listWebSocketSessions(clientName, noticeBO);
NoticeBody noticeBody = new NoticeBody(noticeBO.getTitle(), noticeBO.getContent());
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(ClientSocketTypeEnum.NOTICE.getValue(),
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(MessageTypeEnum.NOTICE.getValue(),
true,
WebSocketChannelManager.FORM_SYSTEM,
noticeBO.getTo(),
@ -74,7 +74,7 @@ public class MessageServiceImpl extends DefaultBaseService implements IMessageSe
public void notice(String clientName, NoticeTargetBO noticeTargetBO) {
List<WebSocketSession> webSocketSessions = listWebSocketSessions(clientName, noticeTargetBO);
NoticeBody noticeBody = new NoticeBody(noticeTargetBO.getTitle(), noticeTargetBO.getContent(), noticeTargetBO.getTarget());
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(ClientSocketTypeEnum.NOTICE_TARGET_MESSAGE.getValue(),
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(MessageTypeEnum.NOTICE_TARGET_MESSAGE.getValue(),
true,
WebSocketChannelManager.FORM_SYSTEM,
noticeTargetBO.getTo(),
@ -99,7 +99,7 @@ public class MessageServiceImpl extends DefaultBaseService implements IMessageSe
scheduledExecutorService.schedule(() -> {
for (WebSocketSession webSocketSession : webSocketSessions) {
NoticeBody noticeBody = new NoticeBody(notice.getTitle(), notice.getMsg(), notice.getTarget());
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(ClientSocketTypeEnum.NOTICE_TARGET_MESSAGE.getValue(),
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(MessageTypeEnum.NOTICE_TARGET_MESSAGE.getValue(),
true,
WebSocketChannelManager.FORM_SYSTEM,
webSocketSession.getUserId(),
@ -174,7 +174,7 @@ public class MessageServiceImpl extends DefaultBaseService implements IMessageSe
countNeedToDealWithBody.setSystem(noticePO.getNoticeSystem());
// 查询待办状态
List<CountNeedToDealWithBody> counts = noticeService.listNoticeCount(webSocketSession.getUserId(), countNeedToDealWithBody);
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(ClientSocketTypeEnum.SEARCH_COUNT_NEED_TO_DEALT_WITH.getValue(),
WebSocketClientMessage webSocketClientMessage = new WebSocketClientMessage(MessageTypeEnum.SEARCH_COUNT_NEED_TO_DEALT_WITH.getValue(),
true,
WebSocketChannelManager.FORM_SYSTEM,
webSocketSession.getUserId(),

View File

@ -10,7 +10,7 @@ package ink.wgink.module.instantmessage.websocket.enums;
* @Date: 2021/1/13 11:20 下午
* @Version: 1.0
*/
public enum ClientSocketTypeEnum {
public enum MessageTypeEnum {
REGISTER(1000, "注册消息body 为 RegisterBody 的 JSON 字符串"),
@ -41,16 +41,16 @@ public enum ClientSocketTypeEnum {
SEARCH_ONLINE_USER_FRIEND(4002, "查询朋友在线用户body 为查询用户的 userId"),
SEARCH_COUNT_NEED_TO_DEALT_WITH(4003, "查询全部待办总数"),
STATUS_SEND(9001, "消息发送状态body 为 BaseResult 的 JSON 字符串"),
STATUS_SEND(9001, "消息发送状态body 为 StatusBody 的 JSON 字符串"),
STATUS_SEND_ONLINE(9002, "发送在线状态body 为 在线用户的ID JSONArray 字符串"),
STATUS_SEND_OFFLINE(9003, "发送离线状态body 为 离线用户的ID JSONArray 字符串"),
STATUS_RECEIVED(9101,"消息接受状态");
STATUS_RECEIVE(9101,"消息接受状态body 为 StatusBody 的 JSON 字符串");
private int value;
private String summary;
ClientSocketTypeEnum(int value, String summary) {
MessageTypeEnum(int value, String summary) {
this.value = value;
this.summary = summary;
}

View File

@ -15,12 +15,11 @@ public enum StatusEnum {
FAILED(400, "失败"),
MESSAGE_ERROR(401, "消息错误"),
SESSION_ERROR(402, "会话错误"),
CLIENT_SESSION_ERROR(403, "客户端会话错误"),
TYPE_ERROR(404, "类型错误"),
BODY_ERROR(405, "消息体错误"),
FROM_ERROR(406, "来源错误"),
TO_ERROR(407, "接受用户错误"),
RECEIVE_ERROR(408, "接收错误");
TYPE_ERROR(403, "类型编码错误"),
BODY_ERROR(404, "消息体错误"),
FROM_ERROR(405, "来源错误"),
TO_ERROR(406, "接收人错误"),
RECEIVE_ERROR(407, "接收错误");
private int value;
private String summary;

View File

@ -2,7 +2,7 @@ package ink.wgink.module.instantmessage.websocket.handler.text;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import ink.wgink.module.instantmessage.websocket.enums.ClientSocketTypeEnum;
import ink.wgink.module.instantmessage.websocket.enums.MessageTypeEnum;
import ink.wgink.module.instantmessage.websocket.enums.StatusEnum;
import ink.wgink.module.instantmessage.websocket.exception.*;
import ink.wgink.module.instantmessage.websocket.manager.WebSocketChannelManager;
@ -42,20 +42,21 @@ public class WebSocketTextHandler {
if (StringUtils.isBlank(clientSocketMessage.getBody())) {
throw new BodyException("Body主体不能为空");
}
if (ClientSocketTypeEnum.REGISTER.getValue() == clientSocketMessage.getType()) {
if (MessageTypeEnum.REGISTER.getValue() == clientSocketMessage.getType()) {
// 客户端注册消息
statusBody = clientRegisterSession(ctx.channel(), clientSocketMessage);
} else if (ClientSocketTypeEnum.MESSAGE.getValue() == clientSocketMessage.getType()) {
} else if (MessageTypeEnum.MESSAGE.getValue() == clientSocketMessage.getType()) {
// 文本消息
sendText(ctx.channel(), clientSocketMessage);
} else if (ClientSocketTypeEnum.MESSAGE_GROUP.getValue() == clientSocketMessage.getType()) {
} else if (MessageTypeEnum.MESSAGE_GROUP.getValue() == clientSocketMessage.getType()) {
// 群发消息
sendGroupText(ctx.channel(), clientSocketMessage);
} else if (ClientSocketTypeEnum.SEARCH_ONLINE_USER.getValue() == clientSocketMessage.getType()) {
} else if (MessageTypeEnum.SEARCH_ONLINE_USER.getValue() == clientSocketMessage.getType()) {
// 用户在线状态
listOnlineUser(ctx.channel(), clientSocketMessage);
} else if (ClientSocketTypeEnum.STATUS_RECEIVED.getValue() == clientSocketMessage.getType()) {
} else if (MessageTypeEnum.STATUS_RECEIVE.getValue() == clientSocketMessage.getType()) {
// 消息接收状态
sendReceiveStatus(clientSocketMessage);
} else {
throw new TypeException("请求类型错误");
}
@ -74,7 +75,7 @@ public class WebSocketTextHandler {
} catch (JSONException e) {
clientSocketMessage = new WebSocketClientMessage();
clientSocketMessage.setSystem(true);
clientSocketMessage.setType(ClientSocketTypeEnum.MESSAGE_SYSTEM.getValue());
clientSocketMessage.setType(MessageTypeEnum.MESSAGE_SYSTEM.getValue());
clientSocketMessage.setFrom(WebSocketChannelManager.FORM_SYSTEM);
statusBody = new StatusBody(StatusEnum.TO_ERROR.getValue(), StatusEnum.MESSAGE_ERROR, e.getMessage());
} finally {
@ -85,6 +86,19 @@ public class WebSocketTextHandler {
}
}
/**
* 发送接收状态
*
* @param clientSocketMessage 客户端消息
*/
private void sendReceiveStatus(WebSocketClientMessage webSocketClientMessage) {
List<String> toUserIds = new ArrayList<>(Sets.newHashSet(webSocketClientMessage.getTo().split(",")));
List<WebSocketSession> webSocketSessions = WebSocketChannelManager.getInstance().listOnlineUser(toUserIds);
for (WebSocketSession webSocketSession : webSocketSessions) {
WebSocketChannelManager.getInstance().sendText(webSocketSession.getChannel(), webSocketClientMessage);
}
}
/**
* 客户端会话注册
*
@ -171,7 +185,7 @@ public class WebSocketTextHandler {
}
idsBody = new IdsBody();
idsBody.setIds(new ArrayList<>(idSets));
webSocketClientMessage.setType(ClientSocketTypeEnum.STATUS_SEND_ONLINE.getValue());
webSocketClientMessage.setType(MessageTypeEnum.STATUS_SEND_ONLINE.getValue());
webSocketClientMessage.setBody(JSONObject.toJSONString(idsBody));
sendText(fromChannel, webSocketClientMessage);
}
@ -184,7 +198,7 @@ public class WebSocketTextHandler {
* @param msg
*/
public static void sendTextFailed(Channel fromChannel, WebSocketClientMessage webSocketClientMessage, String msg) {
webSocketClientMessage.setType(ClientSocketTypeEnum.STATUS_SEND.getValue());
webSocketClientMessage.setType(MessageTypeEnum.STATUS_SEND.getValue());
webSocketClientMessage.setBody(JSONObject.toJSONString(new StatusBody(StatusEnum.FAILED.getValue(), StatusEnum.FAILED, msg)));
WebSocketChannelManager.getInstance().sendText(fromChannel, webSocketClientMessage);
}

View File

@ -30,7 +30,7 @@ public class WebSocketClientMessage {
*/
private String from;
/**
* 去处系统消息为 clientName, 非系统消息为 userId
* 去处接收人userId
*/
private String to;
/**