project BLF > class BReportDaemonProcessor > method IterationEnd

Description

Hook method that is called every time the loop for work iterates. It has one input parameter indicating whether work was done in the loop or not.


Parameters


ilIterationPerformedWorkItemsinputlogicalParameter that indicates whether the loop in which this method is called right before the "end." statement has performed work itmes from the queue.
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


unused


program code (program/breportdaemonprocessor.p)

<ANCESTOR-CODE>

assign vlDaemonNeedsToEnd = true.

<Q-1 run ReportDaemonData (all) (Read) (NoCache)
   (input 0, (DaemonID)
    output dataset tqReportDaemonData) in BReportDaemon >

for each tqReportDaemonData:
    if vlOneRecord = no
    then assign vcSocketGlobalSessionID = tqReportDaemonData.tcReportDaemonGlobSessionId
                vcSocketHost            = tqReportDaemonData.tcReportDaemonSocketServer
                viSocketPort            = tqReportDaemonData.tiReportDaemonSocketPort
                vlOneRecord             = yes.
    else assign vlOneRecord = ?.
end.

if vlOneRecord <> yes
then do:
    <M-2 run SetMessage
       (input  'Error in daemon configuration.' (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-927216':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    assign oiReturnStatus             = -5
           vlReportServiceUnavailable = true.

    return.
end.

/* ============================= */
/* Say hello to the .NET service */
/* ============================= */
assign vlStartingReportDaemon = yes.
create socket vhtsocket no-error.

if error-status:error or
   error-status:num-messages > 0
then do:
    assign vcFcMaskList = "".

    do viFcCount1 = 1 to error-status:num-messages:
        if viFcCount1 > 1
        then assign vcFcMaskList = vcFcMaskList + chr(2).

        assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
    end.

    <M-3 run SetMessage
       (input  trim(#T-12'Failed to create socket object.':255(998716605)T-12#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-335319':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-4 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'D' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-485598':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus             = -3
           vlReportServiceUnavailable = true.

    return.
end.

assign vlFcOk = vhtsocket:set-read-response-procedure("ReportStartedResponse") no-error.

if not vlFcOk         or
   error-status:error or
   error-status:num-messages > 0
then do:
    assign vcFcMaskList = "".

    do viFcCount1 = 1 to error-status:num-messages:
        if viFcCount1 > 1
        then assign vcFcMaskList = vcFcMaskList + chr(2).

        assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
    end.

    <M-5 run SetMessage
       (input  trim(#T-13'Failed to set read response procedure on socket object.':255(998716606)T-13#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-775644':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-6 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'D' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-91007':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus             = -3
           vlReportServiceUnavailable = true.

    return.
end.

assign vlFcOk = vhtsocket:connect("-H " + vcSocketHost + " -S " + string(viSocketPort)) no-error.

if not vlFcOk         or
   error-status:error or
   error-status:num-messages > 0
then do:
    assign vcFcMaskList = "".

    do viFcCount1 = 1 to error-status:num-messages:
        if viFcCount1 > 1
        then assign vcFcMaskList = vcFcMaskList + chr(2).

        assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
    end.

    <M-7 run SetMessage
       (input  trim(#T-14'The system failed to connect to report server $1 using port $2.':255(998716607)T-14#) (icMessage), 
        input  vcSocketHost + chr(2) + string(viSocketPort) (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-846694':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-8 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'S' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-666318':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus             = -3
           vlReportServiceUnavailable = true.

    return.
end.

set-size(vmStarted) = 10.
put-string(vmStarted, 1) = "HELLO".
assign vlFcOk = vhtsocket:write(vmStarted, 1, 10) no-error.

if not vlFcOk         or
   error-status:error or
   error-status:num-messages > 0
then do:
    assign vcFcMaskList = "".

    do viFcCount1 = 1 to error-status:num-messages:
        if viFcCount1 > 1
        then assign vcFcMaskList = vcFcMaskList + chr(2).

        assign vcFcMaskList = vcFcMaskList + error-status:get-message(viFcCount1).
    end.

    <M-9 run SetMessage
       (input  trim(#T-15'The system failed to write to socket object.':255(998716608)T-15#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-668804':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    if vcFcMaskList <> ""
    then do viFcCount1 = 1 to num-entries(vcFcMaskList, chr(2)):
        <M-10 run SetMessage
           (input  entry(viFcCount1, vcFcMaskList, chr(2)) (icMessage), 
            input  '' (icArguments), 
            input  '' (icFieldName), 
            input  '' (icFieldValue), 
            input  'S' (icType), 
            input  3 (iiSeverity), 
            input  '' (icRowid), 
            input  'BLF-336463':U (icFcMsgNumber), 
            input  '' (icFcExplanation), 
            input  '' (icFcIdentification), 
            input  '' (icFcContext), 
            output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>
    end.

    assign oiReturnStatus             = -3
           vlReportServiceUnavailable = true.

    return.
end.

wait-for read-response of vhtsocket pause 30. /* Time-out = 30 seconds */
vhtsocket:disconnect().
delete object vhtsocket.
vhtsocket = ?.

if vlStartingReportDaemon = yes
then do:
    <M-11 run SetMessage
       (input  trim(#T-16'The report server has timed out.':255(9230)T-16#) (icMessage), 
        input  '' (icArguments), 
        input  '' (icFieldName), 
        input  '' (icFieldValue), 
        input  'D' (icType), 
        input  3 (iiSeverity), 
        input  '' (icRowid), 
        input  'BLF-621111':U (icFcMsgNumber), 
        input  '' (icFcExplanation), 
        input  '' (icFcIdentification), 
        input  '' (icFcContext), 
        output viFcReturnSuper (oiReturnStatus)) in BReportDaemonProcessor>

    assign oiReturnStatus             = -3
           vlReportServiceUnavailable = true.

    return.
end.

assign vlDaemonNeedsToEnd = false.

finally:
    set-size(vmStarted) = 0.
    if vhtsocket <> ?
    then delete object vhtsocket.
end finally.