Skip to content

Commit 2a5cd36

Browse files
http server test
1 parent 3915100 commit 2a5cd36

3 files changed

Lines changed: 38 additions & 1 deletion

File tree

src/os_loader.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { initial_fs_setup } from "./initial_fs_setup";
1919
import {DOMWindowManager} from "./window_impl/dom";
2020

2121
import "./load_global_externals";
22+
import {PorterBridgeNetworkManager} from "./network_impl/porter";
2223

2324
export const boot_os = async (on_init_spawned?: (kernel: Kernel) => Promise<void>) => {
2425
// create a program registry by importing all programs
@@ -65,6 +66,9 @@ export const boot_os = async (on_init_spawned?: (kernel: Kernel) => Promise<void
6566
// create a dom window manager
6667
const wm = new DOMWindowManager();
6768

69+
// create network manager
70+
const net_manager = new PorterBridgeNetworkManager();
71+
6872
// create a terminal using the registry and filesystem
6973
const term = new WrappedTerminal({
7074
screenReaderMode: false,
@@ -114,7 +118,7 @@ export const boot_os = async (on_init_spawned?: (kernel: Kernel) => Promise<void
114118
});
115119

116120
// create the kernel
117-
const kernel = new Kernel(term, fs, prog_reg, sfx_reg, wm);
121+
const kernel = new Kernel(term, fs, prog_reg, sfx_reg, wm, net_manager);
118122
kernel.set_env_info(document.body.dataset.version, "web");
119123

120124
// boot the kernel and check for a false return (indicating boot failure). should probably never return true as the os should hopefully always run!

src/programs/@ALL.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ export { default as ipc_fg_test } from "./ipc_fg_test";
4444

4545
// shhhhh!
4646
export { default as tb_test } from "./taskbar_test";
47+
export { default as hello_http } from "./hello_http";
4748

4849
export { default as trigger_create_trigger } from "./pkg/triggers/create_trigger";
4950
export { default as trigger_remove_trigger } from "./pkg/triggers/remove_trigger";

src/programs/hello_http.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import type { Program } from "../types";
2+
3+
export default {
4+
name: "hello_http",
5+
description: "Exposes an HTTP server on port 8080 that responds with 'Hello, World!' to any request.",
6+
usage_suffix: "",
7+
arg_descriptions: {},
8+
compat: "2.0.0",
9+
hide_from_help: true,
10+
completion: async () => [],
11+
main: async (data) => {
12+
// extract from data to make code less verbose
13+
const { term, process } = data;
14+
15+
const server = await process.network_listen(8080);
16+
server.add_event_listener("connection", (socket) => {
17+
socket.add_event_listener("data", (s_data) => {
18+
const decoder = new TextDecoder();
19+
term.writeln("Received HTTP request:");
20+
term.writeln(decoder.decode(s_data));
21+
});
22+
23+
socket.send("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 13\r\n\r\nHello, World!");
24+
socket.close();
25+
});
26+
27+
term.writeln("HTTP server started on port 8080. Press any key to stop the server.");
28+
await term.wait_for_keypress();
29+
30+
return 0;
31+
}
32+
} as Program;

0 commit comments

Comments
 (0)