Files
bd-short-message-platform/app/middleware/socket/socketClient.js
2026-06-04 10:39:42 +08:00

163 lines
6.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// socket客户端
const net = require('net');
module.exports = (app) => {
const { middleware } = app;
const packageBuild = middleware.packageBuild;
const utils = middleware.utils;
const parseDataPackage = middleware.parseDataPackage;
const shunt = middleware.shunt;
const client = new net.Socket();
let times, connectSwitch = true, reconnectSwitch = false;
setTimeout(() => {
reconnectSwitch = true;
}, 66000);
const createClient = () => {
if(connectSwitch) {
connectSwitch = false;
client.connect(app.config.socketClient.port, app.config.socketClient.ip, () => {
console.log(`socket: 连接到服务端: ${app.config.socketClient.ip + ':' + app.config.socketClient.port}`);
client.setKeepAlive(true, 60000);
reconnectSwitch = true;
});
}
};
createClient();
// 重连服务端
const reconnect = () => {
if (reconnectSwitch) {
reconnectSwitch = false;
setTimeout(() => {
connectSwitch = true;
createClient();
}, 66000);
}
};
client.on('connectTimeout', () => {
reconnect();
});
client.on('timeout', () => {
reconnect();
});
client.on('end', () => {
reconnect();
});
client.on('close', () => {
reconnect();
});
client.on('error', (err) => {
utils.log('../../../socketLog', err);
reconnect();
});
client.on('connect', () => {
// 连接成功后的逻辑...
client.write(packageBuild.packageBuild(app, [utils.packageItem(2, 100) + utils.packageItem(2, packageBuild.buildXFType100(app.config.socketClient.token).length / 2) + packageBuild.buildXFType100(app.config.socketClient.token)]));
});
client.on('data', async (data) => {
// 在这里可以处理从服务器接收到的数据
// utils.log('../../../socketLog', data);
let msg = parseDataPackage.parseDataPackage(middleware, data.toString('hex').slice(0, data.toString('hex').length - 16));
if (msg == utils.intrinsic.heart) {
clearTimeout(times);
times = setTimeout(() => {
client.write(Buffer.from(msg, 'hex'));
}, 10000);
} else {
let nowResult = shunt.socketResult(msg.dataContent.nowData);
let resendResult = shunt.socketResult(msg.dataContent.resendData);
// 当前消息处理
if (nowResult.type == 99) {
// token验证处理程序
if (nowResult.data == '1') {
client.write(Buffer.from(utils.intrinsic.heart, 'hex'));
} else {
reconnect();
}
} else if (nowResult.type == 4) {
const { msgContent } = nowResult.data;
const { outboundMsg, receiverAddress, originalMsg } = msgContent;
const { senderAddress, msgData, encodingCategory } = outboundMsg;
// socket接收消息后触发事件监听器,将消息发送给websocket客户端并存储在数据库中
shunt.socketEmitter().emit(senderAddress.data, { encode_type: parseInt(encodingCategory.data), msg_data: msgData.data, created_at: new Date() });
const shortMsg = await app.curl('http://127.0.0.1:' + app.server.address().port + '/shortMsg', {
dataType: 'json',
contentType: 'application/x-www-form-urlencoded',
method: 'POST',
timeout: 3000,
data: {
card_id: senderAddress.data,
receiver_address: receiverAddress.data,
original_msg: originalMsg,
send_type: 0,
encode_type: parseInt(encodingCategory.data),
msg_data: msgData.data,
created_at: new Date()
},
});
if (shortMsg.data.code == 404) {
await app.curl('http://127.0.0.1:' + app.server.address().port + '/saveUnknown', {
dataType: 'json',
contentType: 'application/x-www-form-urlencoded',
method: 'POST',
timeout: 3000,
data: {
card_id: senderAddress.data,
original_msg: originalMsg,
msg_data: msgData.data,
created_at: new Date()
},
});
}
}
// 重发消息处理
if (resendResult && resendResult.type == 4) {
const { msgContent } = resendResult.data;
const { outboundMsg, receiverAddress } = msgContent;
const { senderAddress, msgData, encodingCategory } = outboundMsg;
// socket接收消息后触发事件监听器,将消息发送给websocket客户端并存储在数据库中
shunt.socketEmitter().emit(senderAddress.data, { encode_type: parseInt(encodingCategory.data), msg_data: msgData.data, created_at: new Date() });
const shortMsg = await app.curl('http://127.0.0.1:' + app.server.address().port + '/shortMsg', {
dataType: 'json',
contentType: 'application/x-www-form-urlencoded',
method: 'POST',
timeout: 3000,
data: {
card_id: senderAddress.data,
receiver_address: receiverAddress.data,
msg: data.toString(),
send_type: 1,
encode_type: parseInt(encodingCategory.data),
msg_data: msgData.data,
},
});
if (shortMsg.data.code == 404) {
await app.curl('http://127.0.0.1:' + app.server.address().port + '/saveUnknown', {
dataType: 'json',
contentType: 'application/x-www-form-urlencoded',
method: 'POST',
timeout: 3000,
data: {
card_id: senderAddress.data,
original_msg: originalMsg,
msg_data: msgData.data,
created_at: new Date()
},
});
}
}
}
});
};