core hello world / directory.ml

Diff from to

directory.ml

   val subscribe : t -> Message.t Pipe.Reader.t
   val num_subscribers : t -> int
   val last_message : t -> Message.t
+  val clear : t -> unit
 end = struct
   type t = { mutable last_message: Message.t;
              mutable subscribers: Message.t Pipe.Writer.t list;
       List.filter t.subscribers ~f:(fun pipe ->
         not (Pipe.is_closed pipe))
 
+  let clear t =
+    List.iter t.subscribers ~f:Pipe.close;
+    clear_closed t
+
   let publish t msg =
     clear_closed t;
     t.last_message <- msg;
 
 let create () = Topic.Table.create ()
 
+let clear_topic t topic =
+  match Hashtbl.find t topic with
+  | None -> ()
+  | Some s -> Topic_pub.clear s
+
 let publish t message =
   let s =
     Hashtbl.find_or_add t message.Message.topic
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.