blob: bb4cf33f298d99054486bd3321c345a597348b0c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
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
interface Backing {
val name: String
val isConnected: Boolean
fun launchJob(job: Backing.() -> Unit): Job
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.
*/
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
fun setParcelData(parcel: ParcelId, data: ParcelData?)
fun setParcelOwner(parcel: ParcelId, owner: ParcelOwner?)
fun setLocalPlayerStatus(parcel: ParcelId, player: UUID, status: AddedStatus)
fun setParcelAllowsInteractInventory(parcel: ParcelId, value: Boolean)
fun setParcelAllowsInteractInputs(parcel: ParcelId, value: Boolean)
fun produceAllGlobalAddedData(channel: SendChannel<AddedDataPair<ParcelOwner>>)
fun readGlobalAddedData(owner: ParcelOwner): MutableAddedDataMap
fun setGlobalPlayerStatus(owner: ParcelOwner, player: UUID, status: AddedStatus)
}
abstract class AbstractBacking(val dispatcher: CoroutineDispatcher) {
fun launchJob(job: Backing.() -> Unit): Job
fun <T> launchFuture(future: Backing.() -> T): Deferred<T>
fun <T> openChannel(future: Backing.(SendChannel<T>) -> Unit): ReceiveChannel<T>
}
|