Quintiq file version 2.0
|
#parent: #root
|
Method ReceiveConfigurationRequestJoin (NamedValueTree nvt_i, NamedValue body_i, LibDEF_IntegrationEvent event_i)
|
{
|
Description: 'Receive Configuration message for requesting to join domain.'
|
TextBody:
|
[*
|
// Jacky CHAN Apr-22-2016 (created)
|
LibDEF_Util::EventLog( event_i, "Receiving join request" );
|
|
// retrieve requestor's hostname
|
hostName := LibDEF_DataAccessor::GetBodyPropertyAsString( nvt_i, LibDEF_DataAccessor::HANDLE_CONFIGURATION(), LibDEF_DataAccessor::HEADER_HOSTNAME() );
|
|
// retrieve requestor's portnumber
|
portNumber := LibDEF_DataAccessor::GetBodyPropertyAsNumber( nvt_i, LibDEF_DataAccessor::HANDLE_CONFIGURATION(), LibDEF_DataAccessor::HEADER_PORTNUMBER() );
|
|
// retrieve requestor's systemname
|
systemName := LibDEF_DataAccessor::GetBodyPropertyAsString( nvt_i, LibDEF_DataAccessor::HANDLE_CONFIGURATION(), LibDEF_DataAccessor::HEADER_SYSTEMNAME() );
|
|
// retrieve requestor's (assuming) SystemGUID
|
systemGUID := LibDEF_DataAccessor::GetHeaderPropertyAsString( nvt_i, LibDEF_DataAccessor::HEADER_SYSTEMGUID_FROM() );
|
|
// check if requesting System has registered before
|
requestorSystem := LibDEF_System::FindSystemByGUID( this, systemGUID );
|
// check if any System with matching host and port
|
matchedSystem := LibDEF_System::FindSystemByCoordinate( this, hostName, portNumber );
|
|
if( not isnull( matchedSystem ) and matchedSystem.GUID() <> systemGUID )
|
{
|
LibDEF_Util::EventLogError( event_i,
|
"Cannot accept Request to join Domain",
|
"Cannot accept Request to join Domain. System with same coordinate " +
|
LibDEF_Util::FormatCoordinateToString( matchedSystem.HostName(), matchedSystem.PortNumber() ) + " already exists." );
|
}
|
else
|
{
|
if( isnull( requestorSystem ) )
|
{
|
// create the joining System
|
if( this.IsBootNode() )
|
{
|
// assign a new System-GUID instead
|
requestorSystem := LibDEF_System::Create( this, hostName, portNumber );
|
}
|
else
|
{
|
// use the System-GUID as assigned by the BootNode before broadcast
|
requestorSystem := LibDEF_System::Create( this, systemGUID, hostName, portNumber );
|
}
|
}
|
else
|
{
|
requestorSystem.ChangeKeySystemByCoordinate( hostName, portNumber, event_i );
|
}
|
|
// update
|
requestorSystem.Name( systemName );
|
|
// sync channels
|
systems := construct( LibDEF_Systems );
|
systems.Add( requestorSystem );
|
this.SyncChannelMetasFromRoutingTable( nvt_i, body_i, systems, requestorSystem.GUID(), event_i );
|
|
// reply with success
|
this.SendConfigurationSuccessJoin( requestorSystem, event_i );
|
}
|
*]
|
}
|