diff --git a/server/ws/src/client.ts b/server/ws/src/client.ts index 6919bccb97..204885a0b6 100644 --- a/server/ws/src/client.ts +++ b/server/ws/src/client.ts @@ -37,13 +37,10 @@ import core, { import { SessionContextImpl, createBroadcastEvent, type Pipeline } from '@hcengineering/server-core' import { type Token } from '@hcengineering/server-token' import { type ClientSessionCtx, type Session, type SessionRequest, type StatisticsElement } from './types' -import { RPCHandler } from '@hcengineering/rpc' - /** * @public */ export class ClientSession implements Session { - handler = new RPCHandler() createTime = Date.now() requests = new Map() binaryMode: boolean = false diff --git a/server/ws/src/server_http.ts b/server/ws/src/server_http.ts index 1f86b81f20..1fcb319af6 100644 --- a/server/ws/src/server_http.ts +++ b/server/ws/src/server_http.ts @@ -66,6 +66,8 @@ export function startHttpServer ( }) } + const rpcHandler = new RPCHandler() + const app = express() app.use(cors()) app.use( @@ -242,7 +244,6 @@ export function startHttpServer ( }) const httpServer = http.createServer(app) - const wss = new WebSocketServer({ noServer: true, perMessageDeflate: enableCompression @@ -283,7 +284,8 @@ export function startHttpServer ( language: request.headers['accept-language'] ?? '', email: token.email, mode: token.extra?.mode, - model: token.extra?.model + model: token.extra?.model, + rpcHandler } const cs: ConnectionSocket = createWebsocketClientSocket(ws, data) @@ -385,19 +387,18 @@ export function startHttpServer ( if (LOGGING_ENABLED) { ctx.error('invalid token', err) } - const handler = new RPCHandler() wss.handleUpgrade(request, socket, head, (ws) => { const resp: Response = { id: -1, error: UNAUTHORIZED, result: 'hello' } - ws.send(handler.serialize(resp, false), { binary: false }) + ws.send(rpcHandler.serialize(resp, false), { binary: false }) ws.onmessage = (msg) => { const resp: Response = { error: UNAUTHORIZED } - ws.send(handler.serialize(resp, false), { binary: false }) + ws.send(rpcHandler.serialize(resp, false), { binary: false }) } }) } @@ -431,9 +432,16 @@ export function startHttpServer ( } function createWebsocketClientSocket ( ws: WebSocket, - data: { remoteAddress: string, userAgent: string, language: string, email: string, mode: any, model: any } + data: { + remoteAddress: string + userAgent: string + language: string + email: string + mode: any + model: any + rpcHandler: RPCHandler + } ): ConnectionSocket { - const handler = new RPCHandler() const cs: ConnectionSocket = { id: generateId(), isClosed: false, @@ -442,12 +450,12 @@ function createWebsocketClientSocket ( ws.close() }, readRequest: (buffer: Buffer, binary: boolean) => { - return handler.readRequest(buffer, binary) + return data.rpcHandler.readRequest(buffer, binary) }, data: () => data, send: async (ctx: MeasureContext, msg, binary, compression) => { const sst = Date.now() - const smsg = handler.serialize(msg, binary) + const smsg = data.rpcHandler.serialize(msg, binary) ctx.measure('serialize', Date.now() - sst) ctx.measure('send-data', smsg.length) diff --git a/server/ws/src/server_u.ts b/server/ws/src/server_u.ts index 2dae4318a3..291b1ad017 100644 --- a/server/ws/src/server_u.ts +++ b/server/ws/src/server_u.ts @@ -61,6 +61,8 @@ export function startUWebsocketServer ( const uAPP = uWebSockets.App() + const rpcHandler = new RPCHandler() + const writeStatus = (response: HttpResponse, status: string): HttpResponse => { return response .writeStatus(status) @@ -124,7 +126,8 @@ export function startUWebsocketServer ( language: '', email: data.payload.email, mode: data.payload.extra?.mode, - model: data.payload.extra?.model + model: data.payload.extra?.model, + rpcHandler } const cs = createWebSocketClientSocket(wrData, ws, data) data.connectionSocket = cs @@ -370,11 +373,18 @@ export function startUWebsocketServer ( } } function createWebSocketClientSocket ( - wrData: { remoteAddress: ArrayBuffer, userAgent: string, language: string, email: string, mode: any, model: any }, + wrData: { + remoteAddress: ArrayBuffer + userAgent: string + language: string + email: string + mode: any + model: any + rpcHandler: RPCHandler + }, ws: uWebSockets.WebSocket, data: WebsocketUserData ): ConnectionSocket { - const handler = new RPCHandler() const cs: ConnectionSocket = { id: generateId(), isClosed: false, @@ -388,13 +398,13 @@ function createWebSocketClientSocket ( } }, readRequest: (buffer: Buffer, binary: boolean) => { - return handler.readRequest(buffer, binary) + return wrData.rpcHandler.readRequest(buffer, binary) }, send: async (ctx, msg, binary, compression): Promise => { if (data.backPressure !== undefined) { await data.backPressure } - const serialized = handler.serialize(msg, binary) + const serialized = wrData.rpcHandler.serialize(msg, binary) try { const sendR = ws.send(serialized, binary, compression) if (sendR === 2) {