diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/core/actors/NetworkContainerActor.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/core/actors/NetworkContainerActor.scala
new file mode 100644
index 0000000000000000000000000000000000000000..ba0ee07744458c794711451ba825055a20def96c
--- /dev/null
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/core/actors/NetworkContainerActor.scala
@@ -0,0 +1,22 @@
+package fr.univ_lille.cristal.emeraude.n2s3.core.actors
+
+import fr.univ_lille.cristal.emeraude.n2s3.core.NetworkContainer
+import fr.univ_lille.cristal.emeraude.n2s3.support.actors.{ActorCompanion, SinglePropsBuilder}
+
+/**
+ * Actor companion of [[NetworkContainerActor]].
+ * It defines a way to create new [[NetworkContainerActor]] instances
+ */
+object NetworkContainerActor extends ActorCompanion{
+
+ /**
+ * Returns a props builder for a [[NetworkContainerActor]]
+ */
+ def newPropsBuilder() = new SinglePropsBuilder[NetworkContainerActor]()
+}
+
+
+/**
+ * NetworkEntityActor that contains a NetworkContainer as NetworkEntity
+ */
+class NetworkContainerActor extends NetworkEntityActor(new NetworkContainer)
\ No newline at end of file
diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/core/actors/NetworkEntityActor.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/core/actors/NetworkEntityActor.scala
index ecc8a55c9c4532763ec1b8ab4df62c5a9c6c7ee3..b3cd7e156e85f416aebf7ddf359605b59c30ec8c 100644
--- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/core/actors/NetworkEntityActor.scala
+++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/core/actors/NetworkEntityActor.scala
@@ -6,17 +6,18 @@ package fr.univ_lille.cristal.emeraude.n2s3.core.actors
import akka.actor.{Actor, Props}
import fr.univ_lille.cristal.emeraude.n2s3.core._
-import fr.univ_lille.cristal.emeraude.n2s3.core.actors.NetworkEntityActor.{ExplicitSenderRoutedMessage, ImplicitSenderRoutedMessage}
+import fr.univ_lille.cristal.emeraude.n2s3.core.actors.NetworkEntityActor.{CheckMailbox, ExplicitSenderRoutedMessage, ImplicitSenderRoutedMessage}
import fr.univ_lille.cristal.emeraude.n2s3.core.exceptions.{UnknownDestinationException, UnknownPathException}
-import fr.univ_lille.cristal.emeraude.n2s3.support.actors
-import fr.univ_lille.cristal.emeraude.n2s3.support.actors.{ActorCompanion, Message, PropsBuilder, SinglePropsBuilder}
+import fr.univ_lille.cristal.emeraude.n2s3.support
+import fr.univ_lille.cristal.emeraude.n2s3.support.actors.{Message, PropsBuilder}
import scala.collection.mutable
/**
- * Companion object of NetworkContainerActor
+ * Companion object of [[NetworkEntityActor]].
+ * Includes common messages used by [[NetworkEntityActor]] and a builder to instantiate actors.
*/
-object NetworkEntityActor extends actors.ActorCompanion {
+object NetworkEntityActor extends support.actors.ActorCompanion {
/**
* Message used to add a child to the target NetworkContainer.
@@ -48,49 +49,19 @@ object NetworkEntityActor extends actors.ActorCompanion {
case class SynchronizedRoutedMessage(to: Traversable[Any], message: Message, sender : NetworkEntityPath)
/**
- * Create the PropsBuilder of NetworkEntityActor class
- *
- * @return new PropsBuilder
+ * Message used when the limits of local messages processed is reached.
+ * This one alone to resume immediately the messageQueue processing in case of there's no incoming messages
*/
- def newPropsBuilder() = new NetworkEntityActorPropsBuilder
-}
-
-
-/**
- * Abstract representation of an actor that contains a NetworkEntity
- * This actor is used to make the interface between the NetworkEntity (e.g. neurons, neuron containers) it contains and the external system
- *
- * It may receive messages that it will treat itself or messages it will forward to it's children entities
- * The latter handle two kind of messages :
- * - ExplicitSenderRoutedMessage includes the actor where the response should be sent
- * - ImplicitSenderRoutedMessage will send the message's response to de implicit sender set by Akka
- *
- * Other messages are processed by the actor itself
- *
- * This class keeps a queue of messages that are not yet processed.
- *
- * Each message generated by a local NetworkEntity is added to this queue in order to let the current entity
- * finish processing before starting the following. However, in the case of local ask pattern, the message is instantly processed
- * and the response can be returned immediately.
- *
- * Local ask should be avoided if possible
- * In case of mutual local ask, the actor will be in state of deadlock
- *
- * For examples of usages, see @NetworkContainer
- */
+ private object CheckMailbox
-object NetworkContainerActor extends ActorCompanion{
- def newPropsBuilder() = new SinglePropsBuilder[NetworkContainerActor]()
+ /**
+ * Returns a PropsBuilder for a [[NetworkEntityActor]]
+ */
+ def newPropsBuilder() = new NetworkEntityActorPropsBuilder
}
/**
- * mixin of NetworkContainer with NetworkEntityActor
- */
-class NetworkContainerActor extends NetworkEntityActor(new NetworkContainer)
-
-/**
- * Specialization of PropsBuilder used to construct NetworkEntityActor.
- * This class allow to set the root entity
+ * Specialized PropsBuilder used to construct a NetworkEntityActor.
*/
class NetworkEntityActorPropsBuilder extends PropsBuilder {
private var entity: NetworkEntity = _
@@ -104,28 +75,32 @@ class NetworkEntityActorPropsBuilder extends PropsBuilder {
}
/**
- * specialization of NetworkEntityActor used to provide the root ReferenceableNetworkEntity in constructor parameter instead of specify it in mixin
- * This class is responsible for making the bridge between the actor and the content entity
+ * Actor to interact with a network entity (e.g. neurons, neuron containers)
+ * Receives messages that it may treat itself or forward to it's children entities
+ * The latter handle two kind of messages :
+ * - [[ExplicitSenderRoutedMessage]] includes the actor where the response should be sent
+ * - [[ImplicitSenderRoutedMessage]] will send the message's response to de implicit sender set by Akka
+ *
+ * Other messages are processed by the actor itself.
*
- * @param entity is the root ReferenceableNetworkEntity of the actor
+ * This class keeps a queue of messages that are not yet processed.
+ *
+ * Each message generated by a local NetworkEntity is added to this queue in order to let the current entity
+ * finish processing before starting the following. However, in the case of local ask pattern, the message is instantly processed
+ * and the response can be returned immediately.
+ *
+ * Local ask should be avoided if possible
+ * In case of mutual local ask, the actor will be in state of deadlock
+ *
+ * For examples of usages, see [[NetworkContainer]]
+ * @param entity is the root Networkentity contained by the actor
*/
class NetworkEntityActor(val entity : NetworkEntity) extends Actor {
- override def preRestart(reason: Throwable, message: Option[Any]): Unit = {
- println("[DEBUG] Restart Actor "+self+" : "+reason+(if(message.isDefined) " | "+message.get else ""))
- super.preRestart(reason, message)
- }
-
entity.container = this
-// entity.setParent(this, this)
-
- def resolvePath(target : Traversable[Any]) : NetworkEntity = {
- entity.resolvePath(target)
- }
/**
* Queue which contains next message to process
- *
* Each message are accompanied by the target NetworkEntity and the sender NetworkEntityReference
*/
private val messageQueue = mutable.Queue[(Message, NetworkEntity, NetworkEntityReference)]()
@@ -135,11 +110,14 @@ class NetworkEntityActor(val entity : NetworkEntity) extends Actor {
*/
private val maxMessageProcess = 10
- /**
- * Message used when the limits of local messages processed is reached.
- * This one alone to resume immediately the messageQueue processing in case of there's no incoming messages
- */
- private object CheckMailbox
+ override def preRestart(reason: Throwable, message: Option[Any]): Unit = {
+ println("[DEBUG] Restart Actor " + self + " : " + reason + (if(message.isDefined) " | " + message.get else "" ))
+ super.preRestart(reason, message)
+ }
+
+ def resolvePath(target : Traversable[Any]) : NetworkEntity = {
+ entity.resolvePath(target)
+ }
/**