| Quintiq file version 2.0 | 
| #parent: #root | 
| Method PTF_ExecuteClient ( | 
|   structured[LibPTF_TestScript] testscripts, | 
|   String str | 
| ) as String id:Method_LibPTF_pnlTestController_PTF_ExecuteClient | 
| { | 
|   #keys: '[102890.0.1874250332]' | 
|   Body: | 
|   [* | 
|     // Checks the status of the expected clients and launched clients in all the scripts and launch the next batches of clients when the previous batches of clients complete its execution | 
|      | 
|     rowDelimiter    := LibPTF_Util::StringListRowDelimiter();    | 
|     columnDelimiter := LibPTF_Util::StringListColumnDelimiter(); | 
|      | 
|     tracker         := construct( Strings ); | 
|     rows            := str.Tokenize( rowDelimiter ); | 
|      | 
|     traverse( rows, Elements, row ) | 
|     { | 
|       columns := row.Tokenize( columnDelimiter ); | 
|      | 
|       user                  := columns.Element( 0 ); | 
|       reqSessions           := [Number]columns.Element( 1 ); | 
|       reqConcurrentSessions := [Number]columns.Element( 2 ); | 
|       executedSessions_o    := [Number]columns.Element( 3 ); | 
|       executingSessions_o   := [Number]columns.Element( 4 ); | 
|       remainingSessions     := [Number]columns.Element( 5 ); | 
|       startTime_o           := columns.Element( 6 ); | 
|       endTime               := columns.Element( 7 ); | 
|       // elapsedtime        := columns.Element( 8 ); Not being used | 
|       startoffset           := columns.Element( 9 ); | 
|      | 
|       remainingConcurrentSessions := reqConcurrentSessions - executingSessions_o; | 
|       script                      := select( testscripts, | 
|                                              Elements, | 
|                                              s, | 
|                                              true, | 
|                                              s.User() = user ); | 
|        | 
|       currentTime := this.PTF_ConvertStringToDateTime( this.PTF_GetCurrentDatetime() ); | 
|        | 
|       if( remainingSessions > 0 | 
|           and this.PTF_ConvertStringToDateTime( lblStartTime.Text() ) + [Duration]startoffset <= currentTime  | 
|         ) | 
|       { | 
|         nrOfClientsToStart := minvalue( remainingSessions, remainingConcurrentSessions ); | 
|      | 
|         this.PTF_ExecuteClientByScript( script, | 
|                                         nrOfClientsToStart, | 
|                                         executedSessions_o, | 
|                                         executingSessions_o, | 
|                                         startTime_o | 
|                                           ); | 
|       } | 
|      | 
|       columns.Flush(); | 
|       columns.Add( user ); | 
|       columns.Add( [String]reqSessions ); | 
|       columns.Add( [String]reqConcurrentSessions ); | 
|       columns.Add( [String]executedSessions_o ); | 
|       columns.Add( [String]executingSessions_o ); | 
|       columns.Add( [String]remainingSessions ); | 
|       columns.Add( startTime_o ); | 
|       columns.Add( endTime ); | 
|       columns.Add( this.PTF_GetTotalDuration( startTime_o, endTime ) ); | 
|       columns.Add( startoffset ); | 
|      | 
|       tracker.Add( columns.ToString( columnDelimiter ) ); | 
|     } | 
|      | 
|     return tracker.ToString( rowDelimiter ); | 
|   *] | 
| } |