You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.3 KiB
84 lines
2.3 KiB
import express from "express";
|
|
import { Server } from "ws";
|
|
import http from "http";
|
|
import bodyParser from "body-parser";
|
|
import morgan from "morgan";
|
|
|
|
import cmdRouter from "./routes/cmd";
|
|
import debugRouter from "./routes/debug";
|
|
import authRouter from "./routes/auth";
|
|
import measureRouter from "./routes/measure";
|
|
import measureAnalysisRouter from "./routes/measureAnalysis";
|
|
import measureDataRouter from "./routes/measureData";
|
|
|
|
// import { defaultStatus, StatusDatagram } from "./types/wsTypes";
|
|
import { wsSend } from "./utils/wss";
|
|
import { ContextMessage, defaultContext, defaultMeasureState } from "./types/wsTypes";
|
|
|
|
const app = express();
|
|
app.use(express.static("public"));
|
|
app.use(bodyParser.urlencoded());
|
|
app.use(bodyParser.json());
|
|
app.use(morgan("dev"));
|
|
|
|
const server = http.createServer(app);
|
|
// 在HTTP服务器上初始化WebSocket服务器
|
|
const wss = new Server({ server });
|
|
|
|
wss.on("connection", ws => {
|
|
console.log("Client connected");
|
|
// ws.send("Welcome to the WebSocket server!");
|
|
// ws.on("message", message => {
|
|
// console.log(`Received message: ${message}`);
|
|
// wss.clients.forEach(client => {
|
|
// if (client.readyState === ws.OPEN) {
|
|
// client.send(message.toString());
|
|
// }
|
|
// });
|
|
// });
|
|
|
|
// DeviceContext
|
|
ws.send(
|
|
JSON.stringify({
|
|
messageType: "DeviceContext",
|
|
data: app.locals["context"],
|
|
path: "/deviceContext",
|
|
})
|
|
);
|
|
// MeasureState
|
|
ws.send(
|
|
JSON.stringify({
|
|
messageType: "EVENT",
|
|
data: app.locals["measure"],
|
|
path: "/measurement-task/get-task-state",
|
|
})
|
|
);
|
|
ws.on("close", () => {
|
|
console.log("Client disconnected");
|
|
});
|
|
});
|
|
|
|
app.locals["wss"] = wss;
|
|
app.locals["context"] = defaultContext;
|
|
app.locals["measure"] = defaultMeasureState;
|
|
|
|
// app.get("/", (req, res) => {
|
|
// res.send("Hello World!");
|
|
// });
|
|
app.use("/api/debug", debugRouter);
|
|
app.use("/api/cmd", cmdRouter);
|
|
app.use("/api/auth", authRouter);
|
|
app.use("/api/measurement-analysis", measureAnalysisRouter);
|
|
app.use("/api/measurement-task", measureRouter);
|
|
app.use("/api/measurement-data", measureDataRouter);
|
|
//@ts-ignore
|
|
app.use((err, req, res, next) => {
|
|
console.error(err.stack);
|
|
res.status(500).send("Something broke!");
|
|
});
|
|
|
|
// 监听端口
|
|
const PORT = process.env.PORT || 8080;
|
|
server.listen(PORT, () => {
|
|
console.log(`Server is listening on port ${PORT}`);
|
|
});
|