class FileStorage::Request JSONIPC.request Upload, 20 do property mid : String # autogenerated property file : FileInfo def initialize(@file : FileInfo) @mid = UUID.random.to_s end def handle(filestoraged : FileStorage::Service, event : IPC::Event::Events) user = altideald.get_logged_user event raise Exception.new "unauthorized" if user.nil? # FIXME: Maybe this should be moved to FileStorage::Service fd = event.connection.fd user_data = filestoraged.get_user_data user.uid filestoraged.storage.upload self, event rescue e return Response::Error.new @mid, "unauthorized" end end FileStorage.requests << Upload end class FileStorage::Client def upload(token : String) request = FileStorage::Request::Upload.new token send request response = parse_message [ FileStorage::Response::Upload, FileStorage::Response::Error ], read case response when FileStorage::Response::Upload when FileStorage::Response::Error raise "Upload request failed: #{response.reason}" end response end end class FileStorage::Response JSONIPC.request Upload, 20 do property mid : String def initialize(@mid) end end JSONIPC.request Responses, 100 do include JSON::Serializable property mid : String property responses : Array(Response) # a response for each request property response : String property reason : String? def initialize(@mid, @response, @responses, @reason = nil) end end end