diff --git a/build.sbt b/build.sbt index 124fb00..196544f 100644 --- a/build.sbt +++ b/build.sbt @@ -8,6 +8,8 @@ lazy val fahrtenbuch = project ) .settings( scalaVersion := "3.7.1", + scalacOptions += "-Xfatal-warnings", + scalacOptions += "-Wunused:imports", // Tell Scala.js that this is an application with a main method scalaJSUseMainModuleInitializer := true, diff --git a/package-lock.json b/package-lock.json index 5b01eee..8d0b26a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@mdi/font": "^7.4.47", "bulma": "^1.0.4", "dexie": "^4.0.10", - "trystero": "^0.21.0-beta.1" + "trystero": "^0.21.6" }, "devDependencies": { "@scala-js/vite-plugin-scalajs": "^1.0.0", diff --git a/package.json b/package.json index f467666..e05e10b 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,6 @@ "@mdi/font": "^7.4.47", "bulma": "^1.0.4", "dexie": "^4.0.10", - "trystero": "^0.21.0-beta.1" + "trystero": "^0.21.6" } } diff --git a/src/main/scala/fahrtenbuch/Database.scala b/src/main/scala/fahrtenbuch/Database.scala index 72db3da..95091c9 100644 --- a/src/main/scala/fahrtenbuch/Database.scala +++ b/src/main/scala/fahrtenbuch/Database.scala @@ -1,15 +1,17 @@ package fahrtenbuch +import org.getshaka.nativeconverter.NativeConverter import org.scalablytyped.runtime.StringDictionary import typings.dexie.mod.Dexie -import scala.concurrent.Future -import typings.dexie.mod.{Table, liveQuery} -import scala.scalajs.js -import org.getshaka.nativeconverter.NativeConverter -import scala.concurrent.ExecutionContext.Implicits.global import typings.dexie.mod.Observable -import com.raquo.airstream.core.Signal -import com.raquo.airstream.core.EventStream +import typings.dexie.mod.Table +import typings.dexie.mod.liveQuery + +import scala.concurrent.ExecutionContext.Implicits.global +import scala.concurrent.Future +import scala.scalajs.js + +import model.Entry object DexieDB { diff --git a/src/main/scala/fahrtenbuch/Main.scala b/src/main/scala/fahrtenbuch/Main.scala index d4cc0e1..a0fada2 100644 --- a/src/main/scala/fahrtenbuch/Main.scala +++ b/src/main/scala/fahrtenbuch/Main.scala @@ -1,18 +1,14 @@ package fahrtenbuch -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.api.features.unitArrows +import com.raquo.laminar.api.L.* import fahrtenbuch.DexieDB.entriesObservable import org.scalajs.dom -import rdts.base.Uid import scala.concurrent.ExecutionContext.Implicits.global -import scala.scalajs.js -import scala.scalajs.js.Date -import scala.scalajs.js.annotation.* import scala.util.Failure import scala.util.Success +import model.Entry import components.AppComponent @main diff --git a/src/main/scala/fahrtenbuch/Networking.scala b/src/main/scala/fahrtenbuch/Networking.scala new file mode 100644 index 0000000..69c7018 --- /dev/null +++ b/src/main/scala/fahrtenbuch/Networking.scala @@ -0,0 +1,53 @@ +package fahrtenbuch + +import com.raquo.laminar.api.L.* +import org.scalajs.dom.RTCConfiguration +import org.scalajs.dom.RTCIceServer +import org.scalajs.dom.RTCPeerConnection +import typings.trystero.mod.BaseRoomConfig +import typings.trystero.mod.RelayConfig +import typings.trystero.mod.Room +import typings.trystero.mod.TurnConfig +import typings.trystero.mod.joinRoom +import typings.trystero.mod.selfId + +import scala.scalajs.js + +object Trystero: + private val eturn = new RTCIceServer: + urls = js.Array( + "stun:relay1.expressturn.com:443", + "turn:relay1.expressturn.com:3478", + "turn:relay1.expressturn.com:443" + ) + username = "efMS8M021S1G8NJ8J7" + credential = "qrBXTlhKtCJDykOK" + + private val tturn = new RTCIceServer: + urls = "stun:stun.t-online.de:3478" + + private val rtcConf = new RTCConfiguration: + iceServers = js.Array(eturn, tturn) + + private object MyConfig extends RelayConfig, BaseRoomConfig, TurnConfig { + var appId = "fahrtenbuch_149520" + rtcConfig = rtcConf + } + + // Public API + val room: Room = joinRoom(MyConfig, "fahrtenbuch") + val peerList: Var[List[(String, RTCPeerConnection)]] = Var(List.empty) + val userId: Var[String] = Var(selfId) + + // listen for incoming messages + def updatePeers(): Unit = + peerList.set(room.getPeers().toList) + println(s"my peer ID is $selfId") + room.onPeerJoin(peerId => + println(s"$peerId joined") + updatePeers() + ) + room.onPeerLeave(peerId => + println(s"$peerId left") + updatePeers() + ) diff --git a/src/main/scala/fahrtenbuch/Components/AppComponent.scala b/src/main/scala/fahrtenbuch/components/AppComponent.scala similarity index 91% rename from src/main/scala/fahrtenbuch/Components/AppComponent.scala rename to src/main/scala/fahrtenbuch/components/AppComponent.scala index 2f101cb..4d6b149 100644 --- a/src/main/scala/fahrtenbuch/Components/AppComponent.scala +++ b/src/main/scala/fahrtenbuch/components/AppComponent.scala @@ -1,9 +1,7 @@ package fahrtenbuch.components -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.api.features.unitArrows -import fahrtenbuch.Entry -import fahrtenbuch.Main.allEntries +import com.raquo.laminar.api.L.* +import fahrtenbuch.model.Entry import fahrtenbuch.Main.entryEditBus import rdts.base.Uid diff --git a/src/main/scala/fahrtenbuch/Components/EntryComponent.scala b/src/main/scala/fahrtenbuch/components/EntryComponent.scala similarity index 97% rename from src/main/scala/fahrtenbuch/Components/EntryComponent.scala rename to src/main/scala/fahrtenbuch/components/EntryComponent.scala index 435403b..5794c4c 100644 --- a/src/main/scala/fahrtenbuch/Components/EntryComponent.scala +++ b/src/main/scala/fahrtenbuch/components/EntryComponent.scala @@ -1,8 +1,8 @@ package fahrtenbuch.components -import fahrtenbuch.Entry +import fahrtenbuch.model.Entry import com.raquo.laminar.nodes.ReactiveHtmlElement import org.scalajs.dom.HTMLTableRowElement -import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* import com.raquo.laminar.api.features.unitArrows import rdts.base.Uid diff --git a/src/main/scala/fahrtenbuch/Components/NewEntryInput.scala b/src/main/scala/fahrtenbuch/components/NewEntryInput.scala similarity index 93% rename from src/main/scala/fahrtenbuch/Components/NewEntryInput.scala rename to src/main/scala/fahrtenbuch/components/NewEntryInput.scala index 2e04eba..26b1e0a 100644 --- a/src/main/scala/fahrtenbuch/Components/NewEntryInput.scala +++ b/src/main/scala/fahrtenbuch/components/NewEntryInput.scala @@ -1,9 +1,11 @@ package fahrtenbuch.components -import com.raquo.laminar.api.L.{*, given} +//import com.raquo.laminar.api.L.{*, given} +import com.raquo.laminar.api.L.* + import com.raquo.laminar.api.features.unitArrows -import fahrtenbuch.Entry import fahrtenbuch.Main.entryEditBus +import fahrtenbuch.model.Entry import rdts.base.Uid class NewEntryInput(showNewEntryField: Var[Boolean]): diff --git a/src/main/scala/fahrtenbuch/Entry.scala b/src/main/scala/fahrtenbuch/model/Entry.scala similarity index 74% rename from src/main/scala/fahrtenbuch/Entry.scala rename to src/main/scala/fahrtenbuch/model/Entry.scala index 6f11c1d..ead3d27 100644 --- a/src/main/scala/fahrtenbuch/Entry.scala +++ b/src/main/scala/fahrtenbuch/model/Entry.scala @@ -1,13 +1,7 @@ -package fahrtenbuch +package fahrtenbuch.model import rdts.base.Uid import scala.scalajs.js.Date -import com.raquo.laminar.api.L.{*, given} -import com.raquo.laminar.api.features.unitArrows -import org.scalajs.dom.HTMLTableRowElement -import com.raquo.laminar.nodes.ReactiveHtmlElement -import scala.annotation.threadUnsafe -import fahrtenbuch.Main.entryEditBus import org.getshaka.nativeconverter.NativeConverter import org.getshaka.nativeconverter.ParseState import scala.scalajs.js