From 08523fa90a00325441b27d34b3ea968b85727253 Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Fri, 3 Feb 2023 04:06:18 +0100 Subject: [PATCH] Crystal bindings: restructuration. --- .../{authd => authc}/authc.cr | 0 .../{authd => authc}/better-parser.cr | 0 .../crystal/some-crystal-app/src/libauth.cr | 25 ------ .../crystal/some-crystal-app/src/pongd.cr | 38 --------- .../some-crystal-app/src/test-messages.cr | 82 ------------------- .../crystal/some-crystal-app/src/tests.cr | 39 --------- .../test-app.cr => tests/test-bindings.cr} | 2 +- 7 files changed, 1 insertion(+), 185 deletions(-) rename zig-impl/crystal/some-crystal-app/{authd => authc}/authc.cr (100%) rename zig-impl/crystal/some-crystal-app/{authd => authc}/better-parser.cr (100%) delete mode 100644 zig-impl/crystal/some-crystal-app/src/libauth.cr delete mode 100644 zig-impl/crystal/some-crystal-app/src/pongd.cr delete mode 100644 zig-impl/crystal/some-crystal-app/src/test-messages.cr delete mode 100644 zig-impl/crystal/some-crystal-app/src/tests.cr rename zig-impl/crystal/some-crystal-app/{src/test-app.cr => tests/test-bindings.cr} (96%) diff --git a/zig-impl/crystal/some-crystal-app/authd/authc.cr b/zig-impl/crystal/some-crystal-app/authc/authc.cr similarity index 100% rename from zig-impl/crystal/some-crystal-app/authd/authc.cr rename to zig-impl/crystal/some-crystal-app/authc/authc.cr diff --git a/zig-impl/crystal/some-crystal-app/authd/better-parser.cr b/zig-impl/crystal/some-crystal-app/authc/better-parser.cr similarity index 100% rename from zig-impl/crystal/some-crystal-app/authd/better-parser.cr rename to zig-impl/crystal/some-crystal-app/authc/better-parser.cr diff --git a/zig-impl/crystal/some-crystal-app/src/libauth.cr b/zig-impl/crystal/some-crystal-app/src/libauth.cr deleted file mode 100644 index c994dbc..0000000 --- a/zig-impl/crystal/some-crystal-app/src/libauth.cr +++ /dev/null @@ -1,25 +0,0 @@ -require "./message.cr" - -# TODO: -class AuthMessage < IPCMessage::TypedMessage - def to_s - content = String.new(@payload.to_unsafe, @payload.size) - "AUTH MSG: type #{@type} fd #{@fd} bytes #{@payload.size} [#{content}]" - rescue - "AUTH MSG: type #{@type} fd #{@fd} bytes #{@payload.size} [#{@payload}]" - end -end - -module Request - class Auth < AuthMessage - @type = 1 - end -end -module Response - class Auth < AuthMessage - @type = 2 - end -end - -puts Request::Auth.new(5, "hello I'm karchnu").to_s -puts Response::Auth.new(3, "hello okay you're in").to_s diff --git a/zig-impl/crystal/some-crystal-app/src/pongd.cr b/zig-impl/crystal/some-crystal-app/src/pongd.cr deleted file mode 100644 index 063a9de..0000000 --- a/zig-impl/crystal/some-crystal-app/src/pongd.cr +++ /dev/null @@ -1,38 +0,0 @@ -require "./main.cr" - -# In 5 messages: quit -count = 5 - -ipc = IPC.new -fd = ipc.service_init("pong") - -ipc.loop do |event| - case event.type - when LibIPC::EventType::MessageRx - m = event.message - if m.nil? - puts "No message" - else - received = String.new(m.to_unsafe, m.size) - pp! received - ipc.schedule event.fd, m, m.size - end - - when LibIPC::EventType::MessageTx - puts "A message has been sent" - count -= 1 - if count == 0 - exit - end - - when LibIPC::EventType::Connection - puts "A client just connected #JOY" - - when LibIPC::EventType::Disconnection - puts "A client just disconnected #SAD" - - else - puts "Unexpected: #{event.type}" - exit 1 - end -end diff --git a/zig-impl/crystal/some-crystal-app/src/test-messages.cr b/zig-impl/crystal/some-crystal-app/src/test-messages.cr deleted file mode 100644 index 5472246..0000000 --- a/zig-impl/crystal/some-crystal-app/src/test-messages.cr +++ /dev/null @@ -1,82 +0,0 @@ -require "./main.cr" -require "./json.cr" -require "baguette-crystal-base" - -# Context class, so the variables are available everywhere. -class Context - class_property requests = [] of IPC::JSON.class - class_property responses = [] of IPC::JSON.class -end - -class IPC::JSON - def handle - raise "unimplemented" - end -end - -IPC::JSON.message Message, 10 do - property content : String? - property some_number : Int32? - def initialize(@content = nil, @some_number = nil) - end - - def handle - Baguette::Log.info "message received: #{@content}, number: #{@some_number}" - if number = @some_number - ::MessageReceived.new number - 1 - else - ::MessageReceived.new - end - end -end -Context.requests << Message - - -IPC::JSON.message Error, 0 do - property reason : String - def initialize(@reason) - end -end -Context.responses << Error - -IPC::JSON.message MessageReceived, 20 do - property minus_one : Int32? - def initialize(@minus_one = nil) - end - - def handle - Baguette::Log.info "<< MessageReceived (#{@minus_one})" - end -end -Context.responses << MessageReceived - -pp! Context.requests -pp! Context.responses - -request = ::Message.new "hello this is a request", 30 -pp! request -pp! request.to_json -response = request.handle -pp! response -response.handle - -received_raw_message = Bytes[0x0a, 0x68, 0x65, 0x6c, 0x6c, 0x6f] -received_message = IPCMessage::TypedMessage.deserialize received_raw_message -pp! received_message -if received_message.nil? - puts "received message: nil!!!" -else - s = String.new received_message.payload.not_nil! - pp! s - - jpayload = "{\"content\":\"hello this is a request\",\"some_number\":30}" - payload = Bytes.new jpayload.to_unsafe, jpayload.size - received_message.payload = payload - - begin - r = Context.requests.parse_ipc_json(received_message) - pp! r - rescue e - puts "error while parsing JSON: #{e}" - end -end diff --git a/zig-impl/crystal/some-crystal-app/src/tests.cr b/zig-impl/crystal/some-crystal-app/src/tests.cr deleted file mode 100644 index 9ea7f9a..0000000 --- a/zig-impl/crystal/some-crystal-app/src/tests.cr +++ /dev/null @@ -1,39 +0,0 @@ - -def test_without_wait() - ctx = Pointer(Void).null - LibIPC.init (pointerof(ctx)) - fd : Int32 = 0 - LibIPC.connect_service(ctx, pointerof(fd), "pong", 4) - pp! fd - LibIPC.write(ctx, fd, "Hello", 5) - - buflen : LibC::UInt64T = 10 - buffer = uninitialized UInt8[10] - LibIPC.read(ctx, fd, buffer.to_unsafe, pointerof(buflen)) - received = String.new(buffer.to_unsafe, buflen) - pp! received - - LibIPC.deinit (pointerof(ctx)) -end - -def test_with_wait() - ctx = Pointer(Void).null - LibIPC.init (pointerof(ctx)) - fd : Int32 = 0 - LibIPC.connect_service(ctx, pointerof(fd), "pong", 4) - LibIPC.write(ctx, fd, "Hello", 5) - - buflen : LibC::UInt64T = 10 - buffer = uninitialized UInt8[10] - eventtype : UInt8 = 0 - index : LibC::UInt64T = 0 - - LibIPC.timer(ctx, 2000) # Wait at most 2 seconds. - LibIPC.wait(ctx, pointerof(eventtype), pointerof(index), pointerof(fd), buffer.to_unsafe, pointerof(buflen)) - - #pp! LibIPC::EventType.new(eventtype), fd, index, buflen - received = String.new(buffer.to_unsafe, buflen) - pp! received - - LibIPC.deinit (pointerof(ctx)) -end diff --git a/zig-impl/crystal/some-crystal-app/src/test-app.cr b/zig-impl/crystal/some-crystal-app/tests/test-bindings.cr similarity index 96% rename from zig-impl/crystal/some-crystal-app/src/test-app.cr rename to zig-impl/crystal/some-crystal-app/tests/test-bindings.cr index 400fe16..f37366a 100644 --- a/zig-impl/crystal/some-crystal-app/src/test-app.cr +++ b/zig-impl/crystal/some-crystal-app/tests/test-bindings.cr @@ -1,4 +1,4 @@ -require "./some-crystal-app.cr" +require "../main.cr" def test_high_level ipc = IPC.new