From 1ddc34d25e3b1d32bbfe40f4fa243a281249eef7 Mon Sep 17 00:00:00 2001
From: Cool <747682928@qq.com>
Date: Tue, 21 Nov 2023 20:56:55 +0800
Subject: [PATCH] =?UTF-8?q?20231121=E7=89=88=E6=9C=AC=EF=BC=8C=E6=9C=AA?=
=?UTF-8?q?=E5=AE=8C=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 6 ++
.../com/example/chat/ChatApplication.java | 3 +-
.../java/com/example/chat/common/Test.java | 4 +
.../chat/common/config/WebSocketConfig.java | 19 ++++
src/main/java/com/example/chat/dao/Login.java | 2 +-
.../java/com/example/chat/dao/Test01.java | 2 +-
.../dao/{UserTable.java => UserMapper.java} | 2 +-
.../com/example/chat/dao/chat/ChatMapper.java | 19 ++++
.../example/chat/dao/chat/ChatMessage.java | 43 ++++++++
.../com/example/chat/entity/chat/Message.java | 102 ++++++++++++++++++
.../chat/entity/chat/UpdateMessage.java | 88 +++++++++++++++
.../example/chat/service/LoginService.java | 5 +-
.../service/websocket/WebSocketServer.java | 73 +++++++++++++
src/main/resources/mapper/MessageMapper.xml | 21 ++++
src/main/resources/mybatis.xml | 1 +
15 files changed, 383 insertions(+), 7 deletions(-)
create mode 100644 src/main/java/com/example/chat/common/Test.java
create mode 100644 src/main/java/com/example/chat/common/config/WebSocketConfig.java
rename src/main/java/com/example/chat/dao/{UserTable.java => UserMapper.java} (93%)
create mode 100644 src/main/java/com/example/chat/dao/chat/ChatMapper.java
create mode 100644 src/main/java/com/example/chat/dao/chat/ChatMessage.java
create mode 100644 src/main/java/com/example/chat/entity/chat/Message.java
create mode 100644 src/main/java/com/example/chat/entity/chat/UpdateMessage.java
create mode 100644 src/main/java/com/example/chat/service/websocket/WebSocketServer.java
create mode 100644 src/main/resources/mapper/MessageMapper.xml
diff --git a/pom.xml b/pom.xml
index dba890c..b0a9f31 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,6 +62,12 @@
org.springframework.boot
spring-boot-starter-websocket
+
+
+ com.alibaba
+ fastjson
+ 2.0.32
+
diff --git a/src/main/java/com/example/chat/ChatApplication.java b/src/main/java/com/example/chat/ChatApplication.java
index adde24e..5ae68e1 100644
--- a/src/main/java/com/example/chat/ChatApplication.java
+++ b/src/main/java/com/example/chat/ChatApplication.java
@@ -2,8 +2,9 @@ package com.example.chat;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
-
+@EnableWebSocket
@SpringBootApplication
public class ChatApplication {
diff --git a/src/main/java/com/example/chat/common/Test.java b/src/main/java/com/example/chat/common/Test.java
new file mode 100644
index 0000000..8187d19
--- /dev/null
+++ b/src/main/java/com/example/chat/common/Test.java
@@ -0,0 +1,4 @@
+package com.example.chat.common;
+
+public class Test {
+}
diff --git a/src/main/java/com/example/chat/common/config/WebSocketConfig.java b/src/main/java/com/example/chat/common/config/WebSocketConfig.java
new file mode 100644
index 0000000..64a724c
--- /dev/null
+++ b/src/main/java/com/example/chat/common/config/WebSocketConfig.java
@@ -0,0 +1,19 @@
+package com.example.chat.common.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+
+ /*
+ * 注入一个ServerEndpointExporter,该Bean会自动注册使用@ServerEndpoint注解申明的websocket endpoint
+ *
+ * */
+
+ @Bean
+ public ServerEndpointExporter serverEndpointExporter() {
+ return new ServerEndpointExporter();
+ }
+}
diff --git a/src/main/java/com/example/chat/dao/Login.java b/src/main/java/com/example/chat/dao/Login.java
index 68b629c..21093bb 100644
--- a/src/main/java/com/example/chat/dao/Login.java
+++ b/src/main/java/com/example/chat/dao/Login.java
@@ -9,7 +9,7 @@ import org.springframework.stereotype.Repository;
import java.io.IOException;
@Repository
-public class Login implements UserTable {
+public class Login implements UserMapper {
@Override
public void addUser(User user) throws IOException {
diff --git a/src/main/java/com/example/chat/dao/Test01.java b/src/main/java/com/example/chat/dao/Test01.java
index f98c296..5c339a7 100644
--- a/src/main/java/com/example/chat/dao/Test01.java
+++ b/src/main/java/com/example/chat/dao/Test01.java
@@ -22,7 +22,7 @@ public class Test01 implements CommandLineRunner {
}
sqlSession.close();
System.out.println("sleep");
- TimeUnit.HOURS.sleep(2);
+ TimeUnit.HOURS.sleep(1);
}
}
}
diff --git a/src/main/java/com/example/chat/dao/UserTable.java b/src/main/java/com/example/chat/dao/UserMapper.java
similarity index 93%
rename from src/main/java/com/example/chat/dao/UserTable.java
rename to src/main/java/com/example/chat/dao/UserMapper.java
index c0e696b..406631b 100644
--- a/src/main/java/com/example/chat/dao/UserTable.java
+++ b/src/main/java/com/example/chat/dao/UserMapper.java
@@ -5,7 +5,7 @@ import org.springframework.stereotype.Repository;
import java.io.IOException;
@Repository
-public interface UserTable {
+public interface UserMapper {
public abstract void addUser(User user) throws IOException;
public abstract void delUser(User user);
diff --git a/src/main/java/com/example/chat/dao/chat/ChatMapper.java b/src/main/java/com/example/chat/dao/chat/ChatMapper.java
new file mode 100644
index 0000000..b43d414
--- /dev/null
+++ b/src/main/java/com/example/chat/dao/chat/ChatMapper.java
@@ -0,0 +1,19 @@
+package com.example.chat.dao.chat;
+
+import com.example.chat.entity.chat.Message;
+import com.example.chat.entity.chat.UpdateMessage;
+import io.netty.handler.codec.MessageAggregator;
+import org.springframework.stereotype.Repository;
+
+import java.io.IOException;
+import java.util.List;
+@Repository
+public interface ChatMapper {
+ public abstract void addMessage(Message message) throws IOException;
+
+ public abstract void deleteMessage();
+
+ public abstract List getMessage() throws IOException;
+
+ public abstract void updateMessage(UpdateMessage updateMessage) throws IOException;
+}
diff --git a/src/main/java/com/example/chat/dao/chat/ChatMessage.java b/src/main/java/com/example/chat/dao/chat/ChatMessage.java
new file mode 100644
index 0000000..24f8cc3
--- /dev/null
+++ b/src/main/java/com/example/chat/dao/chat/ChatMessage.java
@@ -0,0 +1,43 @@
+package com.example.chat.dao.chat;
+
+import com.example.chat.dao.mybatis.MybatisSingleton;
+import com.example.chat.entity.chat.Message;
+import com.example.chat.entity.chat.UpdateMessage;
+import org.apache.ibatis.session.SqlSession;
+import org.springframework.stereotype.Repository;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Repository
+public class ChatMessage implements ChatMapper {
+ @Override
+ public void addMessage(Message message) throws IOException {
+ SqlSession sqlSession = MybatisSingleton.getSqlSessionFactory().openSession();
+ sqlSession.insert("dao.chat.Message.addMessage", message);
+ sqlSession.commit();
+ sqlSession.close();
+ }
+
+ @Override
+ public void updateMessage(UpdateMessage updateMessage) throws IOException {
+ SqlSession sqlSession = MybatisSingleton.getSqlSessionFactory().openSession();
+ sqlSession.update("dao.chat.Message.updateMessage", updateMessage);
+ sqlSession.commit();
+ sqlSession.close();
+ }
+
+ public List getMessage() throws IOException {
+ List messageList;
+ SqlSession sqlSession = MybatisSingleton.getSqlSessionFactory().openSession();
+ messageList = sqlSession.selectOne("dao.chat.Message.getMessage");
+ sqlSession.close();
+ return messageList;
+ }
+
+ @Override
+ public void deleteMessage() {
+
+ }
+}
diff --git a/src/main/java/com/example/chat/entity/chat/Message.java b/src/main/java/com/example/chat/entity/chat/Message.java
new file mode 100644
index 0000000..f352a64
--- /dev/null
+++ b/src/main/java/com/example/chat/entity/chat/Message.java
@@ -0,0 +1,102 @@
+package com.example.chat.entity.chat;
+
+import com.alibaba.fastjson.annotation.JSONCreator;
+import com.alibaba.fastjson.annotation.JSONField;
+
+public class Message {
+ private String nickname;
+ private String pic;
+ private String sendTime;
+ private String message;
+
+ @JSONCreator
+ public static Message create(@JSONField(name= "nickname")String nickname,
+ @JSONField(name= "pic")String pic,
+ @JSONField(name= "sendTime")String sendTime,
+ @JSONField(name= "message")String message){
+ Message message1=new Message();
+ message1.setNickname(nickname);
+ message1.setMessage(message);
+ message1.setPic(pic);
+ message1.setSendTime(sendTime);
+ return message1;
+ }
+
+ public Message() {
+ }
+
+ public Message(String nickName, String pic, String time, String message) {
+ this.nickname = nickName;
+ this.pic = pic;
+ this.sendTime = time;
+ this.message = message;
+ }
+
+ /**
+ * 获取
+ * @return nickName
+ */
+ public String getNickname() {
+ return nickname;
+ }
+
+ /**
+ * 设置
+ * @param nickname
+ */
+ public void setNickname(String nickname) {
+ this.nickname = nickname;
+ }
+
+ /**
+ * 获取
+ * @return pic
+ */
+ public String getPic() {
+ return pic;
+ }
+
+ /**
+ * 设置
+ * @param pic
+ */
+ public void setPic(String pic) {
+ this.pic = pic;
+ }
+
+ /**
+ * 获取
+ * @return time
+ */
+ public String getSendTime() {
+ return sendTime;
+ }
+
+ /**
+ * 设置
+ * @param sendTime
+ */
+ public void setSendTime(String sendTime) {
+ this.sendTime = sendTime;
+ }
+
+ /**
+ * 获取
+ * @return message
+ */
+ public String getMessage() {
+ return message;
+ }
+
+ /**
+ * 设置
+ * @param message
+ */
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String toString() {
+ return "Message{nickName = " + nickname + ", pic = " + pic + ", time = " + sendTime + ", message = " + message + "}";
+ }
+}
diff --git a/src/main/java/com/example/chat/entity/chat/UpdateMessage.java b/src/main/java/com/example/chat/entity/chat/UpdateMessage.java
new file mode 100644
index 0000000..5de34d4
--- /dev/null
+++ b/src/main/java/com/example/chat/entity/chat/UpdateMessage.java
@@ -0,0 +1,88 @@
+package com.example.chat.entity.chat;
+
+public class UpdateMessage {
+
+ private String nickname;
+ private String pic;
+ private String newName;
+ private String newPic;
+
+
+ public UpdateMessage() {
+ }
+
+ public UpdateMessage(String nickname, String pic, String newName, String newPic) {
+ this.nickname = nickname;
+ this.pic = pic;
+ this.newName = newName;
+ this.newPic = newPic;
+ }
+
+ /**
+ * 获取
+ * @return nickname
+ */
+ public String getNickname() {
+ return nickname;
+ }
+
+ /**
+ * 设置
+ * @param nickname
+ */
+ public void setNickname(String nickname) {
+ this.nickname = nickname;
+ }
+
+ /**
+ * 获取
+ * @return pic
+ */
+ public String getPic() {
+ return pic;
+ }
+
+ /**
+ * 设置
+ * @param pic
+ */
+ public void setPic(String pic) {
+ this.pic = pic;
+ }
+
+ /**
+ * 获取
+ * @return newName
+ */
+ public String getNewName() {
+ return newName;
+ }
+
+ /**
+ * 设置
+ * @param newName
+ */
+ public void setNewName(String newName) {
+ this.newName = newName;
+ }
+
+ /**
+ * 获取
+ * @return newPic
+ */
+ public String getNewPic() {
+ return newPic;
+ }
+
+ /**
+ * 设置
+ * @param newPic
+ */
+ public void setNewPic(String newPic) {
+ this.newPic = newPic;
+ }
+
+ public String toString() {
+ return "UpdateMessage{nickname = " + nickname + ", pic = " + pic + ", newName = " + newName + ", newPic = " + newPic + "}";
+ }
+}
diff --git a/src/main/java/com/example/chat/service/LoginService.java b/src/main/java/com/example/chat/service/LoginService.java
index 4341c0b..a8f475f 100644
--- a/src/main/java/com/example/chat/service/LoginService.java
+++ b/src/main/java/com/example/chat/service/LoginService.java
@@ -1,7 +1,6 @@
package com.example.chat.service;
-import com.auth0.jwt.JWT;
-import com.example.chat.dao.UserTable;
+import com.example.chat.dao.UserMapper;
import com.example.chat.dao.redis.RedisUtil;
import com.example.chat.entity.User;
import com.example.chat.jwt.JWTUtil;
@@ -14,7 +13,7 @@ import java.io.IOException;
@Service
public class LoginService {
@Resource
- UserTable userTable;
+ UserMapper userTable;
@Resource(name = "tokenRedis")
RedisUtil redisUtil;
diff --git a/src/main/java/com/example/chat/service/websocket/WebSocketServer.java b/src/main/java/com/example/chat/service/websocket/WebSocketServer.java
new file mode 100644
index 0000000..dfdd9ff
--- /dev/null
+++ b/src/main/java/com/example/chat/service/websocket/WebSocketServer.java
@@ -0,0 +1,73 @@
+package com.example.chat.service.websocket;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.example.chat.dao.chat.ChatMapper;
+import com.example.chat.entity.chat.Message;
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.swing.*;
+import javax.websocket.*;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+@ServerEndpoint(value = "/chat/get")
+@Service
+public class WebSocketServer {
+
+ private final List sessionList = new ArrayList<>();
+
+ @Resource
+ ChatMapper chatMapper;
+
+ @OnOpen
+ public void onOpen(Session session) throws IOException {
+ sessionList.add(session);
+ log.info("有新用户加入聊天,当前在线人数为{}", sessionList.size());
+ List messageList = chatMapper.getMessage();
+ sendAllSession(messageList);
+ }
+
+ @OnMessage
+ public void onMessage(String message) throws IOException {
+ Message message1= JSON.parseObject(message,Message.class);
+ chatMapper.addMessage(message1);
+ List messageList=chatMapper.getMessage();
+ sendAllSession(messageList);
+ }
+ @OnError
+ public void onError(Throwable error){
+ log.error("发生错误");
+ error.printStackTrace();
+ }
+
+ @OnClose
+ public void onClose(Session session){
+ log.info("有一个用户断开连接了");
+ sessionList.remove(session);
+ }
+
+ /*
+ * 发消息给客户端
+ * */
+ public void sendAllSession(List message) throws IOException {
+
+ try {
+ for (Session session : sessionList) {
+ log.info("给客户端发送消息{}",session);
+ session.getBasicRemote().sendObject(message);
+ }
+ } catch (Exception e) {
+ log.error("消息发送失败", e);
+ }
+
+ }
+
+
+}
diff --git a/src/main/resources/mapper/MessageMapper.xml b/src/main/resources/mapper/MessageMapper.xml
new file mode 100644
index 0000000..b55ea88
--- /dev/null
+++ b/src/main/resources/mapper/MessageMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+ insert into message (nickname, pic, sendTime, message)
+ values (#{nickname}, #{pic}, #{sendTime}, #{message})
+
+
+
+ update message
+ set nickname=#{newName} and pic = #{newPic}
+ where nickname = #{nickname}
+ and pic = #{pic}
+
+
+
diff --git a/src/main/resources/mybatis.xml b/src/main/resources/mybatis.xml
index 92a66cd..d7291db 100644
--- a/src/main/resources/mybatis.xml
+++ b/src/main/resources/mybatis.xml
@@ -22,5 +22,6 @@
+