Skip to content

Commit 8d6e9e7

Browse files
committed
feat: 增加全量刷新聊天记录、修复BUG
1 parent 4c1f8c1 commit 8d6e9e7

File tree

6 files changed

+46
-31
lines changed

6 files changed

+46
-31
lines changed

chat-client/src/main/java/org/github/jhy/chat/client/gui/controller/MainController.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,9 @@ private void refreshMessage(String to, EventMessage eventMessage) {
7070
// 增量刷新
7171
if (to.equals(selectedTo)) {
7272
App.refreshUI(() -> jsObject.call("refreshMessage", JSON.toString(eventMessage)));
73+
} else if (eventMessage == null) {
74+
App.refreshUI(() -> jsObject.call("refreshMessageList", JSON.toString(userMessageMap.get(selectedTo))));
7375
}
74-
// TODO 全量刷新
75-
// else if (eventMessage == null) {
76-
// jsObject.call("refreshMessage", objectMapper.writeValueAsString(userMessageMap.get(to)));
77-
// }
7876
} catch (Exception e) {
7977
log.error(e.getMessage(), e);
8078
}
@@ -106,17 +104,17 @@ public void initialize() {
106104
initializeGUI();
107105

108106
if (initialized) return;
109-
service.submit(() -> {
110-
while (!Thread.interrupted()) {
111-
try {
112-
EventMessage eventMessage = ApplicationContext.MESSAGE_QUEUE.take();
107+
108+
service.scheduleAtFixedRate(() -> {
109+
try {
110+
EventMessage eventMessage = ApplicationContext.MESSAGE_QUEUE.poll();
111+
if(eventMessage != null){
113112
App.refreshUI(() -> invokeMessageRefresh(eventMessage));
114-
} catch (InterruptedException e) {
115-
log.error(e.getMessage(), e);
116-
Thread.currentThread().interrupt();
117113
}
114+
} catch (Exception e) {
115+
log.error(e.getMessage(), e);
118116
}
119-
});
117+
}, 0, 3, TimeUnit.SECONDS);
120118
// TODO 刷新用户会把页面选中刷新
121119
service.scheduleAtFixedRate(this::refreshUserList, 0, 180, TimeUnit.SECONDS);
122120

chat-client/src/main/java/org/github/jhy/chat/client/handler/EventMessageCodec.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ public class EventMessageCodec extends MessageToMessageCodec<ByteBuf, EventMessa
1818

1919
@Override
2020
protected void encode(ChannelHandlerContext ctx, EventMessage msg, List<Object> out) {
21+
EventMessage rst = msg.copy();
2122
if (msg.getBody() != null) {
22-
msg.setBody(JSON.toString(msg.getBody()));
23+
rst.setBody(JSON.toString(msg.getBody()));
2324
}
24-
String str = JSON.toString(msg);
25+
String str = JSON.toString(rst);
2526
out.add(Unpooled.copiedBuffer(str, CharsetUtil.UTF_8));
2627
}
2728

chat-client/src/main/resources/view/MainView.html

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,16 @@
3535
element.innerHTML = strHtml;
3636
}
3737

38+
function refreshMessageList(messageList) {
39+
$("#talk-text").html("");
40+
messageList = eval(messageList);
41+
for (let i = 0; i < messageList.length; i++) {
42+
refreshMessage(JSON.stringify(messageList[i]));
43+
}
44+
}
45+
3846
function refreshMessage(message) {
3947
message = JSON.parse(message);
40-
41-
app.info("from: " + message.from);
42-
app.info("currUser: " + currUser.name);
43-
4448
let strHtml;
4549
if(message.from === currUser.name){
4650
strHtml =
@@ -88,6 +92,8 @@
8892
selected = id;
8993
$(".user").css("border", "none");
9094
$(this).css("border", "1px solid #000");
95+
96+
app.refreshMessage("-1");
9197
}
9298
$("#talk-text").html("");
9399
})

chat-common/src/main/java/org/github/jhy/chat/common/EventMessage.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,14 @@ public static EventMessage builderEventType(String msgId, EventType eventType) {
5656
.build();
5757
}
5858

59+
public EventMessage copy(){
60+
EventMessage rst = new EventMessage();
61+
rst.setMsgId(this.getMsgId());
62+
rst.setFrom(this.getFrom());
63+
rst.setTo(this.getTo());
64+
rst.setEventType(this.getEventType());
65+
rst.setSendTime(this.getSendTime());
66+
return rst;
67+
}
68+
5969
}

chat-common/src/main/java/org/github/jhy/chat/common/JSON.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.github.jhy.chat.common;
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.DeserializationFeature;
45
import com.fasterxml.jackson.databind.ObjectMapper;
56

67
/**
@@ -9,7 +10,8 @@
910
*/
1011
public class JSON {
1112

12-
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
13+
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
14+
.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);;
1315

1416
public static <T> T parseObject(String obj, Class<T> clazz) {
1517
try {

chat-server/src/main/java/org/github/jhy/chat/server/netty/handler/MessageHandler.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ public class MessageHandler {
2929
private static final ChatUserRegister chatUserRegister = new ChatUserRegister();
3030

3131
public void handlerActive(ChannelHandlerContext ctx) {
32-
Channel channel = ctx.channel();
33-
channelClientRegister.register(channel.id().asShortText(), channel);
3432
}
3533

3634
public void handlerInactive(ChannelHandlerContext ctx) {
@@ -40,8 +38,6 @@ public void handlerInactive(ChannelHandlerContext ctx) {
4038
}
4139

4240
public void handlerCaught(ChannelHandlerContext ctx, Throwable cause) {
43-
Channel channel = ctx.channel();
44-
channelClientRegister.unRegister(channel.id().asShortText());
4541
log.error(cause.getMessage(), cause);
4642
}
4743

@@ -107,17 +103,19 @@ public void handlerRequest(ChannelHandlerContext ctx, EventMessage msg, EventMes
107103
return;
108104
}
109105

110-
UserSession userSession;
111-
if ((userSession = chatUserRegister.get(msg.getFrom())) != null) {
112-
userSession.setStatus(UserStatus.ONLINE);
106+
UserSession session;
107+
if ((session = chatUserRegister.get(msg.getFrom())) != null) {
108+
session.setStatus(UserStatus.ONLINE);
113109
} else {
114-
userSession = new UserSession();
115-
userSession.setSessionId(ctx.channel().id().asShortText());
116-
userSession.setUsername(msg.getFrom());
117-
userSession.setStatus(UserStatus.OFFLINE);
110+
session = new UserSession();
111+
session.setSessionId(ctx.channel().id().asShortText());
112+
session.setUsername(msg.getFrom());
113+
session.setStatus(UserStatus.OFFLINE);
118114
}
119115
retMsg.setBody(new Message(Constants.SUCCESS));
120-
chatUserRegister.register(msg.getFrom(), userSession);
116+
117+
chatUserRegister.register(msg.getFrom(), session);
118+
channelClientRegister.register(session.getSessionId(), ctx.channel());
121119
}
122120

123121
@Override

0 commit comments

Comments
 (0)