From 09c5ca1d3fc5e4d1f47109db90479b6f6d5ac816 Mon Sep 17 00:00:00 2001 From: Timothy Yin Date: Mon, 17 Nov 2025 00:51:00 +0800 Subject: [PATCH] chore(csms): try WebSocket support --- apps/csms/package.json | 1 + apps/csms/src/index.ts | 62 ++++++++++++++++++++++++++++++++++++++---- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/apps/csms/package.json b/apps/csms/package.json index 32ffa87..73f562a 100644 --- a/apps/csms/package.json +++ b/apps/csms/package.json @@ -8,6 +8,7 @@ }, "dependencies": { "@hono/node-server": "^1.19.6", + "@hono/node-ws": "^1.2.0", "hono": "^4.10.6" }, "devDependencies": { diff --git a/apps/csms/src/index.ts b/apps/csms/src/index.ts index 72c6bac..cd15be5 100644 --- a/apps/csms/src/index.ts +++ b/apps/csms/src/index.ts @@ -1,15 +1,65 @@ +import pkg from '../../../package.json' with { type: 'json' } import { serve } from '@hono/node-server' import { Hono } from 'hono' +import { createNodeWebSocket } from '@hono/node-ws' +import { getConnInfo } from '@hono/node-server/conninfo' +import { cors } from 'hono/cors' +import { logger } from 'hono/logger' +import { showRoutes } from 'hono/dev' const app = new Hono() +const { injectWebSocket, upgradeWebSocket } = createNodeWebSocket({ app }) + +app.use(logger()) + +app.use('/ocpp', cors({ + origin: '*', + allowMethods: ['GET', 'POST', 'OPTIONS'], + allowHeaders: ['Content-Type', 'Authorization'], + exposeHeaders: ['Content-Length'], + credentials: true, +})) + app.get('/', (c) => { - return c.text('Hello Hono!') + return c.json({ + platform: 'Helios CSMS', + version: pkg.version, + message: 'ok', + }) }) -serve({ - fetch: app.fetch, - port: 3001 -}, (info) => { - console.log(`Server is running on http://localhost:${info.port}`) +app.get( + '/ocpp', + upgradeWebSocket((c) => { + return { + onOpen(evt, ws) { + const connInfo = getConnInfo(c) + console.log(`New connection from ${connInfo.remote.address}:${connInfo.remote.port}`) + }, + onMessage(evt, ws) { + console.log(`Received message: ${evt.data}`) + ws.send(`Echo: ${evt.data}`) + }, + onClose(evt, ws) { + console.log('Connection closed: ', evt.code, evt.reason) + }, + } + }), +) + +showRoutes(app, { + verbose: true, }) + +const server = serve( + { + fetch: app.fetch, + port: 3001, + }, + (info) => { + console.log(`Server is running on http://localhost:${info.port}`) + }, +) + +injectWebSocket(server)