feat: `websocket` 测试用例完成,广播和点对点发送

This commit is contained in:
hxr 2023-09-16 09:27:01 +08:00
parent d8c7d70dc0
commit bb313cf906
1 changed files with 66 additions and 43 deletions

View File

@ -9,28 +9,30 @@ import { useUserStoreHook } from "@/store/modules/user";
const userStore = useUserStoreHook();
const isConnected = ref(false);
const socketEndpoint = ref("http://localhost:8989/ws");
const socketEndpoint = ref("http://47.117.115.107:8989/ws");
const receiverUsername = ref("root");
const topicMessages = ref<string[]>([]); // 广
const queneMessages = ref<string[]>([]); //
const systemMessages = ref<string[]>([]); //
const topicMessage = ref(
"亲爱的大冤种们由于一只史诗级的BUG系统版本已经被迫回退到了0.0.1。"
); // 广
const queneMessage = computed(() => {
return (
"hi , " +
const queneMessage = ref(
"hi , " +
receiverUsername.value +
" , 我是" +
userStore.user.username +
" , 想和你交个朋友 ! "
);
});
);
function sendNotice() {
function sendToAll() {
stompClient.send("/app/sendToAll", {}, topicMessage.value);
messages.value.push({
sender: userStore.user.username,
content: topicMessage.value,
});
}
function sendToUser() {
@ -39,7 +41,10 @@ function sendToUser() {
{},
queneMessage.value
);
topicMessages.value.push(queneMessage.value);
messages.value.push({
sender: userStore.user.username,
content: queneMessage.value,
});
}
let stompClient: Stomp.Client;
@ -53,19 +58,24 @@ function connectWebSocket() {
{ Authorization: userStore.token },
() => {
isConnected.value = true;
stompClient.subscribe("/topic/notice", (res) => {
console.log("广播消息接收", res);
systemMessages.value.push("Websocket 已连接");
stompClient.subscribe("/topic/notice", (res: any) => {
console.log("接收到订阅主题消息", res);
messages.value.push({ sender: "Server", content: res.body });
});
stompClient.subscribe("/user/queue/greeting", (res) => {
console.log("点对点消息接收", res);
const messageData = JSON.parse(res.body) as MessageType;
messages.value.push({
sender: messageData.sender,
content: messageData.content,
});
});
},
(error) => {
//
console.error("WebSocket 连接断开", error);
//
isConnected.value = false; //
systemMessages.value.push("Websocket 已断开");
}
);
}
@ -73,24 +83,18 @@ function connectWebSocket() {
function disconnectWebSocket() {
if (stompClient && stompClient.connected) {
stompClient.disconnect(() => {
//
isConnected.value = false; //
systemMessages.value.push("Websocket 已断开");
});
}
}
const messages = ref([
{ id: 1, sender: "me", text: "你好,这是我发送的消息。" },
{ id: 2, sender: "Server", text: "嗨,我收到了你的消息。" },
{ id: 3, sender: "me", text: "很高兴和你聊天!" },
{ id: 4, sender: "Server", text: "我也很高兴和你聊天!" },
{ id: 5, sender: "me", text: "😅💤" },
{
id: 6,
sender: "Server",
text: "亲爱的大冤种们由于一只史诗级的BUG系统版本已经被迫回退到了0.0.1。",
},
]);
interface MessageType {
sender?: string;
content: any;
}
const messages = ref<MessageType[]>([]);
onMounted(() => {
connectWebSocket();
@ -112,11 +116,18 @@ onMounted(() => {
<el-card>
<el-row>
<el-col :span="16">
<el-input v-model="socketEndpoint" class="w-200px" />
<el-button type="primary" class="ml-5" @click="connectWebSocket"
<el-input v-model="socketEndpoint" class="w-220px" />
<el-button
type="primary"
class="ml-5"
@click="connectWebSocket"
:disabled="isConnected"
>连接</el-button
>
<el-button type="danger" @click="disconnectWebSocket"
<el-button
type="danger"
@click="disconnectWebSocket"
:disabled="!isConnected"
>断开</el-button
>
</el-col>
@ -138,7 +149,7 @@ onMounted(() => {
</el-form-item>
<el-form-item>
<el-button @click="sendNotice" type="primary">发送广播</el-button>
<el-button @click="sendToAll" type="primary">发送广播</el-button>
</el-form-item>
</el-form>
</el-card>
@ -163,27 +174,37 @@ onMounted(() => {
<el-col :span="12">
<el-card>
<div class="message-container">
<div class="system-notification">dafsdfads</div>
<div
class="system-message"
v-for="(message, index) in systemMessages"
:key="index"
>
{{ message }}
</div>
<div
v-for="message in messages"
:key="message.id"
v-for="(message, index) in messages"
:key="index"
class="message-item"
:class="{
'message-item--sent': message.sender === 'me',
'message-item--received': message.sender !== 'me',
'message-item--sent':
message.sender === userStore.user.username,
'message-item--received':
message.sender !== userStore.user.username,
}"
>
<div class="message-content">
<div
:class="{
'message-sender': message.sender === 'me',
'message-receiver': message.sender !== 'me',
'message-sender':
message.sender === userStore.user.username,
'message-receiver':
message.sender !== userStore.user.username,
}"
>
{{ message.sender }}
</div>
<div class="message-text">{{ message.text }}</div>
<div class="message-text">{{ message.content }}</div>
</div>
</div>
</div>
@ -236,8 +257,10 @@ onMounted(() => {
color: #333;
}
.system-notification {
padding: 5px;
.system-message {
align-self: center;
padding: 5px 10px;
margin-bottom: 5px;
font-style: italic;
text-align: center;
background-color: #f0f0f0;