mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
tcp: pass the app mailbox to the command handler
This commit is contained in:
@ -114,7 +114,7 @@ pub fn main() !MainReturn {
|
|||||||
if (@hasDecl(apprt.App, "startQuitTimer")) app_runtime.startQuitTimer();
|
if (@hasDecl(apprt.App, "startQuitTimer")) app_runtime.startQuitTimer();
|
||||||
|
|
||||||
// Not sure where this should go tbh
|
// Not sure where this should go tbh
|
||||||
var tcp_thread = try tcp.Thread.init(alloc);
|
var tcp_thread = try tcp.Thread.init(alloc, &app.mailbox);
|
||||||
defer tcp_thread.deinit();
|
defer tcp_thread.deinit();
|
||||||
|
|
||||||
var tcp_thr = try std.Thread.spawn(
|
var tcp_thr = try std.Thread.spawn(
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
//! TCP implementation. The TCP implementation is responsible for
|
//! TCP implementation. The TCP implementation is responsible for
|
||||||
//! responding to TCP requests and dispatching them to the app's Mailbox.
|
//! responding to TCP requests and dispatching them to the app's Mailbox.
|
||||||
|
pub const Thread = @import("tcp/Thread.zig");
|
||||||
|
|
||||||
test {
|
test {
|
||||||
@import("std").testing.refAllDecls(@This());
|
@import("std").testing.refAllDecls(@This());
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const log = std.log.scoped(.tcp_thread);
|
const log = std.log.scoped(.tcp_thread);
|
||||||
|
const Server = @import("Server.zig");
|
||||||
|
|
||||||
const ping = @import("commands/ping.zig").ping;
|
const ping = @import("commands/ping.zig").ping;
|
||||||
|
|
||||||
@ -30,7 +31,8 @@ pub const Command = enum {
|
|||||||
return error.InvalidCommand;
|
return error.InvalidCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn handle(self: Command) ![]const u8 {
|
pub fn handle(self: Command, server: *Server) ![]const u8 {
|
||||||
|
_ = server; // TODO: Only pass into commands that actually need it
|
||||||
switch (self) {
|
switch (self) {
|
||||||
.ping => return ping(),
|
.ping => return ping(),
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ const std = @import("std");
|
|||||||
const xev = @import("xev");
|
const xev = @import("xev");
|
||||||
const Config = @import("../config/Config.zig");
|
const Config = @import("../config/Config.zig");
|
||||||
const connections = @import("./handlers/connections.zig");
|
const connections = @import("./handlers/connections.zig");
|
||||||
|
const App = @import("../App.zig");
|
||||||
|
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
const CompletionPool = std.heap.MemoryPool(xev.Completion);
|
const CompletionPool = std.heap.MemoryPool(xev.Completion);
|
||||||
@ -39,11 +40,15 @@ addr: std.net.Address,
|
|||||||
/// Maximum clients allowed
|
/// Maximum clients allowed
|
||||||
max_clients: u8,
|
max_clients: u8,
|
||||||
|
|
||||||
|
/// A reference to the app's main mailbox to dispathc messages
|
||||||
|
mailbox: *App.Mailbox.Queue,
|
||||||
|
|
||||||
/// Initializes the server with the given allocator and address
|
/// Initializes the server with the given allocator and address
|
||||||
pub fn init(
|
pub fn init(
|
||||||
alloc: Allocator,
|
alloc: Allocator,
|
||||||
addr: std.net.Address,
|
addr: std.net.Address,
|
||||||
max_clients: u8,
|
max_clients: u8,
|
||||||
|
mailbox: *App.Mailbox.Queue,
|
||||||
) !Server {
|
) !Server {
|
||||||
return Server{
|
return Server{
|
||||||
.alloc = alloc,
|
.alloc = alloc,
|
||||||
@ -55,6 +60,7 @@ pub fn init(
|
|||||||
.clients_count = 0,
|
.clients_count = 0,
|
||||||
.addr = addr,
|
.addr = addr,
|
||||||
.max_clients = max_clients,
|
.max_clients = max_clients,
|
||||||
|
.mailbox = mailbox,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ pub const Thread = @This();
|
|||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const xev = @import("xev");
|
const xev = @import("xev");
|
||||||
const tcp = @import("../tcp.zig");
|
|
||||||
const App = @import("../App.zig");
|
const App = @import("../App.zig");
|
||||||
const Config = @import("../config/Config.zig");
|
const Config = @import("../config/Config.zig");
|
||||||
|
const Server = @import("Server.zig");
|
||||||
|
|
||||||
const Allocator = std.mem.Allocator;
|
const Allocator = std.mem.Allocator;
|
||||||
const log = std.log.scoped(.tcp_thread);
|
const log = std.log.scoped(.tcp_thread);
|
||||||
@ -14,17 +14,17 @@ const log = std.log.scoped(.tcp_thread);
|
|||||||
alloc: std.mem.Allocator,
|
alloc: std.mem.Allocator,
|
||||||
|
|
||||||
/// The TCP server for handling incoming connections.
|
/// The TCP server for handling incoming connections.
|
||||||
server: ?tcp.Server,
|
server: ?Server,
|
||||||
|
|
||||||
/// Initialize the thread. This does not START the thread. This only sets
|
/// Initialize the thread. This does not START the thread. This only sets
|
||||||
/// up all the internal state necessary prior to starting the thread. It
|
/// up all the internal state necessary prior to starting the thread. It
|
||||||
/// is up to the caller to start the thread with the threadMain entrypoint.
|
/// is up to the caller to start the thread with the threadMain entrypoint.
|
||||||
pub fn init(alloc: Allocator) !Thread {
|
pub fn init(alloc: Allocator, mailbox: *App.Mailbox.Queue) !Thread {
|
||||||
const config = try Config.load(alloc);
|
const config = try Config.load(alloc);
|
||||||
const max_clients = config.@"remote-max-connections";
|
const max_clients = config.@"remote-max-connections";
|
||||||
const addr = config.@"remote-tcp-socket";
|
const addr = config.@"remote-tcp-socket";
|
||||||
|
|
||||||
const parsedAddr = tcp.Server.parseAddress(addr) catch |err| {
|
const parsedAddr = Server.parseAddress(addr) catch |err| {
|
||||||
log.err("failed to parse address addr={any} err={any}", .{ addr, err });
|
log.err("failed to parse address addr={any} err={any}", .{ addr, err });
|
||||||
return Thread{
|
return Thread{
|
||||||
.alloc = alloc,
|
.alloc = alloc,
|
||||||
@ -33,9 +33,14 @@ pub fn init(alloc: Allocator) !Thread {
|
|||||||
};
|
};
|
||||||
|
|
||||||
log.debug("parsed address addr={any}", .{parsedAddr});
|
log.debug("parsed address addr={any}", .{parsedAddr});
|
||||||
var server = try tcp.Server.init(alloc, parsedAddr, max_clients);
|
var server = try Server.init(
|
||||||
errdefer server.deinit();
|
alloc,
|
||||||
|
parsedAddr,
|
||||||
|
max_clients,
|
||||||
|
mailbox,
|
||||||
|
);
|
||||||
|
|
||||||
|
errdefer server.deinit();
|
||||||
return Thread{
|
return Thread{
|
||||||
.alloc = alloc,
|
.alloc = alloc,
|
||||||
.server = server,
|
.server = server,
|
||||||
|
@ -59,7 +59,7 @@ fn rHandler(
|
|||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
const res = try Command.handle(cmd);
|
const res = try Command.handle(cmd, self);
|
||||||
@memcpy(b_w.ptr, res.ptr[0..res.len]);
|
@memcpy(b_w.ptr, res.ptr[0..res.len]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user