Update dependencies and add new p2p networking code

The changes include upgrading trystero, adding compile options,
implementing WebRTC-based networking, and reorganizing files into better
packages.
This commit is contained in:
Julian 2025-07-07 22:13:09 +02:00
parent 06c392d6d0
commit 1091fa9ddb
10 changed files with 77 additions and 30 deletions

View file

@ -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,

2
package-lock.json generated
View file

@ -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",

View file

@ -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"
}
}

View file

@ -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 {

View file

@ -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

View file

@ -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()
)

View file

@ -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

View file

@ -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

View file

@ -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]):

View file

@ -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