Advertisement
Guest User

Untitled

a guest
Apr 26th, 2020
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. const std = @import("std");
  2.  
  3. pub const io_mode = .evented;
  4.  
  5. const allocator = std.heap.page_allocator;
  6.  
  7. pub fn main() anyerror!void {
  8. var server = std.net.StreamServer.init(.{});
  9. defer server.deinit();
  10.  
  11. try server.listen(std.net.Address.parseIp("127.0.0.1", 1883) catch unreachable);
  12. std.debug.warn("Listening at {}\n", .{server.listen_address});
  13.  
  14. while (true) {
  15. const client = try allocator.create(Client);
  16. client.* = Client{
  17. .conn = try server.accept(),
  18. .handle_frame = async client.handle(),
  19. };
  20. }
  21. }
  22.  
  23. const Client = struct {
  24. conn: std.net.StreamServer.Connection,
  25. handle_frame: @Frame(handle),
  26.  
  27. fn handle(self: *Client) !void {
  28. // Close connection once we are donw with it
  29. defer self.conn.file.close();
  30.  
  31. // Open TCP socket towards MQTT borker
  32. const brokerSocket = try std.net.tcpConnectToAddress(std.net.Address.parseIp("127.0.0.1", 1884) catch unreachable);
  33. defer brokerSocket.close();
  34.  
  35. // Read from MQTT client and write to MQTT broker
  36. try pipe(self.conn.file, brokerSocket);
  37.  
  38. // Read from MQTT broker and write to MQTT client
  39. try pipe(brokerSocket, self.conn.file);
  40. }
  41. };
  42.  
  43. fn pipe(in: std.fs.File, out: std.fs.File) !void {
  44. std.debug.warn("HELLO\n", .{});
  45.  
  46. var buf: [256]u8 = undefined;
  47. var len: usize = 0;
  48. while (true) {
  49. std.debug.warn("Enter while\n", .{});
  50. len = try in.readAll(&buf);
  51.  
  52. std.debug.warn("Read len = {}\n", .{len});
  53.  
  54. try out.writeAll(buf[0..len]);
  55.  
  56. std.debug.warn("Wrote stuff\n", .{});
  57.  
  58. if (len < buf.len) {
  59. std.debug.warn("len = {}, buf.len = {}", .{len, buf.len});
  60. break;
  61. }
  62. }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement