Skip to content

Commit

Permalink
Merge pull request #66 from samchon/features/acceptor
Browse files Browse the repository at this point in the history
`WebAcceptor.upgrade()` for 3rd party libraries.
  • Loading branch information
samchon committed Apr 17, 2024
2 parents 5c5ce71 + acab3e3 commit acc78d0
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 33 deletions.
7 changes: 4 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tgrid",
"version": "0.10.2",
"version": "0.10.3",
"main": "lib/index.js",
"typings": "lib/index.d.ts",
"exports": {
Expand Down Expand Up @@ -29,6 +29,9 @@
"test:node": "node bin/test/node"
},
"dependencies": {
"@types/node": "^20.11.30",
"@types/websocket": "^1.0.10",
"@types/ws": "^7.4.7",
"import2": "^1.0.3",
"tstl": "3.0.0",
"ws": "^7.5.3"
Expand All @@ -38,9 +41,7 @@
"@rollup/plugin-typescript": "^11.1.6",
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/browserify": "^12.0.40",
"@types/node": "^20.11.26",
"@types/puppeteer": "^7.0.4",
"@types/ws": "^7.4.7",
"@typescript-eslint/eslint-plugin": "^5.33.0",
"@typescript-eslint/parser": "^5.33.0",
"browserify": "^17.0.0",
Expand Down
27 changes: 20 additions & 7 deletions src/protocols/web/WebAcceptor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import type WebSocket from "ws";

import { Invoke } from "../../components/Invoke";
import { AcceptorBase } from "../internal/AcceptorBase";
import { IHeaderWrapper } from "../internal/IHeaderWrapper";
import { WebError } from "./WebError";
import { IWebCommunicator } from "./internal/IWebCommunicator";

Expand Down Expand Up @@ -52,15 +53,27 @@ export class WebAcceptor<Header, Provider extends object | null>
/* ----------------------------------------------------------------
CONSTRUCTORS
---------------------------------------------------------------- */
/**
* @internal
*/
public static create<Header, Provider extends object | null>(
public static upgrade<Header, Provider extends object | null>(
request: http.IncomingMessage,
socket: WebSocket,
header: Header,
): WebAcceptor<Header, Provider> {
return new WebAcceptor(request, socket, header);
handler?: (acceptor: WebAcceptor<Header, Provider>) => Promise<any>,
): void {
socket.once("message", async (data: WebSocket.Data) => {
// @todo: custom code is required
if (typeof data !== "string") socket.close();
else
try {
const wrapper: IHeaderWrapper<Header> = JSON.parse(data as string);
const acceptor: WebAcceptor<Header, Provider> = new WebAcceptor(
request,
socket,
wrapper.header,
);
if (handler !== undefined) await handler(acceptor);
} catch (exp) {
socket.close();
}
});
}

/**
Expand Down
25 changes: 2 additions & 23 deletions src/protocols/web/WebServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { DomainError, RuntimeError, is_node } from "tstl";
import type WebSocket from "ws";

import { NodeModule } from "../../utils/internal/NodeModule";
import { IHeaderWrapper } from "../internal/IHeaderWrapper";
import { IServer } from "../internal/IServer";
import { WebAcceptor } from "./WebAcceptor";

Expand Down Expand Up @@ -150,28 +149,8 @@ export class WebServer<Header, Provider extends object | null>
netSocket: net.Socket,
header: Buffer,
) => {
this.protocol_!.handleUpgrade(
request,
netSocket,
header,
(webSocket) => {
webSocket.once("message", async (data: WebSocket.Data) => {
// @todo: custom code is required
if (typeof data !== "string") webSocket.close();

try {
const wrapper: IHeaderWrapper<Header> = JSON.parse(
data as string,
);
const acceptor: WebAcceptor<Header, Provider> =
WebAcceptor.create(request, webSocket, wrapper.header);

await handler(acceptor);
} catch (exp) {
webSocket.close();
}
});
},
this.protocol_!.handleUpgrade(request, netSocket, header, (socket) =>
WebAcceptor.upgrade(request, socket, handler),
);
},
);
Expand Down

0 comments on commit acc78d0

Please sign in to comment.