X-Git-Url: http://git.euphorik.ch/?p=master-thesis.git;a=blobdiff_plain;f=Parasitemia%2FLogger%2FListeners.fs;fp=Parasitemia%2FLogger%2FListeners.fs;h=8c5c83524348c20cc909590f4cf622cfac8eadaa;hp=0000000000000000000000000000000000000000;hb=8cf2153bd18919de41745534d3dbf134f085e13c;hpb=6250f10c807301a760b8659f9c00ca6dbbd4c7b7 diff --git a/Parasitemia/Logger/Listeners.fs b/Parasitemia/Logger/Listeners.fs new file mode 100644 index 0000000..8c5c835 --- /dev/null +++ b/Parasitemia/Logger/Listeners.fs @@ -0,0 +1,32 @@ +namespace Logger + +open System.Collections.Generic + +open Logger.Types + +type internal Listeners () = + let monitor = obj () + + let listeners = List () + + member this.Add (listener : IListener) = + lock monitor ( + fun () -> + if not <| listeners.Contains listener then + listeners.Add listener + ) + + member this.Remove (listener : IListener) = + lock monitor ( + fun () -> + listeners.Remove listener |> ignore + ) + + member this.NewEntry (message : Message) = + lock monitor ( + fun () -> + if listeners.Count > 0 then + let header = Utils.formatHeader message + for listener in listeners do + listener.NewEntry message.Severity header message.Message + ) \ No newline at end of file