-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathserver.js
112 lines (91 loc) · 2.99 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
const express = require("express");
const cors = require("cors");
const bodyParser = require("body-parser");
const config = require("./config");
const net = require("net");
const flattradeRoutes = require("./routes/flattrade");
const shoonyaRoutes = require("./routes/shoonya");
const virtualRoutes = require("./routes/virtual");
const fileUpdates = require('./routes/fileUpdates');
const app = express();
app.use(cors(config.corsHeaders));
app.use(express.json());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
require("dotenv").config();
let storedCredentials = {
flattrade: { usersession: "", userid: "" },
shoonya: { usersession: "", userid: "" },
};
let selectedBroker = "";
const pythonServerPort = 5000; // Choose an available port
app.set("case sensitive routing", false);
app.use("/flattrade", flattradeRoutes(storedCredentials));
app.use("/shoonya", shoonyaRoutes(storedCredentials));
app.use("/virtual", virtualRoutes());
app.get("/", (req, res) => res.send("Welcome to the Steadfast API"));
const BROKER_PORTS = {
flattrade: 8765,
shoonya: 8766,
};
function sendToPythonServer(message) {
return new Promise((resolve, reject) => {
const client = new net.Socket();
client.connect(pythonServerPort, "localhost", () => {
client.write(JSON.stringify(message));
});
client.on("data", (data) => {
console.log("Received:", data.toString());
client.destroy();
resolve(data.toString());
});
client.on("close", () => {
console.log("Connection closed");
});
client.on("error", (err) => {
console.error("Connection error:", err);
reject(err);
});
});
}
app.post("/set-broker", async (req, res) => {
const { broker } = req.body;
if (broker && (broker === "flattrade" || broker === "shoonya")) {
selectedBroker = broker;
try {
// Send the broker selection to the Python server
await sendToPythonServer({
action: "set_broker",
broker: selectedBroker,
});
const port = BROKER_PORTS[broker];
res.json({
message: `Selected broker set to ${selectedBroker}, WebSocket running on port ${port}`,
});
} catch (error) {
console.error("Error sending broker selection:", error);
res.status(500).json({ message: "Error setting broker" });
}
} else {
res.status(400).json({ message: "Invalid broker selection" });
}
});
app.use((err, req, res, next) => {
console.error("Error details:", err);
console.error("Stack trace:", err.stack);
res.status(500).json({
message: "An error occurred on the server",
error: err.message,
});
});
app.listen(config.port, config.host, () => {
console.log(`Server is running on http://${config.host}:${config.port}`);
});
// Code To Download Updated Instrument files everyday after 7am IST(1:30am UTC).
(async () => {
// Flattrade
await fileUpdates.checkAndUpdateFiles('flattrade');
// Shoonya
await fileUpdates.checkAndUpdateFiles('shoonya');
})();
module.exports = app;