Bindings: first draft (context init & deinit).
parent
a6cfa88f79
commit
a8224c1cf9
|
@ -1,12 +1,27 @@
|
||||||
const Builder = @import("std").build.Builder;
|
const std = @import("std");
|
||||||
|
|
||||||
pub fn build(b: *Builder) void {
|
const build_dir = "build";
|
||||||
const mode = b.standardReleaseOptions();
|
|
||||||
const lib = b.addStaticLibrary("ipc", "src/main.zig");
|
pub fn build(b: *std.build.Builder) void {
|
||||||
|
// Standard release options allow the person running `zig build` to select
|
||||||
|
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
|
||||||
|
// const mode = b.standardReleaseOptions();
|
||||||
|
const mode = std.builtin.Mode.Debug;
|
||||||
|
// const mode = std.builtin.Mode.ReleaseSmall;
|
||||||
|
|
||||||
|
const lib = b.addStaticLibrary("ipc", "src/bindings.zig");
|
||||||
|
lib.setOutputDir(build_dir);
|
||||||
|
lib.linkLibC();
|
||||||
lib.setBuildMode(mode);
|
lib.setBuildMode(mode);
|
||||||
lib.install();
|
lib.install();
|
||||||
|
|
||||||
var main_tests = b.addTest("src/main.zig");
|
const solib = b.addSharedLibrary("ipc", "src/bindings.zig", b.version(0, 1, 0));
|
||||||
|
solib.setOutputDir(build_dir);
|
||||||
|
solib.linkLibC();
|
||||||
|
solib.setBuildMode(mode);
|
||||||
|
solib.install();
|
||||||
|
|
||||||
|
const main_tests = b.addTest("src/main.zig");
|
||||||
main_tests.setBuildMode(mode);
|
main_tests.setBuildMode(mode);
|
||||||
|
|
||||||
const test_step = b.step("test", "Run library tests");
|
const test_step = b.step("test", "Run library tests");
|
||||||
|
|
|
@ -183,11 +183,8 @@ pub const Context = struct {
|
||||||
return error.IndexNotFound;
|
return error.IndexNotFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the new fd. Can be useful to the caller.
|
/// Connect to the service directly, without reaching IPCd first.
|
||||||
pub fn connect(self: *Self, path: []const u8) !i32 {
|
/// Return the connection FD.
|
||||||
return self.connect_ (Connection.Type.IPC, path);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn connect_service (self: *Self, service_name: []const u8) !i32 {
|
pub fn connect_service (self: *Self, service_name: []const u8) !i32 {
|
||||||
var buffer: [1000]u8 = undefined;
|
var buffer: [1000]u8 = undefined;
|
||||||
var fbs = std.io.fixedBufferStream(&buffer);
|
var fbs = std.io.fixedBufferStream(&buffer);
|
||||||
|
@ -196,9 +193,11 @@ pub const Context = struct {
|
||||||
try self.server_path(service_name, writer);
|
try self.server_path(service_name, writer);
|
||||||
var path = fbs.getWritten();
|
var path = fbs.getWritten();
|
||||||
|
|
||||||
return self.connect(path);
|
return self.connect_ (Connection.Type.IPC, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tries to connect to IPCd first, then the service (if needed).
|
||||||
|
/// Return the connection FD.
|
||||||
pub fn connect_ipc (self: *Self, service_name: []const u8) !i32 {
|
pub fn connect_ipc (self: *Self, service_name: []const u8) !i32 {
|
||||||
// First, try ipcd.
|
// First, try ipcd.
|
||||||
if (try self.connect_ipcd (service_name, Connection.Type.IPC)) |fd| {
|
if (try self.connect_ipcd (service_name, Connection.Type.IPC)) |fd| {
|
||||||
|
@ -217,7 +216,7 @@ pub const Context = struct {
|
||||||
try self.add_ (newcon, newfd);
|
try self.add_ (newcon, newfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn accept_new_client(self: *Self, event: *Event, server_index: usize) !void {
|
fn accept_new_client(self: *Self, event: *Event, server_index: usize) !void {
|
||||||
// net.StreamServer
|
// net.StreamServer
|
||||||
var serverfd = self.pollfd.items[server_index].fd;
|
var serverfd = self.pollfd.items[server_index].fd;
|
||||||
var path = self.connections.items[server_index].path orelse return error.ServerWithNoPath;
|
var path = self.connections.items[server_index].path orelse return error.ServerWithNoPath;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -12,6 +13,9 @@ int main(void) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf ("Context initiated.\n");
|
||||||
|
|
||||||
|
#if 0
|
||||||
printf ("Connect to a 'pong' service.\n");
|
printf ("Connect to a 'pong' service.\n");
|
||||||
ret = ipc_connect_service (ctx, &servicefd, "pong");
|
ret = ipc_connect_service (ctx, &servicefd, "pong");
|
||||||
|
|
||||||
|
@ -47,6 +51,13 @@ int main(void) {
|
||||||
|
|
||||||
message[size] = '\0';
|
message[size] = '\0';
|
||||||
printf ("Response: %s.\n", message);
|
printf ("Response: %s.\n", message);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
printf ("Deinit context\n");
|
||||||
|
ipc_context_deinit (ctx);
|
||||||
|
|
||||||
|
free(ctx);
|
||||||
|
|
||||||
|
printf ("Context freed.\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue