85 lines
3.4 KiB
JavaScript
85 lines
3.4 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var express_1 = require("express");
|
|
var http_1 = require("http"); // Import Node's built-in HTTP module
|
|
var socket_io_1 = require("socket.io"); // Import Socket.io
|
|
var express_validator_1 = require("express-validator");
|
|
var body_parser_1 = require("body-parser");
|
|
require('dotenv').config();
|
|
var app = (0, express_1.default)();
|
|
var server = http_1.default.createServer(app); // Create an HTTP server
|
|
var io = new socket_io_1.Server(server); // Create a Socket.io server instance
|
|
// app.use(bodyParser.urlencoded());
|
|
// app.use(bodyParser.json());
|
|
app.use(express_1.default.json());
|
|
app.use(express_1.default.urlencoded({ extended: true }));
|
|
app.post('/test', body_parser_1.default.json(), function (req, res) {
|
|
console.log(req.body);
|
|
res.send(req.body);
|
|
});
|
|
var validate = function (req, res, next) {
|
|
// console.log(req.body);
|
|
// console.log(JSON.stringify(req.body, null, 2));
|
|
var errors = (0, express_validator_1.validationResult)(req);
|
|
if (!errors.isEmpty()) {
|
|
return res.status(400).json({ errors: errors.array() });
|
|
}
|
|
next();
|
|
};
|
|
var rules = [
|
|
(0, express_validator_1.body)('phone_number').notEmpty(),
|
|
(0, express_validator_1.body)('telephone_id').notEmpty(),
|
|
(0, express_validator_1.body)('phone_number').isLength({ min: 11, max: 11 }).withMessage("شماره تلفن باید 11 رقم باشد.")
|
|
];
|
|
app.post('/send_notification', rules, validate, function (req, res) {
|
|
// console.log(req.body.telephone_id);
|
|
io.fetchSockets().then(function (sockets) {
|
|
var find = 0;
|
|
sockets.map(function (socket) {
|
|
if (socket.handshake.auth.token === req.body.telephone_id) {
|
|
find = 1;
|
|
socket.timeout(2000).emit("answer", req.body.phone_number, function (err, responses) {
|
|
if (err) {
|
|
console.log("#2");
|
|
console.log(err);
|
|
res.end("user does not ack");
|
|
// some clients did not acknowledge the event in the given delay
|
|
}
|
|
else {
|
|
console.log("#1");
|
|
console.log(responses); // one response per client
|
|
res.end("user received notification");
|
|
}
|
|
});
|
|
}
|
|
// res.end("inja");
|
|
// try {
|
|
// const responses = socket.timeout(2000).emitWithAck("answer");
|
|
// res.send(responses); // one response per client
|
|
// } catch (e) {
|
|
// res.end("ridim");
|
|
// // some clients did not acknowledge the event in the given delay
|
|
// }
|
|
// socket.timeout(10000).emitWithAck('new_answer', req.body.phone_number);
|
|
});
|
|
if (!find) {
|
|
}
|
|
});
|
|
res.end("your message is received ");
|
|
});
|
|
io.on('connection', function (socket) {
|
|
if (socket.recovered) {
|
|
console.log(socket.handshake.auth.token + ':recovered');
|
|
}
|
|
else {
|
|
console.log(socket.handshake.auth.token + ":connect");
|
|
}
|
|
socket.on("disconnect", function (reason) {
|
|
console.log(socket.handshake.auth.token + ":" + reason);
|
|
});
|
|
});
|
|
// Start the HTTP server
|
|
server.listen(process.env.port, function () {
|
|
console.log("Server is running on port ".concat(process.env.port));
|
|
});
|