Upgrade the logger component
[master-thesis.git] / Parasitemia / Logger / Listeners.fs
diff --git a/Parasitemia/Logger/Listeners.fs b/Parasitemia/Logger/Listeners.fs
new file mode 100644 (file)
index 0000000..8c5c835
--- /dev/null
@@ -0,0 +1,32 @@
+namespace Logger
+
+open System.Collections.Generic
+
+open Logger.Types
+
+type internal Listeners () =
+    let monitor = obj ()
+
+    let listeners = List<IListener> ()
+
+    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