diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/storage/Backing.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/storage/Backing.kt | 55 |
1 files changed, 39 insertions, 16 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..bb4cf33 100644 --- a/src/main/kotlin/io/dico/parcels2/storage/Backing.kt +++ b/src/main/kotlin/io/dico/parcels2/storage/Backing.kt @@ -1,6 +1,12 @@ package io.dico.parcels2.storage import io.dico.parcels2.* +import kotlinx.coroutines.experimental.CoroutineDispatcher +import kotlinx.coroutines.experimental.CoroutineScope +import kotlinx.coroutines.experimental.Deferred +import kotlinx.coroutines.experimental.Job +import kotlinx.coroutines.experimental.channels.ProducerScope +import kotlinx.coroutines.experimental.channels.ReceiveChannel import kotlinx.coroutines.experimental.channels.SendChannel import java.util.UUID @@ -10,41 +16,58 @@ interface Backing { val isConnected: Boolean - suspend fun init() + fun launchJob(job: Backing.() -> Unit): Job - suspend fun shutdown() + fun <T> launchFuture(future: Backing.() -> T): Deferred<T> + + fun <T> openChannel(future: Backing.(SendChannel<T>) -> Unit): ReceiveChannel<T> + + + fun init() + + fun shutdown() /** * 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 produceParcelData(channel: SendChannel<DataPair>, parcels: Sequence<ParcelId>) + + fun produceAllParcelData(channel: SendChannel<DataPair>) + + fun readParcelData(parcel: ParcelId): ParcelData? + + fun getOwnedParcels(user: ParcelOwner): List<ParcelId> + + fun getNumParcels(user: ParcelOwner): Int = getOwnedParcels(user).size + - suspend fun produceAllParcelData(channel: SendChannel<DataPair>) + fun setParcelData(parcel: ParcelId, data: ParcelData?) - suspend fun readParcelData(parcel: ParcelId): ParcelData? + fun setParcelOwner(parcel: ParcelId, owner: ParcelOwner?) - suspend fun getOwnedParcels(user: ParcelOwner): List<ParcelId> + fun setLocalPlayerStatus(parcel: ParcelId, player: UUID, status: AddedStatus) - suspend fun getNumParcels(user: ParcelOwner): Int = getOwnedParcels(user).size + fun setParcelAllowsInteractInventory(parcel: ParcelId, value: Boolean) + fun setParcelAllowsInteractInputs(parcel: ParcelId, value: Boolean) - suspend fun setParcelData(parcel: ParcelId, data: ParcelData?) - suspend fun setParcelOwner(parcel: ParcelId, owner: ParcelOwner?) + fun produceAllGlobalAddedData(channel: SendChannel<AddedDataPair<ParcelOwner>>) - suspend fun setLocalPlayerStatus(parcel: ParcelId, player: UUID, status: AddedStatus) + fun readGlobalAddedData(owner: ParcelOwner): MutableAddedDataMap - suspend fun setParcelAllowsInteractInventory(parcel: ParcelId, value: Boolean) + fun setGlobalPlayerStatus(owner: ParcelOwner, player: UUID, status: AddedStatus) - suspend fun setParcelAllowsInteractInputs(parcel: ParcelId, value: Boolean) +} +abstract class AbstractBacking(val dispatcher: CoroutineDispatcher) { - suspend fun produceAllGlobalAddedData(channel: SendChannel<AddedDataPair<ParcelOwner>>) + fun launchJob(job: Backing.() -> Unit): Job - suspend fun readGlobalAddedData(owner: ParcelOwner): MutableAddedDataMap + fun <T> launchFuture(future: Backing.() -> T): Deferred<T> - suspend fun setGlobalPlayerStatus(owner: ParcelOwner, player: UUID, status: AddedStatus) + fun <T> openChannel(future: Backing.(SendChannel<T>) -> Unit): ReceiveChannel<T> -}
\ No newline at end of file +} |