Merge pull request #50 from FireFox317/bufferedstreams
Wrap stdout in BufferedOutStream
This commit is contained in:
commit
0a0f902671
26
src/main.zig
26
src/main.zig
@ -11,7 +11,7 @@ const analysis = @import("analysis.zig");
|
|||||||
|
|
||||||
// Code is largely based off of https://github.com/andersfr/zig-lsp/blob/master/server.zig
|
// Code is largely based off of https://github.com/andersfr/zig-lsp/blob/master/server.zig
|
||||||
|
|
||||||
var stdout: std.fs.File.OutStream = undefined;
|
var stdout: std.io.BufferedOutStream(4096, std.fs.File.OutStream) = undefined;
|
||||||
var allocator: *std.mem.Allocator = undefined;
|
var allocator: *std.mem.Allocator = undefined;
|
||||||
|
|
||||||
var document_store: DocumentStore = undefined;
|
var document_store: DocumentStore = undefined;
|
||||||
@ -46,8 +46,11 @@ fn send(reqOrRes: var) !void {
|
|||||||
var mem_buffer: [1024 * 128]u8 = undefined;
|
var mem_buffer: [1024 * 128]u8 = undefined;
|
||||||
var fbs = std.io.fixedBufferStream(&mem_buffer);
|
var fbs = std.io.fixedBufferStream(&mem_buffer);
|
||||||
try std.json.stringify(reqOrRes, std.json.StringifyOptions{}, fbs.outStream());
|
try std.json.stringify(reqOrRes, std.json.StringifyOptions{}, fbs.outStream());
|
||||||
try stdout.print("Content-Length: {}\r\n\r\n", .{fbs.pos});
|
|
||||||
try stdout.writeAll(fbs.getWritten());
|
const stdout_stream = stdout.outStream();
|
||||||
|
try stdout_stream.print("Content-Length: {}\r\n\r\n", .{fbs.pos});
|
||||||
|
try stdout_stream.writeAll(fbs.getWritten());
|
||||||
|
try stdout.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn log(comptime fmt: []const u8, args: var) !void {
|
fn log(comptime fmt: []const u8, args: var) !void {
|
||||||
@ -82,8 +85,11 @@ fn respondGeneric(id: i64, response: []const u8) !void {
|
|||||||
// Numbers of character that will be printed from this string: len - 3 brackets
|
// Numbers of character that will be printed from this string: len - 3 brackets
|
||||||
// 1 from the beginning (escaped) and the 2 from the arg {}
|
// 1 from the beginning (escaped) and the 2 from the arg {}
|
||||||
const json_fmt = "{{\"jsonrpc\":\"2.0\",\"id\":{}";
|
const json_fmt = "{{\"jsonrpc\":\"2.0\",\"id\":{}";
|
||||||
try stdout.print("Content-Length: {}\r\n\r\n" ++ json_fmt, .{ response.len + id_digits + json_fmt.len - 3, id });
|
|
||||||
try stdout.writeAll(response);
|
const stdout_stream = stdout.outStream();
|
||||||
|
try stdout_stream.print("Content-Length: {}\r\n\r\n" ++ json_fmt, .{ response.len + id_digits + json_fmt.len - 3, id });
|
||||||
|
try stdout_stream.writeAll(response);
|
||||||
|
try stdout.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Is this correct or can we get a better end?
|
// TODO: Is this correct or can we get a better end?
|
||||||
@ -608,17 +614,9 @@ pub fn main() anyerror!void {
|
|||||||
allocator = &debug_alloc_state.allocator;
|
allocator = &debug_alloc_state.allocator;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init buffer for stdin read
|
|
||||||
|
|
||||||
var buffer = std.ArrayList(u8).init(allocator);
|
|
||||||
defer buffer.deinit();
|
|
||||||
|
|
||||||
try buffer.resize(4096);
|
|
||||||
|
|
||||||
// Init global vars
|
// Init global vars
|
||||||
|
|
||||||
const stdin = std.io.getStdIn().inStream();
|
const stdin = std.io.getStdIn().inStream();
|
||||||
stdout = std.io.getStdOut().outStream();
|
stdout = std.io.bufferedOutStream(std.io.getStdOut().outStream());
|
||||||
|
|
||||||
// Read the configuration, if any.
|
// Read the configuration, if any.
|
||||||
const config_parse_options = std.json.ParseOptions{ .allocator = allocator };
|
const config_parse_options = std.json.ParseOptions{ .allocator = allocator };
|
||||||
|
Loading…
Reference in New Issue
Block a user