Skip to content

Commit 9f23125

Browse files
authored
Merge pull request #67 from samchon/features/props
Add new generic argument. `Remote`.
2 parents acc78d0 + 51d1671 commit 9f23125

36 files changed

+156
-91
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "tgrid",
3-
"version": "0.10.3",
3+
"version": "0.11.0",
44
"main": "lib/index.js",
55
"typings": "lib/index.d.ts",
66
"exports": {

src/components/Communicator.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,13 @@ import { Invoke } from "./Invoke";
2525
* - {@link sendData}
2626
*
2727
* @template Provider Type of features provided for remote system.
28+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
2829
* @author Jeongho Nam - https://github.com/samchon
2930
*/
30-
export abstract class Communicator<Provider> {
31+
export abstract class Communicator<
32+
Provider extends object | null | undefined,
33+
Remote extends object | null,
34+
> {
3135
/**
3236
* @hidden
3337
*/
@@ -205,7 +209,7 @@ export abstract class Communicator<Provider> {
205209
* @return A Driver for the RFC.
206210
*/
207211
public getDriver<
208-
Controller extends object,
212+
Controller extends NonNullable<Remote> = NonNullable<Remote>,
209213
UseParametric extends boolean = false,
210214
>(): Driver<Controller, UseParametric> {
211215
return this.driver_ as Driver<Controller, UseParametric>;

src/protocols/internal/AcceptorBase.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ import { Communicator } from "../../components/Communicator";
2121
*
2222
* @template Header Type of the header containing initial data.
2323
* @template Provider Type of features provided for the remote system.
24+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
2425
* @author Jeongho Nam - https://github.com/samchon
2526
*/
2627
export abstract class AcceptorBase<
2728
Header,
2829
Provider extends object | null,
29-
> extends Communicator<Provider | null | undefined> {
30+
Remote extends object | null,
31+
> extends Communicator<Provider | undefined, Remote> {
3032
/**
3133
* @hidden
3234
*/

src/protocols/internal/ConnectorBase.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@ import { Communicator } from "../../components/Communicator";
1919
*
2020
* @template Header Type of the header containing initial data.
2121
* @template Provider Type of additional features provided for the remote system.
22+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
2223
* @author Jeongho Nam - https://github.com/samchon
2324
*/
2425
export abstract class ConnectorBase<
2526
Header,
2627
Provider extends object | null,
27-
> extends Communicator<Provider> {
28+
Remote extends object | null,
29+
> extends Communicator<Provider, Remote> {
2830
/**
2931
* @hidden
3032
*/

src/protocols/web/WebAcceptor.ts

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,15 @@ import { IWebCommunicator } from "./internal/IWebCommunicator";
3434
*
3535
* @template Header Type of the header containing initial data.
3636
* @template Provider Type of features provided for the remote system.
37+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
3738
* @author Jeongho Nam - https://github.com/samchon
3839
*/
39-
export class WebAcceptor<Header, Provider extends object | null>
40-
extends AcceptorBase<Header, Provider>
40+
export class WebAcceptor<
41+
Header,
42+
Provider extends object | null,
43+
Remote extends object | null,
44+
>
45+
extends AcceptorBase<Header, Provider, Remote>
4146
implements IWebCommunicator
4247
{
4348
/**
@@ -53,22 +58,23 @@ export class WebAcceptor<Header, Provider extends object | null>
5358
/* ----------------------------------------------------------------
5459
CONSTRUCTORS
5560
---------------------------------------------------------------- */
56-
public static upgrade<Header, Provider extends object | null>(
61+
public static upgrade<
62+
Header,
63+
Provider extends object | null,
64+
Remote extends object | null,
65+
>(
5766
request: http.IncomingMessage,
5867
socket: WebSocket,
59-
handler?: (acceptor: WebAcceptor<Header, Provider>) => Promise<any>,
68+
handler?: (acceptor: WebAcceptor<Header, Provider, Remote>) => Promise<any>,
6069
): void {
6170
socket.once("message", async (data: WebSocket.Data) => {
6271
// @todo: custom code is required
6372
if (typeof data !== "string") socket.close();
6473
else
6574
try {
6675
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-
);
76+
const acceptor: WebAcceptor<Header, Provider, Remote> =
77+
new WebAcceptor(request, socket, wrapper.header);
7278
if (handler !== undefined) await handler(acceptor);
7379
} catch (exp) {
7480
socket.close();

src/protocols/web/WebConnector.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@ import { WebSocketPolyfill } from "./internal/WebSocketPolyfill";
3333
*
3434
* @template Header Type of the header containing initial data.
3535
* @template Provider Type of features provided for the remote system.
36+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
3637
* @author Jeongho Nam - https://github.com/samchon
3738
*/
38-
export class WebConnector<Header, Provider extends object | null>
39-
extends ConnectorBase<Header, Provider>
39+
export class WebConnector<
40+
Header,
41+
Provider extends object | null,
42+
Remote extends object | null,
43+
>
44+
extends ConnectorBase<Header, Provider, Remote>
4045
implements IWebCommunicator
4146
{
4247
/**

src/protocols/web/WebServer.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,14 @@ import { WebAcceptor } from "./WebAcceptor";
3131
*
3232
* @template Header Type of header containing initialization data like activation.
3333
* @template Provider Type of features provided for the remote systems.
34+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
3435
* @author Jeongho Nam - https://github.com/samchon
3536
*/
36-
export class WebServer<Header, Provider extends object | null>
37-
implements IServer<WebServer.State>
37+
export class WebServer<
38+
Header,
39+
Provider extends object | null,
40+
Remote extends object | null,
41+
> implements IServer<WebServer.State>
3842
{
3943
/**
4044
* @hidden
@@ -109,7 +113,7 @@ export class WebServer<Header, Provider extends object | null>
109113
*/
110114
public async open(
111115
port: number,
112-
handler: (acceptor: WebAcceptor<Header, Provider>) => Promise<void>,
116+
handler: (acceptor: WebAcceptor<Header, Provider, Remote>) => Promise<void>,
113117
): Promise<void> {
114118
//----
115119
// PRELIMINARIES

src/protocols/workers/SharedWorkerAcceptor.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,15 @@ import { IWorkerSystem } from "./internal/IWorkerSystem";
3030
*
3131
* @template Header Type of the header containing initial data.
3232
* @template Provider Type of features provided for the remote system.
33+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
3334
* @author Jeongho Nam - https://github.com/samchon
3435
*/
35-
export class SharedWorkerAcceptor<Header, Provider extends object | null>
36-
extends AcceptorBase<Header, Provider>
36+
export class SharedWorkerAcceptor<
37+
Header,
38+
Provider extends object | null,
39+
Remote extends object | null,
40+
>
41+
extends AcceptorBase<Header, Provider, Remote>
3742
implements IWorkerSystem
3843
{
3944
/**
@@ -52,11 +57,15 @@ export class SharedWorkerAcceptor<Header, Provider extends object | null>
5257
/**
5358
* @internal
5459
*/
55-
public static create<Header, Provider extends object | null>(
60+
public static create<
61+
Header,
62+
Provider extends object | null,
63+
Remote extends object | null,
64+
>(
5665
port: MessagePort,
5766
header: Header,
5867
eraser: () => void,
59-
): SharedWorkerAcceptor<Header, Provider> {
68+
): SharedWorkerAcceptor<Header, Provider, Remote> {
6069
return new SharedWorkerAcceptor(port, header, eraser);
6170
}
6271

@@ -112,7 +121,7 @@ export class SharedWorkerAcceptor<Header, Provider extends object | null>
112121
/**
113122
* @inheritDoc
114123
*/
115-
public async accept(provider: Provider | null = null): Promise<void> {
124+
public async accept(provider: Provider): Promise<void> {
116125
// TEST CONDITION
117126
if (this.state_ !== SharedWorkerAcceptor.State.NONE)
118127
throw new DomainError(

src/protocols/workers/SharedWorkerConnector.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,15 @@ import { WebWorkerCompiler } from "./internal/WebWorkerCompiler";
4141
*
4242
* @template Header Type of the header containing initial data.
4343
* @template Provider Type of features provided for the remote system.
44+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
4445
* @author Jeongho Nam - https://github.com/samchon
4546
*/
46-
export class SharedWorkerConnector<Header, Provider extends object | null>
47-
extends ConnectorBase<Header, Provider>
47+
export class SharedWorkerConnector<
48+
Header,
49+
Provider extends object | null,
50+
Remote extends object | null,
51+
>
52+
extends ConnectorBase<Header, Provider, Remote>
4853
implements IWorkerSystem
4954
{
5055
/**

src/protocols/workers/SharedWorkerServer.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,14 @@ import { SharedWorkerAcceptor } from "./SharedWorkerAcceptor";
3333
*
3434
* @template Header Type of the header containing initial data.
3535
* @template Provider Type of features provided for the remote system.
36+
* @template Remote Type of features supported by remote system, used for {@link getDriver} function.
3637
* @author Jeongho Nam - https://github.com/samchon
3738
*/
38-
export class SharedWorkerServer<Header, Provider extends object | null>
39-
implements IServer<SharedWorkerServer.State>
39+
export class SharedWorkerServer<
40+
Header,
41+
Provider extends object | null,
42+
Remote extends object | null,
43+
> implements IServer<SharedWorkerServer.State>
4044
{
4145
/**
4246
* @hidden
@@ -46,7 +50,7 @@ export class SharedWorkerServer<Header, Provider extends object | null>
4650
/**
4751
* @hidden
4852
*/
49-
private acceptors_: HashSet<SharedWorkerAcceptor<Header, Provider>>;
53+
private acceptors_: HashSet<SharedWorkerAcceptor<Header, Provider, Remote>>;
5054

5155
/* ----------------------------------------------------------------
5256
CONSTRUCTOR
@@ -75,7 +79,7 @@ export class SharedWorkerServer<Header, Provider extends object | null>
7579
*/
7680
public async open(
7781
handler: (
78-
acceptor: SharedWorkerAcceptor<Header, Provider>,
82+
acceptor: SharedWorkerAcceptor<Header, Provider, Remote>,
7983
) => Promise<void>,
8084
): Promise<void> {
8185
// TEST CONDITION
@@ -130,15 +134,15 @@ export class SharedWorkerServer<Header, Provider extends object | null>
130134
*/
131135
private _Handle_connect(
132136
port: MessagePort,
133-
handler: (acceptor: SharedWorkerAcceptor<Header, Provider>) => any,
137+
handler: (acceptor: SharedWorkerAcceptor<Header, Provider, Remote>) => any,
134138
): void {
135139
port.onmessage = once((evt) => {
136140
// ARGUMENTS
137141
const wrapper: IHeaderWrapper<Header> = JSON.parse(evt.data);
138142

139143
// CREATE ACCEPTOR
140144
/* eslint-disable */
141-
let acceptor: SharedWorkerAcceptor<Header, Provider>;
145+
let acceptor: SharedWorkerAcceptor<Header, Provider, Remote>;
142146
acceptor = SharedWorkerAcceptor.create(port, wrapper.header, () => {
143147
this.acceptors_.erase(acceptor);
144148
});

0 commit comments

Comments
 (0)