@alizadefaig/pos-server 1.2.13 → 1.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/tcp.js +68 -0
- package/package.json +2 -1
- package/server.js +11 -0
package/app/tcp.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const net = require('net');
|
|
2
|
+
|
|
3
|
+
module.exports = function (io = null) {
|
|
4
|
+
const server = net.createServer((socket) => {
|
|
5
|
+
console.log('Laravel connected via TCP');
|
|
6
|
+
|
|
7
|
+
let buffer = Buffer.alloc(0); // Буфер накопления
|
|
8
|
+
let expectedLength = null; // Длина ожидаемого сообщения
|
|
9
|
+
|
|
10
|
+
socket.on('data', (chunk) => {
|
|
11
|
+
// Добавляем пришедший кусок к общему буферу
|
|
12
|
+
buffer = Buffer.concat([buffer, chunk]);
|
|
13
|
+
|
|
14
|
+
// Цикл обработки (на случай если пришло сразу несколько сообщений или одно по частям)
|
|
15
|
+
while (true) {
|
|
16
|
+
// 1. Если мы еще не знаем длину сообщения, пытаем прочитать заголовок (4 байта)
|
|
17
|
+
if (expectedLength === null) {
|
|
18
|
+
if (buffer.length >= 4) {
|
|
19
|
+
expectedLength = buffer.readUInt32BE(0); // Читаем первые 4 байта как длину
|
|
20
|
+
buffer = buffer.subarray(4); // Отрезаем заголовок
|
|
21
|
+
} else {
|
|
22
|
+
break; // Ждем больше данных
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// 2. Если мы знаем длину, проверяем, пришло ли все тело сообщения
|
|
27
|
+
if (expectedLength !== null) {
|
|
28
|
+
if (buffer.length >= expectedLength) {
|
|
29
|
+
const messageBuffer = buffer.subarray(0, expectedLength);
|
|
30
|
+
buffer = buffer.subarray(expectedLength); // Оставляем "хвост" для следующего сообщения
|
|
31
|
+
|
|
32
|
+
// Обработка полного сообщения
|
|
33
|
+
try {
|
|
34
|
+
const rawData = messageBuffer.toString('utf8');
|
|
35
|
+
const payload = JSON.parse(rawData);
|
|
36
|
+
|
|
37
|
+
console.log(`Received ${expectedLength} data length: ${expectedLength}`, payload);
|
|
38
|
+
|
|
39
|
+
// payload содержит: event, company_id, to_id, data и т.д.
|
|
40
|
+
|
|
41
|
+
// Логика отправки в Socket.IO
|
|
42
|
+
// Пример: отправляем в конкретную комнату или всем
|
|
43
|
+
// if (payload.to_id) {
|
|
44
|
+
// io.to(payload.to_id).emit(payload.event, payload.data);
|
|
45
|
+
// } else {
|
|
46
|
+
// io.emit(payload.event, payload.data);
|
|
47
|
+
// }
|
|
48
|
+
|
|
49
|
+
} catch (e) {
|
|
50
|
+
console.error('JSON Error:', e);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Сброс длины для следующего сообщения
|
|
54
|
+
expectedLength = null;
|
|
55
|
+
} else {
|
|
56
|
+
break; // Ждем остаток данных
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
socket.on('error', (err) => console.error('TCP Error:', err));
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
server.listen(3001, '0.0.0.0', () => {
|
|
66
|
+
console.log('TCP Server listening on port 3001');
|
|
67
|
+
});
|
|
68
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alizadefaig/pos-server",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.14",
|
|
4
4
|
"description": "Server in express js with Proxy to Main server if need and will work with Electron JS",
|
|
5
5
|
"homepage": "https://gitlab.com/faigalizade/pos-server#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"lodash": "^4.17.21",
|
|
22
22
|
"moment": "^2.30.1",
|
|
23
23
|
"multer": "^2.0.2",
|
|
24
|
+
"redis": "^5.10.0",
|
|
24
25
|
"sequelize": "^6.37.7",
|
|
25
26
|
"sharp": "^0.34.5",
|
|
26
27
|
"socket.io": "^4.8.1",
|
package/server.js
CHANGED
|
@@ -61,6 +61,17 @@ const runExpress = (conf = null) => {
|
|
|
61
61
|
res.send('ok');
|
|
62
62
|
});
|
|
63
63
|
|
|
64
|
+
if (appConfig.isServer) {
|
|
65
|
+
console.log('Creating NET SERVER');
|
|
66
|
+
require('./app/tcp')();
|
|
67
|
+
// (async () => {
|
|
68
|
+
// const redis = require('redis');
|
|
69
|
+
// const subscriber = redis.createClient({ url: 'redis://127.0.0.1:6379' }); // Ваш конфиг Redis
|
|
70
|
+
//
|
|
71
|
+
// await subscriber.connect();
|
|
72
|
+
// })()
|
|
73
|
+
}
|
|
74
|
+
|
|
64
75
|
|
|
65
76
|
// ==== Load Platform Based Routes ====
|
|
66
77
|
loadRoutes(app, join(__dirname, ('routes/' + (appConfig.isServer ? 'server' : 'desktop'))));
|