summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/storage/Backing.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/storage/Backing.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/storage/Backing.kt52
1 files changed, 32 insertions, 20 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/storage/Backing.kt b/src/main/kotlin/io/dico/parcels2/storage/Backing.kt
index 88ee5fd..b658d10 100644
--- a/src/main/kotlin/io/dico/parcels2/storage/Backing.kt
+++ b/src/main/kotlin/io/dico/parcels2/storage/Backing.kt
@@ -1,6 +1,10 @@
package io.dico.parcels2.storage
import io.dico.parcels2.*
+import kotlinx.coroutines.experimental.CoroutineDispatcher
+import kotlinx.coroutines.experimental.Deferred
+import kotlinx.coroutines.experimental.Job
+import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.experimental.channels.SendChannel
import java.util.UUID
@@ -10,41 +14,49 @@ interface Backing {
val isConnected: Boolean
- suspend fun init()
+ val dispatcher: CoroutineDispatcher
- suspend fun shutdown()
+ fun launchJob(job: Backing.() -> Unit): Job
+ fun <T> launchFuture(future: Backing.() -> T): Deferred<T>
- /**
- * This producer function is capable of constantly reading parcels from a potentially infinite sequence,
- * and provide parcel data for it as read from the database.
- */
- suspend fun produceParcelData(channel: SendChannel<DataPair>, parcels: Sequence<ParcelId>)
+ fun <T> openChannel(future: Backing.(SendChannel<T>) -> Unit): ReceiveChannel<T>
- suspend fun produceAllParcelData(channel: SendChannel<DataPair>)
+ fun <T> openChannelForWriting(future: Backing.(T) -> Unit): SendChannel<T>
- suspend fun readParcelData(parcel: ParcelId): ParcelData?
- suspend fun getOwnedParcels(user: ParcelOwner): List<ParcelId>
+ fun init()
- suspend fun getNumParcels(user: ParcelOwner): Int = getOwnedParcels(user).size
+ fun shutdown()
- suspend fun setParcelData(parcel: ParcelId, data: ParcelData?)
+ fun getPlayerUuidForName(name: String): UUID?
- suspend fun setParcelOwner(parcel: ParcelId, owner: ParcelOwner?)
+ fun transmitParcelData(channel: SendChannel<DataPair>, parcels: Sequence<ParcelId>)
- suspend fun setLocalPlayerStatus(parcel: ParcelId, player: UUID, status: AddedStatus)
+ fun transmitAllParcelData(channel: SendChannel<DataPair>)
- suspend fun setParcelAllowsInteractInventory(parcel: ParcelId, value: Boolean)
+ fun readParcelData(parcel: ParcelId): ParcelData?
- suspend fun setParcelAllowsInteractInputs(parcel: ParcelId, value: Boolean)
+ fun getOwnedParcels(user: PlayerProfile): List<ParcelId>
+ fun getNumParcels(user: PlayerProfile): Int = getOwnedParcels(user).size
- suspend fun produceAllGlobalAddedData(channel: SendChannel<AddedDataPair<ParcelOwner>>)
- suspend fun readGlobalAddedData(owner: ParcelOwner): MutableAddedDataMap
+ fun setParcelData(parcel: ParcelId, data: ParcelData?)
- suspend fun setGlobalPlayerStatus(owner: ParcelOwner, player: UUID, status: AddedStatus)
+ fun setParcelOwner(parcel: ParcelId, owner: PlayerProfile?)
-} \ No newline at end of file
+ fun setLocalPlayerStatus(parcel: ParcelId, player: PlayerProfile, status: AddedStatus)
+
+ fun setParcelAllowsInteractInventory(parcel: ParcelId, value: Boolean)
+
+ fun setParcelAllowsInteractInputs(parcel: ParcelId, value: Boolean)
+
+
+ fun transmitAllGlobalAddedData(channel: SendChannel<AddedDataPair<PlayerProfile>>)
+
+ fun readGlobalAddedData(owner: PlayerProfile): MutableAddedDataMap
+
+ fun setGlobalPlayerStatus(owner: PlayerProfile, player: PlayerProfile, status: AddedStatus)
+}