tools/awps-tunnel/server/upstream.ts (40 lines of code) (raw):
import express from "express";
import { Server } from "http";
import { WebPubSubEventHandler } from "@azure/web-pubsub-express";
import { printer } from "./output";
export async function startUpstreamServer(port: number, hub: string, path: string): Promise<Server> {
return new Promise((resolve, reject) => {
const app = express();
const handler = new WebPubSubEventHandler(hub, {
path: path,
handleConnect(_, res) {
printer.log(`[Upstream] Connect triggered`);
res.success();
},
handleUserEvent(req, res) {
printer.log(`[Upstream] User event triggered`);
if (req.dataType === "text") {
res.success(`Echo back ${req.data}`, req.dataType);
} else if (req.dataType === "json") {
res.success(`Echo back: ${JSON.stringify(req.data)}`, req.dataType);
} else {
res.success(req.data, req.dataType);
}
},
onConnected() {
printer.log(`[Upstream] Connected triggered`);
},
onDisconnected() {
printer.log(`[Upstream] Disconnected triggered`);
},
});
app.use(handler.getMiddleware());
try {
const server = app.listen(port, () => {
resolve(server);
});
} catch (err) {
reject(err);
}
});
}