UNPKG

awesome-im

Version:

Lightweight, extensible, JavaScript Instant Messaging.

210 lines (195 loc) 4.93 kB
// { // "code": 0, // "data": { // "messageDirection": 1, // "messageType": "TxtMsg", // "sentTime": 1681902270566, // "messageUId": "D00D-4DBA-B592-C849", // "messageId": 34, // "conversationType": 0, // "content": { // "message": { // "test": 123, // "array": [ // 123, // 456 // ], // "object": { // "name": "allen" // } // }, // "extra": null // }, // "from": "allenye", // "to": "server", // "uid": 1681902270567, // "receivedTime": 1681902270570 // }, // "messageDirection": 2 // } const MessageType = { TEXT: "TxtMsg", IMAGE: "ImgMsg", FILE: "FileMsg", PING: "PingMsg", SIGNAL: "SignalMsg" } const ConversationType = { /** * 客户端与服务端的会话 */ SERVER: 0, /** * 单聊 */ PRIVATE: 1, /** * 讨论组 */ DISCUSSION: 2, /** * 群组聊天 */ GROUP: 3, /** * 聊天室会话 */ CHATROOM: 4, /** * 系统消息 */ SYSTEM: 5, } const MessageDirection = { /** * 发送消息。 */ SEND: 1, /** * 接收消息。 */ RECEIVE: 2 } const ErrorCode = { /** * 请求超时 */ TIMEOUT: { code: -1, msg: 'Network timeout' }, SUCCESS: { code: 0, errMsg: "success" }, /** * 未连接 */ NOT_CONNECTED: { code: 10001, errMsg: "not connect" }, /** * 服务端返回数据错误或者格式不正确 */ SERVER_SEND_DATA_NOT_RIGHT: { code: 10002, errMsg: "SERVER SEND DATA NOT RIGHT" }, CONNECTION_EXIST: { code: 10003, errMsg: "Connection already exists" }, } const ConnectionStatus = { /** * 请求超时。 */ TIMEOUT: -1, /** * 连接成功。 */ CONNECTED: 0, /** * 连接中。 */ CONNECTING: 1, /** * 正常断开连接。 */ DISCONNECTED: 2, /** * 网络不可用。 */ NETWORK_UNAVAILABLE: 3, /** * 连接关闭。 */ CONNECTION_CLOSED: 4, /** * 用户账户在其他设备登录,本机会被踢掉线。 */ KICKED_OFFLINE_BY_OTHER_CLIENT: 6, /** * websocket 连接失败 */ WEBSOCKET_UNAVAILABLE: 7, /** * websocket 报错 */ WEBSOCKET_ERROR: 8, } const WebSocket = require('ws'); const { encode, decode } = require("@msgpack/msgpack"); const server = new WebSocket.Server({ port: 8090 }); server.on('connection', (socket) => { console.log('Client connected'); // setInterval(() => { // server.clients.forEach((client) => { // client.send(encode({ // code: ErrorCode.SUCCESS.code, // data: { // messageType: MessageType.SIGNAL, // // messageId: "xxx", // sentTime: new Date().getTime(), // messageUId: 'CBE5-1922-F8C9-730B', // conversationType: ConversationType.SERVER, // to: 'allen', // signalName: 'end', // from: 'server', // content: { // message: "一条服务端发送的消息" // }, // }, // errMsg: "success!" // })); // }) // }, 2000); // 当接收到消息时,向所有连接的客户端广播消息 socket.on('message', (message) => { // console.log(`Received message: ${message}`); const _data = decode(message) server.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { const data = { ..._data, uid: new Date().getTime() } console.log(data) client.send(encode({ code: ErrorCode.SUCCESS.code, data: data })); } }); }); // 当连接关闭时,向所有连接的客户端广播消息 socket.on('close', () => { console.log('Client disconnected'); server.clients.forEach((client) => { if (client.readyState === WebSocket.OPEN) { client.send(encode({ errMsg: "websocket close", code: ConnectionStatus.CONNECTION_CLOSED })); } }); }); });