Skip to content

Commit

Permalink
add EventSourceObservable factory
Browse files Browse the repository at this point in the history
  • Loading branch information
cornerman committed Jan 29, 2024
1 parent 9b28a1d commit c2e9f1d
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions jsdom/src/main/scala/colibri/jsdom/EventSourceObservable.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package colibri.jsdom

import colibri._
import org.scalajs.dom

object EventSourceObservable {
def apply(url: String): Observable[dom.MessageEvent] =
from(() => new dom.EventSource(url))

def apply(url: String, eventSourceInit: dom.EventSourceInit): Observable[dom.MessageEvent] =
from(() => new dom.EventSource(url, eventSourceInit))

def from(createSource: () => dom.EventSource): Observable[dom.MessageEvent] = Observable.create { observer =>
val source = createSource()
source.onerror = { ev =>
observer.unsafeOnError(new Exception(s"Failed EventSource (${ev.filename}:${ev.lineno}:${ev.colno}): ${ev.message}"))
}
source.onmessage = observer.unsafeOnNext

Cancelable(source.close)
}
}

0 comments on commit c2e9f1d

Please sign in to comment.