Skip to content

Commit ac8c6cd

Browse files
author
Adriano Santos
committed
adjusts in user api
1 parent c6625ff commit ac8c6cd

File tree

144 files changed

+183
-187
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

144 files changed

+183
-187
lines changed

README.md

+13-9

build.gradle.kts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ plugins {
33
}
44

55
allprojects {
6-
group = "io.creativesource"
6+
group = "io.eigr"
77
version = "1.0.0"
88
}

docs/Index.md

+1
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
23
1+
48
22
0
Binary file not shown.
Binary file not shown.
Binary file not shown.
2.89 KB
Binary file not shown.

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/actor/Actor.kt

-21
This file was deleted.

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/actor/ActorSystem.kt

-42
This file was deleted.

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/actor/Context.kt

-4
This file was deleted.

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/internals/mailbox/Mailbox.kt

-16
This file was deleted.

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/internals/mailbox/Message.kt

-5
This file was deleted.

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/Supervisor.kt synapsys-core/src/main/kotlin/io/eigr/synapsys/core/Supervisor.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package io.creativesource.synapsys.core
1+
package io.eigr.synapsys.core
22

3-
import io.creativesource.synapsys.core.actor.Actor
3+
import io.eigr.synapsys.core.actor.Actor
44

55
class Supervisor {
66

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.eigr.synapsys.core.actor
2+
3+
import io.eigr.synapsys.core.internals.persistence.Store
4+
5+
abstract class Actor<S, M, R>(val id: String?, initialState: S?) {
6+
var state: Context<S> = Context(initialState)
7+
8+
internal var store: Store<S>? = null
9+
10+
abstract fun onReceive(message: M, state: Context<S>): Pair<S, R>
11+
12+
internal suspend fun onStart() {
13+
this.state = Context(store?.load(id!!))
14+
}
15+
16+
internal suspend fun mutate(state: S): S {
17+
this.state = Context(state)
18+
store?.save(id!!, state)
19+
return state
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.eigr.synapsys.core.actor
2+
3+
import io.eigr.synapsys.core.internals.loggerFor
4+
import io.eigr.synapsys.core.internals.scheduler.ActorExecutor
5+
6+
class ActorPointer<M : Any>(private val actorId: String, private val executor: ActorExecutor<M>) {
7+
private val log = loggerFor(this::class.java)
8+
9+
fun getAddress(): String {
10+
return "<${actorId.lowercase()}>"
11+
}
12+
13+
suspend fun send(message: M) {
14+
log.debug("[ActorSystem] Sending message: {} to actor: {}", message, actorId)
15+
executor.send(message)
16+
}
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.eigr.synapsys.core.actor
2+
3+
import io.eigr.synapsys.core.internals.BaseActorAdapter
4+
import io.eigr.synapsys.core.internals.mailbox.Mailbox
5+
import io.eigr.synapsys.core.internals.mailbox.transport.ChannelMailbox
6+
import io.eigr.synapsys.core.internals.persistence.InMemoryStore
7+
import io.eigr.synapsys.core.internals.scheduler.ActorExecutor
8+
import io.eigr.synapsys.core.internals.scheduler.Scheduler
9+
import io.eigr.synapsys.core.internals.serialization.ProtobufMessageSerializer
10+
11+
object ActorSystem {
12+
private val executors: MutableMap<String, ActorExecutor<*>> = mutableMapOf()
13+
private lateinit var scheduler: Scheduler
14+
15+
fun <S, M : Any, R> createActor(
16+
id: String,
17+
initialState: S,
18+
actorFactory: (String, S) -> Actor<S, M, R>
19+
): ActorPointer<M> {
20+
val actor = actorFactory(id, initialState)
21+
actor.store = InMemoryStore()
22+
val adapter = BaseActorAdapter(actor)
23+
val mailbox = Mailbox<M>(ChannelMailbox(ProtobufMessageSerializer()))
24+
val executor = ActorExecutor(adapter, mailbox)
25+
26+
executors[id] = executor
27+
return ActorPointer(id, executor)
28+
}
29+
30+
fun start() {
31+
scheduler = Scheduler(50)
32+
executors.values.forEach { executor ->
33+
scheduler.enqueue(executor as ActorExecutor<Any>)
34+
}
35+
}
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.eigr.synapsys.core.actor
2+
3+
class Context<S>(private val internalState: S?) {
4+
val state get() = this.internalState
5+
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package io.creativesource.synapsys.core.internals
1+
package io.eigr.synapsys.core.internals
22

33
interface BaseActor {
44
val id: String
55
suspend fun processMessageUntyped(message: Any, currentState: Any?): Pair<Any?, Any?>
6-
fun getState(): Any?
6+
suspend fun getState(): Any?
77
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
package io.creativesource.synapsys.core.internals
1+
package io.eigr.synapsys.core.internals
22

3-
import io.creativesource.synapsys.core.actor.Actor
3+
import io.eigr.synapsys.core.actor.Actor
4+
import io.eigr.synapsys.core.actor.Context
45

5-
class ActorAdapter<S, M, R>(private val actor: Actor<S, M, R>) : BaseActor {
6+
class BaseActorAdapter<S, M, R>(private val actor: Actor<S, M, R>) :
7+
BaseActor {
68

79
override val id: String
810
get() = actor.id!!
911

10-
override fun getState(): S? = actor.state
12+
override suspend fun getState(): S? = actor.state.state
1113

1214
override suspend fun processMessageUntyped(message: Any, currentState: Any?): Pair<Any?, Any?> {
1315
@Suppress("UNCHECKED_CAST")
@@ -17,7 +19,9 @@ class ActorAdapter<S, M, R>(private val actor: Actor<S, M, R>) : BaseActor {
1719
val typedMessage = message as? M
1820
?: throw IllegalArgumentException("Actor $id received a message of invalid type.")
1921

20-
val (newState, result) = actor.onReceive(typedMessage, typedState)
22+
val ctx: Context<S> = Context(typedState)
23+
val (newState, result) = actor.onReceive(typedMessage, ctx)
2124
return Pair(result, actor.mutate(newState))
2225
}
26+
2327
}

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/internals/MessageSerializer.kt synapsys-core/src/main/kotlin/io/eigr/synapsys/core/internals/MessageSerializer.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.creativesource.synapsys.core.internals
1+
package io.eigr.synapsys.core.internals
22

33
interface MessageSerializer {
44
fun <T> serialize(obj: T): ByteArray
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.eigr.synapsys.core.internals.mailbox
2+
3+
import io.eigr.synapsys.core.internals.mailbox.transport.ChannelMailbox
4+
5+
class Mailbox<M : Any>(private val queue: MailboxAbstractQueue<M> = ChannelMailbox()) {
6+
7+
suspend fun send(message: M) {
8+
queue.send(message)
9+
}
10+
11+
suspend fun receive(): M? {
12+
return queue.receive()
13+
}
14+
15+
fun hasMessages(): Boolean = queue.hasMessages()
16+
}

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/internals/mailbox/SynapsysAbstractQueue.kt synapsys-core/src/main/kotlin/io/eigr/synapsys/core/internals/mailbox/MailboxAbstractQueue.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package io.creativesource.synapsys.core.internals.mailbox
1+
package io.eigr.synapsys.core.internals.mailbox
22

3-
abstract class SynapsysAbstractQueue<M> {
3+
abstract class MailboxAbstractQueue<M> {
44
abstract suspend fun send(message: M)
55
abstract suspend fun receive(): M?
66
abstract fun hasMessages(): Boolean

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/internals/mailbox/transport/ChannelMailbox.kt synapsys-core/src/main/kotlin/io/eigr/synapsys/core/internals/mailbox/transport/ChannelMailbox.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
package io.creativesource.synapsys.core.internals.mailbox.transport
1+
package io.eigr.synapsys.core.internals.mailbox.transport
22

3-
import io.creativesource.synapsys.core.internals.MessageSerializer
4-
import io.creativesource.synapsys.core.internals.mailbox.SynapsysAbstractQueue
5-
import io.creativesource.synapsys.core.internals.serialization.ProtobufMessageSerializer
3+
import io.eigr.synapsys.core.internals.MessageSerializer
4+
import io.eigr.synapsys.core.internals.mailbox.MailboxAbstractQueue
5+
import io.eigr.synapsys.core.internals.serialization.ProtobufMessageSerializer
66
import kotlinx.coroutines.ExperimentalCoroutinesApi
77

88
import kotlinx.coroutines.channels.Channel
99

1010
class ChannelMailbox<M : Any>(private val serializer: MessageSerializer = ProtobufMessageSerializer()) :
11-
SynapsysAbstractQueue<M>() {
11+
MailboxAbstractQueue<M>() {
1212
private lateinit var messageClass: Class<M>
1313
private val channel = Channel<ByteArray>(Channel.UNLIMITED)
1414

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/internals/mailbox/transport/ZeroMQMailbox.kt synapsys-core/src/main/kotlin/io/eigr/synapsys/core/internals/mailbox/transport/ZeroMQMailbox.kt

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
package io.creativesource.synapsys.core.internals.mailbox.transport
1+
package io.eigr.synapsys.core.internals.mailbox.transport
22

3-
import io.creativesource.synapsys.core.internals.MessageSerializer
4-
import io.creativesource.synapsys.core.internals.loggerFor
5-
import io.creativesource.synapsys.core.internals.mailbox.SynapsysAbstractQueue
6-
import io.creativesource.synapsys.core.internals.serialization.ProtobufMessageSerializer
3+
import io.eigr.synapsys.core.internals.MessageSerializer
4+
import io.eigr.synapsys.core.internals.loggerFor
5+
import io.eigr.synapsys.core.internals.mailbox.MailboxAbstractQueue
6+
import io.eigr.synapsys.core.internals.serialization.ProtobufMessageSerializer
77

88
import org.zeromq.ZMQ
99
import org.zeromq.ZMQException
1010

1111
class ZeroMQMailbox<M : Any>(
1212
private val serializer: MessageSerializer = ProtobufMessageSerializer(),
1313
private val endpoint: String = "inproc://mailbox"
14-
) : SynapsysAbstractQueue<M>() {
14+
) : MailboxAbstractQueue<M>() {
1515

1616
private val log = loggerFor(this::class.java)
1717
private val context = ZMQ.context(1)

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/internals/persistence/InMemoryStore.kt synapsys-core/src/main/kotlin/io/eigr/synapsys/core/internals/persistence/InMemoryStore.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.creativesource.synapsys.core.internals.persistence
1+
package io.eigr.synapsys.core.internals.persistence
22

33
class InMemoryStore<S> : Store<S> {
44
private val store = mutableMapOf<String, S>()

synapsys-core/src/main/kotlin/io/creativesource/synapsys/core/internals/persistence/Store.kt synapsys-core/src/main/kotlin/io/eigr/synapsys/core/internals/persistence/Store.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.creativesource.synapsys.core.internals.persistence
1+
package io.eigr.synapsys.core.internals.persistence
22

33
interface Store<S> {
44
suspend fun save(id: String, state: S)

0 commit comments

Comments
 (0)