diff --git a/zig-impl/crystal/some-crystal-app/authd/libclient.cr b/zig-impl/crystal/some-crystal-app/authd/libclient.cr index 6318549..f96503e 100644 --- a/zig-impl/crystal/some-crystal-app/authd/libclient.cr +++ b/zig-impl/crystal/some-crystal-app/authd/libclient.cr @@ -1,12 +1,25 @@ require "../src/json" +require "json" module AuthD class Client < IPC property key : String + property server_fd : Int32 = -1 def initialize super @key = "" + fd = self.connect "auth" + if fd.nil? + raise "couldn't connect to 'auth' IPC service" + end + @server_fd = fd + end + + def read + slice = self.read @server_fd + m = IPCMessage::TypedMessage.deserialize slice + m.not_nil! end def get_token?(login : String, password : String) : String? @@ -45,8 +58,14 @@ module AuthD end end + def send_now(msg : IPC::JSON) + m = IPCMessage::TypedMessage.new msg.type.to_u8, msg.to_json + write @server_fd, m + end + def send_now(type : Request::Type, payload) - send_now @server_fd, type.value.to_u8, payload + m = IPCMessage::TypedMessage.new type.value.to_u8, payload + write @server_fd, m end def decode_token(token) @@ -61,7 +80,7 @@ module AuthD def add_user(login : String, password : String, email : String?, phone : String?, - profile : Hash(String, JSON::Any)?) : ::AuthD::User::Public | Exception + profile : Hash(String, ::JSON::Any)?) : ::AuthD::User::Public | Exception send_now Request::AddUser.new @key, login, password, email, phone, profile @@ -126,7 +145,7 @@ module AuthD password : String, email : String?, phone : String?, - profile : Hash(String, JSON::Any)?) : ::AuthD::User::Public? + profile : Hash(String, ::JSON::Any)?) : ::AuthD::User::Public? send_now Request::Register.new login, password, email, phone, profile response = AuthD.responses.parse_ipc_json read diff --git a/zig-impl/crystal/some-crystal-app/makefile b/zig-impl/crystal/some-crystal-app/makefile index 981f587..a58f9da 100644 --- a/zig-impl/crystal/some-crystal-app/makefile +++ b/zig-impl/crystal/some-crystal-app/makefile @@ -27,6 +27,12 @@ build-authd: run-authd: LD_LIBRARY_PATH=$(LDPATH) ./bin/authd +build-authc: + CRYSTAL_LIBRARY_PATH=$(LDPATH) shards build authc + +run-authc: + LD_LIBRARY_PATH=$(LDPATH) ./bin/authc + run-test: crystal run src/libauth.cr diff --git a/zig-impl/crystal/some-crystal-app/shard.yml b/zig-impl/crystal/some-crystal-app/shard.yml index 86e0ddf..3b5a23d 100644 --- a/zig-impl/crystal/some-crystal-app/shard.yml +++ b/zig-impl/crystal/some-crystal-app/shard.yml @@ -11,6 +11,8 @@ targets: main: src/pongd.cr authd: main: authd/main.cr + authc: + main: authd/authc.cr crystal: 1.7.1 diff --git a/zig-impl/crystal/some-crystal-app/src/high-level-bindings.cr b/zig-impl/crystal/some-crystal-app/src/high-level-bindings.cr index 33c3606..8fa5a39 100644 --- a/zig-impl/crystal/some-crystal-app/src/high-level-bindings.cr +++ b/zig-impl/crystal/some-crystal-app/src/high-level-bindings.cr @@ -40,7 +40,7 @@ class IPC fd end - def connect(name : String) : Int + def connect(name : String) : Int32 fd = uninitialized Int32 if LibIPC.connect_service(@context, pointerof(fd), name, name.size) != 0 raise "oh noes, 'connect_service' iz brkn" @@ -66,6 +66,13 @@ class IPC self.write(fd, buffer.to_unsafe, buffer.size.to_u64) end + def read(fd : Int32) : Slice(UInt8) + buffer : Bytes = Bytes.new 2000000 + size = buffer.size.to_u64 + LibIPC.read(@context, fd, buffer.to_unsafe, pointerof(size)) + buffer[0..size] + end + def schedule(fd : Int32, string : String) self.schedule(fd, string.to_unsafe, string.size.to_u64) end @@ -96,7 +103,7 @@ class IPC end end - def close_all() + def close if LibIPC.close_all(@context) != 0 raise "Oh noes, 'close all' iz brkn" end