Quintiq file version 2.0 
 | 
#parent: #root 
 | 
Method ReceiveDataExchange (String data_i) 
 | 
{ 
 | 
  Description: 'Receive data-exchange and determine its type.' 
 | 
  TextBody: 
 | 
  [* 
 | 
    // Jacky CHAN Apr-20-2016 (created) 
 | 
    nvt := LibDEF_DataAccessor::NVTDeserialize( data_i ); 
 | 
     
 | 
    senderGUID := LibDEF_DataAccessor::GetHeaderPropertyAsString( nvt, LibDEF_DataAccessor::HEADER_SYSTEMGUID_FROM() ); 
 | 
    event      := this.EventCreate( senderGUID, true ); 
 | 
     
 | 
    LibDEF_Util::EventLog( event, "Receiving Data Exchange" ); 
 | 
     
 | 
    if( this.VerifyHeaderDomainGUID( nvt, event ) 
 | 
        and this.VerifyCompatibilityAndUpdateSystemVersion( senderGUID, nvt, event ) ) 
 | 
    { 
 | 
      // mark the system as available 
 | 
      sender := LibDEF_System::MarkAvailability( this, senderGUID, true, event ); 
 | 
     
 | 
      if( LibDEF_DataAccessor::HasChildNamed( nvt, nvt.Root(), LibDEF_DataAccessor::HANDLE_CONFIGURATION() ) ) 
 | 
      { 
 | 
        // Handle configuration message 
 | 
        this.ReceiveConfiguration( &nvt, event ); 
 | 
      } 
 | 
      else 
 | 
      { 
 | 
        // restrict non-Configuration message requires a valid System entry 
 | 
        if( isnull( sender ) ) 
 | 
        { 
 | 
          // log restrictive error 
 | 
          LibDEF_Util::EventLogError( event, 
 | 
                                      "Failed to process Data-Exchange message", 
 | 
                                      "Non-configuration message received from unknown sender with S-GUID '" + senderGUID + "' is rejected." ); 
 | 
        } 
 | 
        else 
 | 
        { 
 | 
          if( LibDEF_DataAccessor::HasChildNamed( nvt, nvt.Root(), LibDEF_DataAccessor::HANDLE_METADATA() ) ) 
 | 
          { 
 | 
            // Handle metadata message 
 | 
            this.ReceiveMetadata( &nvt, sender, event ); 
 | 
          } 
 | 
          else if( LibDEF_DataAccessor::HasChildNamed( nvt, nvt.Root(), LibDEF_DataAccessor::HANDLE_DATA() ) ) 
 | 
          { 
 | 
            // Handle set-data message 
 | 
            this.ReceiveData( nvt, sender, event ); 
 | 
          } 
 | 
          else 
 | 
          { 
 | 
            LibDEF_Util::EventLogError( event, 
 | 
                                        "Failed to process Data-Exchange message", 
 | 
                                        "Failed to process Data-Exchange message, message format cannot be recognized." ); 
 | 
          } 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  *] 
 | 
} 
 |