Skip to content
This repository has been archived by the owner on Dec 18, 2022. It is now read-only.

Commit

Permalink
[#130] implement new master actor
Browse files Browse the repository at this point in the history
- add interface document
  • Loading branch information
ztkmkoo committed Sep 14, 2020
1 parent c89cc8e commit 2a31f83
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ public interface DssExceptionSpawnable extends DssExceptionAcceptable {
*/
<E extends DssExceptionActorProperty, M extends DssMasterActorProperty> E createDssExceptionActorProperty(M masterProperty);

/**
* spawn exception actor and set it
*/
default <M extends DssMasterActorProperty> void initializeExceptionActor(AbstractDssActor<DssMasterCommand> master, M masterProperty) {
final DssExceptionActorProperty property = createDssExceptionActorProperty(Objects.requireNonNull(masterProperty));
final ActorRef<DssExceptionCommand> actor = DssCommonActorUtils.spawn(master, getExceptionBehaviorCreator(), property, "exception");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@

import akka.actor.typed.ActorRef;
import akka.actor.typed.Behavior;
import akka.actor.typed.javadsl.ReceiveBuilder;
import io.github.ztkmkoo.dss.core.actor.enumeration.DssMasterActorStatus;
import io.github.ztkmkoo.dss.core.actor.property.DssMasterActorProperty;
import io.github.ztkmkoo.dss.core.message.DssCommand;
import io.github.ztkmkoo.dss.core.message.DssMasterCommand;
import io.github.ztkmkoo.dss.core.message.DssNetworkCommand;
import io.github.ztkmkoo.dss.core.message.DssResolverCommand;

import java.util.Objects;

Expand All @@ -16,56 +15,52 @@
* @author Kebron ztkmkoo@gmail.com
* @create 2020-08-24 01:59
*/
public interface DssMasterActor extends DssActor<DssMasterCommand> {
public interface DssMasterActor extends DssActor<DssMasterCommand>, DssExceptionSpawnable, DssServiceSpawnable, DssResolverSpawnable, DssNetworkSpawnable {

/**
* Get actor ref of resolver actor
* Get master property
*/
ActorRef<DssResolverCommand> getResolverActor();
<M extends DssMasterActorProperty> M getDssMasterActorProperty();

/**
* Get actor ref of network actor
* Get current master actor status
*/
ActorRef<DssNetworkCommand> getNetworkActor();
DssMasterActorStatus getMasterActorStatus();

/**
* Get master actor properties
* Set current master actor status
*/
DssMasterActorProperty getProperty();
void setMasterActorStatus(DssMasterActorStatus status);

/**
* Create resolver actor method
* help spawn child exception, service, resolver, network actor
* do not change the spawn order
*/
Behavior<DssResolverCommand> createResolverActorBehavior();
default void initializeMasterActor(AbstractDssActor<DssMasterCommand> master) {
Objects.requireNonNull(master);
final DssMasterActorProperty masterProperty = getDssMasterActorProperty();
Objects.requireNonNull(masterProperty);

initializeExceptionActor(master, masterProperty);
initializeServiceActor(master, masterProperty);
initializeResolverActor(master, masterProperty);
initializeNetworkActor(master, masterProperty);
}

/**
* Create network actor method
* make ReceiveBuilder for master actor with common handling message
*/
Behavior<DssNetworkCommand> createNetworkActorBehavior();
default ReceiveBuilder<DssMasterCommand> masterReceiveBuilder(AbstractDssActor<DssMasterCommand> actor) {
return actor.newReceiveBuilder()
.onMessage(DssMasterCommand.StatusRequest.class, this::handlingStatusRequest)
.onMessage(DssMasterCommand.StatusUpdate.class, this::handlingStatusUpdate)
;
}

/**
* Get current master actor status
* handling DssMasterCommand.StatusRequest
* response that current actor status
*/
DssMasterActorStatus getMasterActorStatus();

void setMasterActorStatus(DssMasterActorStatus status);

default ActorRef<DssResolverCommand> spawnResolverActor(AbstractDssActor<DssMasterCommand> actor) {
final Behavior<DssResolverCommand> resolverBehavior = createResolverActorBehavior();
Objects.requireNonNull(resolverBehavior);

final ActorRef<DssResolverCommand> resolverActor = actor.getContext().spawn(resolverBehavior, "resolver");
return Objects.requireNonNull(resolverActor);
}

default ActorRef<DssNetworkCommand> spawnNetworkActor(AbstractDssActor<DssMasterCommand> actor) {
final Behavior<DssNetworkCommand> networkBehavior = createNetworkActorBehavior();
Objects.requireNonNull(networkBehavior);

final ActorRef<DssNetworkCommand> networkActor = actor.getContext().spawn(networkBehavior, "network");
return Objects.requireNonNull(networkActor);
}

default Behavior<DssMasterCommand> handlingStatusRequest(DssMasterCommand.StatusRequest msg) {
Objects.requireNonNull(msg);
Objects.requireNonNull(getMasterActorStatus());
Expand All @@ -85,6 +80,10 @@ default Behavior<DssMasterCommand> handlingStatusRequest(DssMasterCommand.Status
return getBehavior();
}

/**
* handling DssMasterCommand.StatusUpdate
* update current status with request
*/
default Behavior<DssMasterCommand> handlingStatusUpdate(DssMasterCommand.StatusUpdate msg) {
Objects.requireNonNull(msg);
Objects.requireNonNull(getMasterActorStatus());
Expand All @@ -103,4 +102,4 @@ default Behavior<DssMasterCommand> handlingStatusUpdate(DssMasterCommand.StatusU

return getBehavior();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ public interface DssNetworkSpawnable extends DssNetworkAcceptable {
*/
<P extends DssNetworkActorProperty, M extends DssMasterActorProperty> P createDssNetworkActorProperty(M masterProperty);

/**
* spawn network actor and set it
*/
default <M extends DssMasterActorProperty> void initializeNetworkActor(AbstractDssActor<DssMasterCommand> master, M masterProperty) {
final DssNetworkActorProperty property = createDssNetworkActorProperty(Objects.requireNonNull(masterProperty));
final ActorRef<DssNetworkCommand> actor = DssCommonActorUtils.spawn(master, getNetworkBehaviorCreator(), property, "network");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,14 @@ public interface DssResolverSpawnable extends DssResolverAcceptable {
*/
DssBehaviorCreator<DssResolverCommand, DssResolverActorProperty> getResolverBehaviorCreator();

/**
* Create DssResolverActorProperty from DssMasterActorProperty
*/
<P extends DssResolverActorProperty, M extends DssMasterActorProperty> P createDssResolverActorProperty(M masterProperty);

/**
* spawn resolver actor and set it
*/
default <M extends DssMasterActorProperty> void initializeResolverActor(AbstractDssActor<DssMasterCommand> master, M masterProperty) {
final DssResolverActorProperty property = createDssResolverActorProperty(Objects.requireNonNull(masterProperty));
final ActorRef<DssResolverCommand> actor = DssCommonActorUtils.spawn(master, getResolverBehaviorCreator(), property, "resolver");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,19 @@ public interface DssServiceSpawnable extends DssServiceAcceptable {
*/
DssBehaviorCreator<DssServiceCommand, DssServiceActorProperty> getServiceBehaviorCreator();

/**
* Create DssServiceActorProperty list from DssMasterActorProperty
*/
<P extends DssServiceActorProperty, M extends DssMasterActorProperty> List<P> createDssServiceActorPropertyList(M masterProperty);

/**
* Create DssServiceActorResolvable from DssServiceActorProperty and service actor
*/
<P extends DssServiceActorProperty> DssServiceActorResolvable<String> createDssServiceActorResolvable(P property, ActorRef<DssServiceCommand> actor);

/**
* spawn service actors and set it
*/
default <M extends DssMasterActorProperty> void initializeServiceActor(AbstractDssActor<DssMasterCommand> master, M masterProperty) {
final List<DssServiceActorProperty> propertyList = createDssServiceActorPropertyList(masterProperty);
if (Objects.isNull(propertyList) || propertyList.isEmpty()) {
Expand All @@ -39,12 +48,18 @@ default <M extends DssMasterActorProperty> void initializeServiceActor(AbstractD
.forEach(p -> initializeServiceActor(master, p));
}

/**
* spawn service actor and set it
*/
default <P extends DssServiceActorProperty> void initializeServiceActor(AbstractDssActor<DssMasterCommand> master, P property) {
final ActorRef<DssServiceCommand> actor = DssCommonActorUtils.spawn(master, getServiceBehaviorCreator(), property, "service-" + property.getName());
final DssServiceActorResolvable<String> resolvable = createDssServiceActorResolvable(property, actor);
putServiceActorResolvable(resolvable);
}

/**
* put service actor
*/
default void putServiceActorResolvable(DssServiceActorResolvable<String> resolvable) {
Objects.requireNonNull(resolvable);
if (StringUtils.isEmpty(resolvable.getKey())) {
Expand Down

0 comments on commit 2a31f83

Please sign in to comment.