File: netplex_mbox.mli

package info (click to toggle)
ocamlnet 4.1.2-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 51,764 kB
  • ctags: 16,446
  • sloc: ml: 148,419; ansic: 10,989; sh: 1,885; makefile: 1,355
file content (64 lines) | stat: -rw-r--r-- 1,832 bytes parent folder | download | duplicates (7)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
(* $Id$ *)

(** Netplex message boxes *)

(** This plugin implements a message box, following a simple model:
    Receivers wait until messages are put into the box. Senders
    wait until the box is free again.

    This is actually an extension of {!Netplex_sharedvar}, and the
    same caveats apply.
 *)

open Netplex_types

val plugin : plugin
  (** To enable message boxes, call the controller's [add_plugin] method
      with this object as argument. This can e.g. be done in the
      [post_add_hook] of the processor.
   *)

(** How to use this module:

    - Encapsulate the type of the messages:
      {[ module Msg_type = struct type t = <some_type> end ]}

    - Create the box module for this type:
      {[ module Mbox_type = Netplex_mbox.Make_mbox_type(Msg_type) ]}

    - Call functions of this module, e.g.
      {[
let box = Mbox_type.create "my_box"
let msg = Mbox_type.receive box
      ]}
 *)


(** The type of mailboxes [mbox] with messages of type [t] *)
module type MBOX = sig
  type t
    (** The type of messages *)

  type mbox
    (** The type of the mailboxes *)

  val create : string -> mbox
    (** Creates a new mailbox with the passed name, or opens an existing
        mailbox. Names are global to the whole Netplex process system.
     *)

  val send : mbox -> t -> unit
    (** Send a message to this box. If the box is full, it is waited until
        the box is free again. If several senders wait for the box, one
        sender is selected.
     *)

  val receive : mbox -> t
    (** Receive a message: It is waited until a sender puts a message into
        the box. If several receivers wait for the box, one receiver is
        selected.
     *)
end

module Make_mbox_type (T:Netplex_cenv.TYPE) : MBOX with type t = T.t
  (** Create a new mailbox access module for message type [T.t] *)