Skip to content

Commit 47bfeb0

Browse files
committed
chore: handling logging, waiting for registration completion
1 parent ffa6ff4 commit 47bfeb0

5 files changed

Lines changed: 98 additions & 18 deletions

File tree

src/ElectronNET.API/API/Protocol.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,19 @@ public Task RegisterSchemesAsPrivilegedAsync(params CustomScheme[] customSchemes
5656
/// </summary>
5757
/// <param name="scheme">scheme to handle, for example https or my-app. This is the bit before the : in a URL.</param>
5858
/// <param name="handler">Either a <see cref="Response" /> or a <see cref="Task{Response}"/> can be returned.</param>
59-
public void Handle(string scheme, Func<Request, Response> handler)
59+
public Task HandleAsync(string scheme, Func<Request, Response> handler)
6060
{
6161
if (string.IsNullOrWhiteSpace(scheme))
6262
throw new ArgumentException("Scheme must not be null or empty.", nameof(scheme));
6363

64-
if (handler == null)
65-
throw new ArgumentNullException(nameof(handler));
66-
67-
Handle(scheme, req => Task.FromResult(handler(req)));
64+
return handler switch
65+
{
66+
null => throw new ArgumentNullException(nameof(handler)),
67+
_ => HandleAsync(scheme, req => Task.FromResult(handler(req)))
68+
};
6869
}
6970

70-
public void Handle(string scheme, Func<Request, Task<Response>> handler)
71+
public Task HandleAsync(string scheme, Func<Request, Task<Response>> handler)
7172
{
7273
if (string.IsNullOrWhiteSpace(scheme))
7374
throw new ArgumentException("Scheme must not be null or empty.", nameof(scheme));
@@ -78,6 +79,7 @@ public void Handle(string scheme, Func<Request, Task<Response>> handler)
7879
var tsc = new TaskCompletionSource();
7980

8081
// Tell TS to register protocol.handle for this scheme.
82+
BridgeConnector.Socket.Once("protocol-handle-register-completed", tsc.SetResult);
8183
BridgeConnector.Socket.Emit("protocol-handle-register", new
8284
{
8385
scheme
@@ -133,6 +135,8 @@ public void Handle(string scheme, Func<Request, Task<Response>> handler)
133135
});
134136
}
135137
});
138+
139+
return tsc.Task;
136140
}
137141
}
138142

src/ElectronNET.Host/api/protocol.js

Lines changed: 71 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ElectronNET.Host/api/protocol.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/ElectronNET.Host/api/protocol.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Socket } from "net";
22
import { protocol } from "electron";
33
import { randomUUID } from "crypto"; // Node 14+; or a simple counter
44

5-
let electronSocket: Socket;
5+
let _socket: Socket;
66

77
type Request1 = {
88
id: string;
@@ -21,17 +21,22 @@ type Response1 = {
2121
};
2222

2323
export = (socket: Socket) => {
24-
electronSocket = socket;
24+
_socket = socket;
25+
26+
console.log("protocol api initialized.");
27+
28+
socket.on("register-schemes-as-privileged", (schemes) => {
29+
console.log("register schemes as privileged called.");
2530

26-
// Already handled earlier:
27-
socket.on("registerSchemesAsPrivileged", (schemes) => {
2831
protocol.registerSchemesAsPrivileged(schemes);
29-
electronSocket.emit("registerSchemesAsPrivilegedCompleted");
32+
_socket.emit("register-schemes-as-privileged-completed");
3033
});
3134

32-
// New: protocol.handle
3335
socket.on("protocol-handle-register", ({ scheme }: { scheme: string }) => {
36+
console.log("protocol handle called.");
37+
3438
protocol.handle(scheme, (request) => handle(scheme, request));
39+
_socket.emit("protocol-handle-register-completed");
3540
});
3641
};
3742

@@ -49,7 +54,7 @@ async function handle(scheme: string, request: Request): Promise<Response> {
4954
body = buffer.toString("base64");
5055
}
5156

52-
const dto: Request1 = {
57+
const req: Request1 = {
5358
id,
5459
scheme,
5560
url: request.url,
@@ -60,12 +65,11 @@ async function handle(scheme: string, request: Request): Promise<Response> {
6065

6166
return new Promise<Response>((resolve, reject) => {
6267
const handle = (res: Response1) => {
63-
// Filter by correlation ID
6468
if (res?.id !== id) {
6569
return;
6670
}
6771

68-
electronSocket.off("protocol-handle-response", handle as any);
72+
_socket.off("protocol-handle-response", handle);
6973

7074
try {
7175
const status = res.status ?? 200;
@@ -95,7 +99,7 @@ async function handle(scheme: string, request: Request): Promise<Response> {
9599
}
96100
};
97101

98-
electronSocket.on("protocol-handle-response", handle);
99-
electronSocket.emit("protocol-handle-request", dto);
102+
_socket.once("protocol-handle-response", handle);
103+
_socket.emit("protocol-handle-request", req);
100104
});
101105
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"root":["./globals.d.ts","./types-shims.d.ts","./api/app.ts","./api/autoupdater.ts","./api/browserview.ts","./api/browserwindows.ts","./api/clipboard.ts","./api/commandline.ts","./api/dialog.ts","./api/dock.ts","./api/globalshortcut.ts","./api/ipc.ts","./api/menu.ts","./api/nativetheme.ts","./api/notification.ts","./api/powermonitor.ts","./api/process.ts","./api/screen.ts","./api/shell.ts","./api/tray.ts","./api/webcontents.ts"],"version":"5.9.3"}
1+
{"root":["./globals.d.ts","./types-shims.d.ts","./api/app.ts","./api/autoupdater.ts","./api/browserview.ts","./api/browserwindows.ts","./api/clipboard.ts","./api/commandline.ts","./api/dialog.ts","./api/dock.ts","./api/globalshortcut.ts","./api/ipc.ts","./api/menu.ts","./api/nativetheme.ts","./api/notification.ts","./api/powermonitor.ts","./api/process.ts","./api/protocol.ts","./api/screen.ts","./api/shell.ts","./api/tray.ts","./api/webcontents.ts"],"version":"5.9.3"}

0 commit comments

Comments
 (0)