package ocluster-api

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file registration.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
open Capnp_rpc_lwt

let local ~register =
  let module X = Raw.Service.Registration in
  X.local @@ object
    inherit X.service

    method register_impl params release_param_caps =
      let open X.Register in
      let name = Params.name_get params in
      let capacity = Params.capacity_get_int_exn params in
      let worker = Params.worker_get params in
      release_param_caps ();
      match worker with
      | None -> Service.fail "Missing worker argument!"
      | Some worker ->
        match register ~name ~capacity worker with
        | Error `Name_taken -> Service.fail "Worker already registered!"
        | Ok queue ->
          let response, results = Service.Response.create Results.init_pointer in
          Results.queue_set results (Some queue);
          Capability.dec_ref queue;
          Service.return response
  end

module X = Raw.Client.Registration

type t = X.t Capability.t

let register t ~name ~capacity worker =
  let open X.Register in
  let request, params = Capability.Request.create Params.init_pointer in
  Params.name_set params name;
  Params.worker_set params (Some worker);
  Params.capacity_set_int_exn params capacity;
  Capability.call_for_caps t method_id request Results.queue_get_pipelined
OCaml

Innovation. Community. Security.