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

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}`);
});