Samchon Framework for CPP  1.0.0
samchon::protocol::master::DistributedSystemArray Class Referenceabstract

An array of distributed system drivers. More...

#include <DistributedSystemArray.hpp>

Collaboration diagram for samchon::protocol::master::DistributedSystemArray:

Public Member Functions

 DistributedSystemArray ()
 Default Constructor. More...
 
virtual void construct (std::shared_ptr< library::XML >) override
 Construct data of the Entity from an XML object. More...
 
virtual void start () override
 Start interaction. More...
 
virtual void allocateRoles ()
 Allocate roles to each distributed processing system. More...
 
auto hasRole (const std::string &) const -> bool
 Test whether has a role. More...
 
auto getRole (const std::string &) const -> std::shared_ptr< DistributedSystemRole >
 Get a role. More...
 
virtual auto toXML () const -> std::shared_ptr< library::XML > override
 Get an XML object represents the EntityGroup. More...
 
- Public Member Functions inherited from samchon::protocol::ExternalSystemArray
 ExternalSystemArray ()
 Default Constructor. More...
 
auto hasRole (const std::string &) const -> bool
 Test whether has a role. More...
 
auto getRole (const std::string &) const -> std::shared_ptr< ExternalSystemRole >
 Get a role. More...
 
virtual void sendData (std::shared_ptr< Invoke >) override
 Sends an Invoke message to related ExternalSystem(s). More...
 
virtual void replyData (std::shared_ptr< Invoke >) override
 Handle replied Invoke message. More...
 
virtual auto TAG () const -> std::string override
 A tag name when represented by XML. More...
 
virtual auto CHILD_TAG () const -> std::string override
 A tag name of children. More...
 
- Public Member Functions inherited from samchon::protocol::EntityGroup< _Container, _ETy, T >
 EntityGroup ()
 Default Constructor. More...
 
auto has (const std::string &key) const -> bool
 Indicates whether a container has an object having the specified identifier. More...
 
auto get (const std::string &key) -> value_type &
 Access the element by specified identifier(key). More...
 
auto get (const std::string &key) const -> const value_type &
 Access the const element by specified identifier(key). More...
 
- Public Member Functions inherited from samchon::protocol::Entity
 Entity ()
 Default Constructor. More...
 
virtual auto key () const -> std::string
 Get a key that can identify the Entity uniquely. More...
 
- Public Member Functions inherited from samchon::protocol::IEntityGroup
 IEntityGroup ()
 Default Constructor. More...
 
- Public Member Functions inherited from samchon::protocol::IProtocol
 IProtocol ()
 Default Constructor. More...
 

Protected Member Functions

virtual auto createRole (std::shared_ptr< library::XML >) -> DistributedSystemRole *=0
 Factory method of a DistributedSystemRole. More...
 
- Protected Member Functions inherited from samchon::protocol::EntityGroup< _Container, _ETy, T >
virtual auto createChild (std::shared_ptr< library::XML >) -> entity_type *=0
 Factory method of a child Entity. More...
 

Protected Attributes

Dictionary< std::shared_ptr< DistributedSystemRole > > roleDictionary
 A dictionary of role objects. More...
 
struct library::GAParameters gaParameters
 A structure of parameters for genetic algorithm. More...
 

Detailed Description

An array of distributed system drivers.

DistributedSystemArray class is an ExternalSystemArray and an abstract class containing and managing distributed system drivers within framework of master. The DistributedSystemArray class allocates DistributedSystemRole objects to DistributedSystem objects for optimization.

Unlike the ExternalSystemRole class which is dependent on an ExternalSystem, DistributedSystemRole is not dependent on a DistributedSystem and even can be allocated to multiple DistributedSystem objects. Allocation of DistributedSystemRole(s) to DistributedSystem(s) is determined by estimation of performance index pursuing best distribution. If number of DistributedSystem and DistributedSystemRole objects is not a lot, optimize by combined permuation algorithm. Else the objects are a lot, the allocation will be optimized by genetic algorithm.

protocol_master_distributed_system.png
[Inherited]

ExternalSystemArray is an abstract class containing and managing external system drivers.

Also, ExternalSystemArray can access to ExternalSystemRole(s) directly. With the method, you can use an ExternalSystemRole as "logical proxy" of an ExternalSystem. Of course, the ExternalSystemRole is belonged to an ExternalSystem. However, if you access an ExternalSystemRole from an ExternalSystemArray directly, not passing by a belonged ExternalSystem, and send an Invoke message even you're not knowing which ExternalSystem is related in, the ExternalSystemRole acted a role of proxy.

It's called as "Proxy pattern". With the pattern, you can only concentrate on ExternalSystemRole itself, what to do with Invoke message, irrespective of the ExternalSystemRole is belonged to which ExternalSystem.

ExternalSystemArray::getRole("something")->sendData(invoke);
protocol_external_system.png
Example Sources
See also
samchon::protocol
Author
Jeongho Nam http://samchon.org

Definition at line 39 of file DistributedSystemArray.hpp.

Constructor & Destructor Documentation

DistributedSystemArray::DistributedSystemArray ( )

Default Constructor.

Definition at line 15 of file DistributedSystemArray.cpp.

Member Function Documentation

void DistributedSystemArray::construct ( std::shared_ptr< library::XML xml)
overridevirtual

Construct data of the Entity from an XML object.

Constructs the EntityGroup's own member variables only from the input XML object.

Do not consider about constructing children Entity objects' data in EntityGroup::construct(). Those children Entity objects' data will constructed by their own construct() method. Even insertion of XML objects representing children are done by abstract method of EntityGroup::toXML().

