@@ -4,6 +4,7 @@ import type WebSocket from "ws";
44
55import { Invoke } from "../../components/Invoke" ;
66import { AcceptorBase } from "../internal/AcceptorBase" ;
7+ import { IHeaderWrapper } from "../internal/IHeaderWrapper" ;
78import { WebError } from "./WebError" ;
89import { IWebCommunicator } from "./internal/IWebCommunicator" ;
910
@@ -52,15 +53,27 @@ export class WebAcceptor<Header, Provider extends object | null>
5253 /* ----------------------------------------------------------------
5354 CONSTRUCTORS
5455 ---------------------------------------------------------------- */
55- /**
56- * @internal
57- */
58- public static create < Header , Provider extends object | null > (
56+ public static upgrade < Header , Provider extends object | null > (
5957 request : http . IncomingMessage ,
6058 socket : WebSocket ,
61- header : Header ,
62- ) : WebAcceptor < Header , Provider > {
63- return new WebAcceptor ( request , socket , header ) ;
59+ handler ?: ( acceptor : WebAcceptor < Header , Provider > ) => Promise < any > ,
60+ ) : void {
61+ socket . once ( "message" , async ( data : WebSocket . Data ) => {
62+ // @todo : custom code is required
63+ if ( typeof data !== "string" ) socket . close ( ) ;
64+ else
65+ try {
66+ const wrapper : IHeaderWrapper < Header > = JSON . parse ( data as string ) ;
67+ const acceptor : WebAcceptor < Header , Provider > = new WebAcceptor (
68+ request ,
69+ socket ,
70+ wrapper . header ,
71+ ) ;
72+ if ( handler !== undefined ) await handler ( acceptor ) ;
73+ } catch ( exp ) {
74+ socket . close ( ) ;
75+ }
76+ } ) ;
6477 }
6578
6679 /**
0 commit comments