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 | 52 |
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) +} |