Constructs only data of EntityGroup's own.

[Inherited]
Construct data of the Entity from an XML object.

Overrides the construct() method and fetch data of member variables from the XML.

By recommended guidance, data representing member variables are contained in properties of the put XML object.

Parameters
xmlAn xml used to construct data of entity

Reimplemented from samchon::protocol::EntityGroup< _Container, _ETy, T >.

Reimplemented in samchon::protocol::master::DistributedSystemArrayMediator, samchon::protocol::master::DistributedClientArrayMediator, and samchon::protocol::master::DistributedClientArray.

Definition at line 20 of file DistributedSystemArray.cpp.

References samchon::protocol::EntityGroup< _Container, _ETy, T >::construct(), createRole(), and roleDictionary.

Here is the call graph for this function:

virtual auto samchon::protocol::master::DistributedSystemArray::createRole ( std::shared_ptr< library::XML ) -> DistributedSystemRole *
protectedpure virtual

Factory method of a DistributedSystemRole.

Parameters
AnXML object represents the role.
Returns
A new DistributedSystemRole.

Referenced by construct().

Here is the caller graph for this function:

void DistributedSystemArray::start ( )
overridevirtual

Start interaction.

An abstract method starting interaction with external systems.

If external systems are servers, starts connection to them, else clients, opens a server and accepts the external systems. You can addict your own procudures of starting drivers, but if you directly override method of abstract ExternalSystemArray, be careful about virtual inheritance.

Implements samchon::protocol::ExternalSystemArray.

Reimplemented in samchon::protocol::master::DistributedSystemArrayMediator, samchon::protocol::master::DistributedClientArrayMediator, samchon::protocol::master::DistributedClientArray, samchon::protocol::master::DistributedServerArrayMediator, and samchon::protocol::master::DistributedServerArray.

Definition at line 40 of file DistributedSystemArray.cpp.

References allocateRoles().

Here is the call graph for this function:

void DistributedSystemArray::allocateRoles ( )
virtual

Allocate roles to each distributed processing system.

Allocates DistributedSystemRole objects to Distributedsystem objects. The allocation will be done when:

  • New distributed system (client) has connected.
  • Ordinary distributed system is disconnected.
  • Deviation of elapsed time of whole DistributedSystem overs limited value.
Todo:
Design new allocation plan.

Definition at line 44 of file DistributedSystemArray.cpp.

Referenced by start().

Here is the caller graph for this function:

auto DistributedSystemArray::hasRole ( const std::string &  ) const -> bool

Test whether has a role.

Parameters
nameAn identifier of an DistributedSystemRole
Returns
Whether has a role or not.

Definition at line 54 of file DistributedSystemArray.cpp.

References samchon::protocol::Entity::key(), and roleDictionary.

Here is the call graph for this function:

auto DistributedSystemArray::getRole ( const std::string &  ) const -> std::shared_ptr<DistributedSystemRole>

Get a role.

Parameters
nameAn identifier of an DistributedSystemRole
Returns
A shared pointer of specialized role

Definition at line 58 of file DistributedSystemArray.cpp.

References samchon::protocol::Entity::key(), and roleDictionary.

Here is the call graph for this function:

auto DistributedSystemArray::toXML ( ) const -> std::shared_ptr<library::XML>
overridevirtual

Get an XML object represents the EntityGroup.

Archives the EntityGroup's own member variables only to the returned XML object.

Do not consider about archiving children Entity objects' data in EntityGroup::toXML(). Those children Entity objects will converted to XML object by their own toXML() method. The insertion of XML objects representing children are done by abstract method of EntityGroup::toXML().

Archives only data of EntityGroup's own.

[Inherited]
Get an XML object represents the Entity.

Returns an XML object that can represents the Entity containing member variables into properties.

A member variable (not object, but atomic value like number, string or date) is categorized as a property within the framework of entity side. Thus, when overriding a toXML() method and archiving member variables to an XML object to return, puts each variable to be a property belongs to only an XML object.

Don't archive the member variable of atomic value to XML::value causing enormouse creation of XML objects to number of member variables. An Entity must be represented by only an XML instance (tag).

Standard Usage Non-standard usage abusing value
<memberList>
     <member id='jhnam88' name='Jeongho+Nam' birthdate='1988-03-11' />
     <member id='master' name='Administartor' birthdate='2011-07-28' />
</memberList>
<member>
     <id>jhnam88</id>
     <name>Jeongho+Nam</name>
     <birthdate>1988-03-11</birthdate>
</member>
Returns
An XML object representing the Entity.

Reimplemented from samchon::protocol::EntityGroup< _Container, _ETy, T >.

Reimplemented in samchon::protocol::master::DistributedSystemArrayMediator, samchon::protocol::master::DistributedClientArrayMediator, and samchon::protocol::master::DistributedClientArray.

Definition at line 66 of file DistributedSystemArray.cpp.

References roleDictionary, and samchon::protocol::EntityGroup< _Container, _ETy, T >::toXML().

Here is the call graph for this function:

Member Data Documentation

Dictionary<std::shared_ptr<DistributedSystemRole> > samchon::protocol::master::DistributedSystemArray::roleDictionary
protected

A dictionary of role objects.

Definition at line 49 of file DistributedSystemArray.hpp.

Referenced by construct(), getRole(), hasRole(), and toXML().

struct library::GAParameters samchon::protocol::master::DistributedSystemArray::gaParameters
protected

A structure of parameters for genetic algorithm.

Definition at line 54 of file DistributedSystemArray.hpp.


The documentation for this class was generated from the following files: