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:
parent
06c392d6d0
commit
1091fa9ddb
10 changed files with 77 additions and 30 deletions
|
|
@ -8,6 +8,8 @@ lazy val fahrtenbuch = project
|
||||||
)
|
)
|
||||||
.settings(
|
.settings(
|
||||||
scalaVersion := "3.7.1",
|
scalaVersion := "3.7.1",
|
||||||
|
scalacOptions += "-Xfatal-warnings",
|
||||||
|
scalacOptions += "-Wunused:imports",
|
||||||
|
|
||||||
// Tell Scala.js that this is an application with a main method
|
// Tell Scala.js that this is an application with a main method
|
||||||
scalaJSUseMainModuleInitializer := true,
|
scalaJSUseMainModuleInitializer := true,
|
||||||
|
|
|
||||||
2
package-lock.json
generated
2
package-lock.json
generated
|
|
@ -11,7 +11,7 @@
|
||||||
"@mdi/font": "^7.4.47",
|
"@mdi/font": "^7.4.47",
|
||||||
"bulma": "^1.0.4",
|
"bulma": "^1.0.4",
|
||||||
"dexie": "^4.0.10",
|
"dexie": "^4.0.10",
|
||||||
"trystero": "^0.21.0-beta.1"
|
"trystero": "^0.21.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@scala-js/vite-plugin-scalajs": "^1.0.0",
|
"@scala-js/vite-plugin-scalajs": "^1.0.0",
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,6 @@
|
||||||
"@mdi/font": "^7.4.47",
|
"@mdi/font": "^7.4.47",
|
||||||
"bulma": "^1.0.4",
|
"bulma": "^1.0.4",
|
||||||
"dexie": "^4.0.10",
|
"dexie": "^4.0.10",
|
||||||
"trystero": "^0.21.0-beta.1"
|
"trystero": "^0.21.6"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,17 @@
|
||||||
package fahrtenbuch
|
package fahrtenbuch
|
||||||
|
|
||||||
|
import org.getshaka.nativeconverter.NativeConverter
|
||||||
import org.scalablytyped.runtime.StringDictionary
|
import org.scalablytyped.runtime.StringDictionary
|
||||||
import typings.dexie.mod.Dexie
|
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 typings.dexie.mod.Observable
|
||||||
import com.raquo.airstream.core.Signal
|
import typings.dexie.mod.Table
|
||||||
import com.raquo.airstream.core.EventStream
|
import typings.dexie.mod.liveQuery
|
||||||
|
|
||||||
|
import scala.concurrent.ExecutionContext.Implicits.global
|
||||||
|
import scala.concurrent.Future
|
||||||
|
import scala.scalajs.js
|
||||||
|
|
||||||
|
import model.Entry
|
||||||
|
|
||||||
object DexieDB {
|
object DexieDB {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,14 @@
|
||||||
package fahrtenbuch
|
package fahrtenbuch
|
||||||
|
|
||||||
import com.raquo.laminar.api.L.{*, given}
|
import com.raquo.laminar.api.L.*
|
||||||
import com.raquo.laminar.api.features.unitArrows
|
|
||||||
import fahrtenbuch.DexieDB.entriesObservable
|
import fahrtenbuch.DexieDB.entriesObservable
|
||||||
import org.scalajs.dom
|
import org.scalajs.dom
|
||||||
import rdts.base.Uid
|
|
||||||
|
|
||||||
import scala.concurrent.ExecutionContext.Implicits.global
|
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.Failure
|
||||||
import scala.util.Success
|
import scala.util.Success
|
||||||
|
|
||||||
|
import model.Entry
|
||||||
import components.AppComponent
|
import components.AppComponent
|
||||||
|
|
||||||
@main
|
@main
|
||||||
|
|
|
||||||
53
src/main/scala/fahrtenbuch/Networking.scala
Normal file
53
src/main/scala/fahrtenbuch/Networking.scala
Normal 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()
|
||||||
|
)
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
package fahrtenbuch.components
|
package fahrtenbuch.components
|
||||||
|
|
||||||
import com.raquo.laminar.api.L.{*, given}
|
import com.raquo.laminar.api.L.*
|
||||||
import com.raquo.laminar.api.features.unitArrows
|
import fahrtenbuch.model.Entry
|
||||||
import fahrtenbuch.Entry
|
|
||||||
import fahrtenbuch.Main.allEntries
|
|
||||||
import fahrtenbuch.Main.entryEditBus
|
import fahrtenbuch.Main.entryEditBus
|
||||||
import rdts.base.Uid
|
import rdts.base.Uid
|
||||||
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package fahrtenbuch.components
|
package fahrtenbuch.components
|
||||||
import fahrtenbuch.Entry
|
import fahrtenbuch.model.Entry
|
||||||
import com.raquo.laminar.nodes.ReactiveHtmlElement
|
import com.raquo.laminar.nodes.ReactiveHtmlElement
|
||||||
import org.scalajs.dom.HTMLTableRowElement
|
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 com.raquo.laminar.api.features.unitArrows
|
||||||
import rdts.base.Uid
|
import rdts.base.Uid
|
||||||
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
package fahrtenbuch.components
|
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 com.raquo.laminar.api.features.unitArrows
|
||||||
import fahrtenbuch.Entry
|
|
||||||
import fahrtenbuch.Main.entryEditBus
|
import fahrtenbuch.Main.entryEditBus
|
||||||
|
import fahrtenbuch.model.Entry
|
||||||
import rdts.base.Uid
|
import rdts.base.Uid
|
||||||
|
|
||||||
class NewEntryInput(showNewEntryField: Var[Boolean]):
|
class NewEntryInput(showNewEntryField: Var[Boolean]):
|
||||||
|
|
@ -1,13 +1,7 @@
|
||||||
package fahrtenbuch
|
package fahrtenbuch.model
|
||||||
|
|
||||||
import rdts.base.Uid
|
import rdts.base.Uid
|
||||||
import scala.scalajs.js.Date
|
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.NativeConverter
|
||||||
import org.getshaka.nativeconverter.ParseState
|
import org.getshaka.nativeconverter.ParseState
|
||||||
import scala.scalajs.js
|
import scala.scalajs.js
|
||||||
Loading…
Reference in a new issue