DEFINE INPUT PARAMETER picServer AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER picSocket AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER picRequest AS CHARACTER NO-UNDO.
DEFINE OUTPUT PARAMETER pocResponce AS CHARACTER NO-UNDO.
DEFINE VARIABLE hSocket AS HANDLE NO-UNDO.
DEFINE VARIABLE lCompleetBericht AS LOGICAL NO-UNDO.
DEFINE VARIABLE iStartMoment AS INTEGER NO-UNDO.
DEFINE VARIABLE lConnected AS LOGICAL NO-UNDO.
DEFINE VARIABLE mBuffer AS MEMPTR NO-UNDO.
/********** End Main variables section **********/
/************ Main initialisation section ************/
CREATE SOCKET hSocket.
ASSIGN iStartMoment = TIME
pocResponce = ""
lConnected = FALSE
lConnected = hSocket:CONNECT(" -H " +
picServer +
" -S " +
picSocket)
NO-ERROR.
IF NOT lConnected
THEN DO:
ASSIGN pocResponce = ?.
END. /* IF NOT lConnected */
ELSE DO: /* ELSE IF NOT lConnected */
hSocket:SET-READ-RESPONSE-PROCEDURE( "leesSocket", THIS-PROCEDURE ).
ASSIGN SET-SIZE(mBuffer) = 0
SET-SIZE(mBuffer) = LENGTH(picRequest) + 1
PUT-STRING(mBuffer,1) = picrequest
.
hSocket:WRITE(mBuffer, 1, LENGTH(picRequest)).
MAIN-BLOCK:
REPEAT:
/* this does not work anymore when called from a method returning other type than VOID
WAIT-FOR READ-RESPONSE OF hSocket PAUSE 1.
*/
PAUSE 1 NO-MESSAGE. /* this does not work either */
IF lCompleetBericht
OR TIME - iStartMoment > 35
OR TIME - iStartMoment < 0
THEN LEAVE.
END.
IF pocResponce = ""
THEN DO:
IF hSocket:CONNECTED()
THEN hSocket:DISCONNECT().
DELETE OBJECT hSocket NO-ERROR.
RETURN ERROR "Connection responce timed out".
END.
IF hSocket:CONNECTED()
THEN DO:
hSocket:DISCONNECT().
END.
DELETE OBJECT hSocket NO-ERROR.
END. /* ELSE IF NOT lConnected */
IF NOT lConnected
THEN DO:
RETURN ERROR "Connection Failed".
END. /* IF NOT lConnected */
/********** End Main initialisation section **********/
PROCEDURE leesSocket:
DEFINE VARIABLE iKarakters AS INTEGER NO-UNDO.
DEFINE VARIABLE cTemp AS CHARACTER NO-UNDO.
DEFINE VARIABLE mBuffer AS MEMPTR NO-UNDO.
ASSIGN iKarakters = hSocket:GET-BYTES-AVAILABLE()
cTemp = ""
.
IF iKarakters > 0
THEN DO:
ASSIGN SET-SIZE(mBuffer) = iKarakters + 1
.
hSocket:READ(mBuffer, 1, iKarakters, 1).
ASSIGN cTemp = GET-STRING(mBuffer,1)
pocResponce = pocResponce + cTemp
SET-SIZE(mBuffer) = 0.
END.
IF iKarakters = 0
THEN DO:
ASSIGN lCompleetBericht = TRUE.
END.
END PROCEDURE. /* leesSocket */