97 lines
1.7 KiB
TypeScript
97 lines
1.7 KiB
TypeScript
![]() |
import { defineStore } from "pinia";
|
||
|
// @ts-ignore
|
||
|
import io, { type Socket } from "@hyoga/uni-socket.io";
|
||
|
import type { Cs } from "../types";
|
||
|
import { useStore, module } from "/@/cool";
|
||
|
import { useSession } from "./session";
|
||
|
import { useMessage } from "./message";
|
||
|
|
||
|
export const useSocket = defineStore("cs.socket", () => {
|
||
|
const config = module.config("cool-cs");
|
||
|
const { user } = useStore();
|
||
|
const session = useSession();
|
||
|
const message = useMessage();
|
||
|
|
||
|
let client = undefined as Socket | undefined;
|
||
|
|
||
|
// 连接
|
||
|
function connect() {
|
||
|
if (!user.token) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if (client) {
|
||
|
disconnect();
|
||
|
}
|
||
|
|
||
|
if (!client) {
|
||
|
client = io(config.url, {
|
||
|
transports: ["websocket", "polling"],
|
||
|
auth: {
|
||
|
isAdmin: false,
|
||
|
token: user.token,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
client.on("connect", () => {
|
||
|
console.log("[cs] connect");
|
||
|
});
|
||
|
|
||
|
client.on("disconnect", () => {
|
||
|
console.log("[cs] disconnect");
|
||
|
});
|
||
|
|
||
|
client.on("msg", (data: Cs.Msg) => {
|
||
|
if (data.type == 1) {
|
||
|
if (data.sessionId == session.info?.id) {
|
||
|
// 追加消息
|
||
|
message.append({
|
||
|
...data.user,
|
||
|
...data,
|
||
|
isAnimation: true,
|
||
|
});
|
||
|
|
||
|
// 读消息
|
||
|
message.read(data.id!);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 断开连接
|
||
|
function disconnect() {
|
||
|
client?.disconnect();
|
||
|
client = undefined;
|
||
|
}
|
||
|
|
||
|
// 发送消息
|
||
|
function send(content: Cs.Content) {
|
||
|
if (client) {
|
||
|
// 发送事件
|
||
|
client.emit("send", {
|
||
|
sessionId: session.info?.id,
|
||
|
content,
|
||
|
});
|
||
|
|
||
|
// 追加消息
|
||
|
message.append({ content });
|
||
|
} else {
|
||
|
console.log("[cs] client error");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// 监听退出
|
||
|
uni.$on("user.logout", () => {
|
||
|
session.clear();
|
||
|
message.clear();
|
||
|
disconnect();
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
connect,
|
||
|
client,
|
||
|
send,
|
||
|
};
|
||
|
});
|