diff --git a/zig-impl/src/context.zig b/zig-impl/src/context.zig index 9356ad4..69f7a11 100644 --- a/zig-impl/src/context.zig +++ b/zig-impl/src/context.zig @@ -137,7 +137,7 @@ pub const Context = struct { // content: target service name;${IPC_NETWORK} // example: pong;pong tls://example.com:8998/pong - var m = try Message.init (ipcdfd, Message.Type.LOOKUP, allocator, lookupfbs.getWritten()); + var m = try Message.init (ipcdfd, allocator, lookupfbs.getWritten()); try self.write (m); // Read LOOKUP response @@ -310,7 +310,7 @@ pub const Context = struct { // Wait an event. pub fn wait_event(self: *Self) !Event { - var current_event: Event = Event.init(Event.Type.NOT_SET, 0, 0, null); + var current_event: Event = Event.init(Event.Type.ERROR, 0, 0, null); var wait_duration: i32 = -1; // -1 == unlimited if (self.timer) |t| { wait_duration = t; } @@ -389,9 +389,6 @@ pub const Context = struct { }; if (maybe_message) |m| { - if (m.t == .LOOKUP) { - return Event.init(Event.Type.LOOKUP, i, fd.fd, m); - } return Event.init(Event.Type.MESSAGE, i, fd.fd, m); } @@ -505,7 +502,7 @@ pub const Context = struct { // var s = Switch.init(3,8); // var payload = "hello!!"; // // fd type payload -// var m = Message.init(0, Message.Type.DATA, payload); +// var m = Message.init(0, allocator, payload); // // // type index origin message // var e = Event.init(Event.Type.CONNECTION, 5, 8, &m); @@ -610,7 +607,7 @@ const ConnectThenSendMessageThread = struct { var message_writer = message_fbs.writer(); // 'fd' parameter is not taken into account here (no loop) - var m = try Message.init(0, Message.Type.DATA, allocator, "Hello world!"); + var m = try Message.init(0, allocator, "Hello world!"); defer m.deinit(); _ = try m.write(message_writer); diff --git a/zig-impl/src/event.zig b/zig-impl/src/event.zig index e043081..b244b45 100644 --- a/zig-impl/src/event.zig +++ b/zig-impl/src/event.zig @@ -34,14 +34,12 @@ pub const Event = struct { // to it. This is a lookup. pub const Type = enum { - NOT_SET, // Default. TODO: should we keep this? ERROR, // A problem occured. EXTERNAL, // Message received from a non IPC socket. SWITCH, // Message to send to a corresponding fd. CONNECTION, // New user. DISCONNECTION, // User disconnected. MESSAGE, // New message. - LOOKUP, // Client asking for a service through ipcd. TIMER, // Timeout in the poll(2) function. TX, // Message sent. }; @@ -65,7 +63,7 @@ pub const Event = struct { } pub fn clean(self: *Self) void { - self.t = Event.Type.NOT_SET; + self.t = Event.Type.ERROR; self.index = @as(usize,0); self.origin = @as(i32,0); if (self.m) |message| { @@ -89,9 +87,9 @@ test "Event - creation and display" { const allocator = gpa.allocator(); var s = "hello!!"; - var m = try Message.init(1, Message.Type.DATA, allocator, s); // fd type payload + var m = try Message.init(1, allocator, s); // fd type payload defer m.deinit(); var e = Event.init(Event.Type.CONNECTION, 5, 8, m); // type index origin message - try print_eq("event.Event.Type.CONNECTION, origin: 8, index 5, message: [fd: 1, message.Message.Type.DATA, payload: [hello!!]]", e); + try print_eq("event.Event.Type.CONNECTION, origin: 8, index 5, message: [fd: 1, payload: [hello!!]]", e); } diff --git a/zig-impl/src/ipcd.zig b/zig-impl/src/ipcd.zig index 76fdfcd..bc6127d 100644 --- a/zig-impl/src/ipcd.zig +++ b/zig-impl/src/ipcd.zig @@ -103,18 +103,6 @@ fn create_service() !void { }, .MESSAGE => { - if (some_event.m) |m| { - print("New message: {}\n", .{m}); - print("Let's echo it...\n", .{}); - try ctx.schedule(m); - } - else { - print("Error while receiving new message.\n", .{}); - print("Ignoring...\n", .{}); - } - }, - - .LOOKUP => { print("Client asking for a service through ipcd.\n", .{}); if (some_event.m) |m| { print("{}\n", .{m}); @@ -162,7 +150,6 @@ fn create_service() !void { // a message, meaning there is nothing to do. This should be // explicitely warned about. var response = try Message.init(some_event.origin - , Message.Type.ERROR , allocator , "lookup message without data"); try ctx.write(response); @@ -174,11 +161,6 @@ fn create_service() !void { print("Message sent.\n", .{}); }, - .NOT_SET => { - print("Event type not set. Something is wrong, let's suicide.\n", .{}); - break; - }, - .ERROR => { print("A problem occured, event: {}, let's suicide\n", .{some_event}); break; diff --git a/zig-impl/src/message.zig b/zig-impl/src/message.zig index 4028d0c..281db95 100644 --- a/zig-impl/src/message.zig +++ b/zig-impl/src/message.zig @@ -11,14 +11,6 @@ pub const Messages = std.ArrayList(Message); pub const Message = struct { - pub const Type = enum { - SERVER_CLOSE, - ERROR, - DATA, - LOOKUP, - }; - - t: Message.Type, // Internal message type. fd: i32, // File descriptor concerned about this message. payload: []const u8, @@ -26,19 +18,10 @@ pub const Message = struct { const Self = @This(); - // TODO - //pub fn initFromConnection(fd: i32) Self { - // return Self{ - // .t = Message.Type.ERROR, - // .fd = fd, - // .payload = "hello", - // }; - //} - - pub fn init(fd: i32, t: Message.Type + pub fn init(fd: i32 , allocator: std.mem.Allocator , payload: []const u8) !Self { - return Message { .fd = fd, .t = t + return Message { .fd = fd , .allocator = allocator , .payload = try allocator.dupe(u8, payload) }; } @@ -49,34 +32,26 @@ pub const Message = struct { pub fn read(fd: i32, buffer: []const u8, allocator: std.mem.Allocator) !Self { - // var hexbuf: [4000]u8 = undefined; - // var hexfbs = std.io.fixedBufferStream(&hexbuf); - // var hexwriter = hexfbs.writer(); - // try hexdump.hexdump(hexwriter, "Message.read input buffer", buffer); - // print("{s}\n", .{hexfbs.getWritten()}); - var fbs = std.io.fixedBufferStream(buffer); var reader = fbs.reader(); - const msg_type = @intToEnum(Message.Type, try reader.readByte()); const msg_len = try reader.readIntBig(u32); - if (msg_len >= buffer.len) { + if (msg_len >= buffer.len - 4) { return error.wrongMessageLength; } - const msg_payload = buffer[5..5+msg_len]; + const msg_payload = buffer[4..4+msg_len]; - return try Message.init(fd, msg_type, allocator, msg_payload); + return try Message.init(fd, allocator, msg_payload); } pub fn write(self: Self, writer: anytype) !usize { - try writer.writeByte(@enumToInt(self.t)); try writer.writeIntBig(u32, @truncate(u32, self.payload.len)); - return 5 + try writer.write(self.payload); + return 4 + try writer.write(self.payload); } pub fn format(self: Self, comptime _: []const u8, _: fmt.FormatOptions, out_stream: anytype) !void { - try fmt.format(out_stream, "fd: {}, {}, payload: [{s}]", - .{self.fd, self.t, self.payload} ); + try fmt.format(out_stream, "fd: {}, payload: [{s}]", + .{self.fd, self.payload} ); } }; @@ -88,10 +63,10 @@ test "Message - creation and display" { const allocator = gpa.allocator(); var s = "hello!!"; - var m = try Message.init(1, Message.Type.DATA, allocator, s); + var m = try Message.init(1, allocator, s); defer m.deinit(); - try print_eq("fd: 1, message.Message.Type.DATA, payload: [hello!!]", m); + try print_eq("fd: 1, payload: [hello!!]", m); } test "Message - read and write" { @@ -103,7 +78,7 @@ test "Message - read and write" { // First, create a message. var s = "hello!!"; - var first_message = try Message.init(1, Message.Type.DATA, allocator, s); + var first_message = try Message.init(1, allocator, s); defer first_message.deinit(); // Test its content. diff --git a/zig-impl/src/pong.zig b/zig-impl/src/pong.zig index 270630c..e0075a1 100644 --- a/zig-impl/src/pong.zig +++ b/zig-impl/src/pong.zig @@ -30,7 +30,7 @@ pub fn main() !u8 { } var pongfd = try ctx.connect_ipc(service_to_contact); - var message = try Message.init(pongfd, Message.Type.DATA, allocator, "bounce me"); + var message = try Message.init(pongfd, allocator, "bounce me"); try ctx.schedule(message); var some_event: ipc.Event = undefined; diff --git a/zig-impl/src/pongd.zig b/zig-impl/src/pongd.zig index 28409a5..85ea0e9 100644 --- a/zig-impl/src/pongd.zig +++ b/zig-impl/src/pongd.zig @@ -60,7 +60,7 @@ fn create_service() !void { try os.sigaction(os.SIG.HUP, &sa, null); var some_event: ipc.Event = undefined; - ctx.timer = 10000; // 10 seconds + ctx.timer = 20000; // 2 seconds var count: u32 = 0; while(! S.should_quit) { some_event = try ctx.wait_event();