Stewart,
Somewhat late, but it took a littlewhile to get around to checking your
suggestion. In a word: Perfect! It worked like a charm.
One possible minor point. It worked fine under BlackBox 1.33. However under
1.4 I had some compiling problems. I did not pursue this. Possibly I missed
something or did something wrong, or perhaps an interface has changed. Maybe
worthwhile checking yourself (if not I'll check into this later, but I'm
very much strapped for time at present). If you find something please let me
know.
In any case thank you very much.
with friendly greetings,
> ____________________________________
> Bart van Wijck
> Senior Business Development Consultant
> Compuware BV
> Telefoon: 020 311 88 57
> Fax : 020 311 88 01
> Mobiel : 06 54 35 23 76
>
-----Original Message-----
From: Stewart Greenhill [mailto:sgreenhill{([at]})nowhere.xy
Sent: Saturday, May 19, 2001 1:28 AM
To: Wijck, Bart van
Cc: 'blackbox{([at]})nowhere.xy
Subject: Re: Question regarding CommStreams with protocol name
'CommTCP'.
Hi Bart,
Haved a look at my HTTP client/server utilities:
http://espc22.murdoch.edu.au/~stewart/blackbox/index.html#dbu
Module DbuClient implements a simple HTTP 1.0 client. It uses a framework
that handles reading/writing network channels. Within the server this is
done as a background task. For simplicity, DbuClient.GetFile uses a
blocking loop, but with a little effort this could also be handled in the
background.
Module DbuChannels simplifies the management of network channels allowing
you to put/get files from a network stream. You simply need to implement a
Controller that decides what to do after each get/put operation has
completed. It handles buffering/read/write operations for you.
Hope this helps.
Cheers,
Stewart
"Wijck, Bart van" wrote:
>
> Hi,
>
> I am not experienced with BlackBox. I'm trying to create a simple BlackBox
> module which acts as a client and which requests a web page from a
> webserver. For this purpose we use a CommStream with protocol name
> 'CommTCP'. The thing with which I am struggling is the way to implement
the
> ReadBytes for the response of the webserver.
> I understand the procedures are non-blocking.
> Using the module below, in procedure RequestPage I send a request for a
> webpage. I'm not sure how to capture/read the response.
> It looks as if procedure WriteBytes to the WebServer functions alright,
but
> I need an event loop (or listener or event handler).
>
> MODULE WwebAgent;
>
> (* WwebAgent.Try *)
>
> IMPORT CommStreams, Out;
>
> CONST
> CONNECT_DONE = 0;
> CONNECT_INVALID_LOCAL = 2;
> CONNECT_INVALID_REMOTE = 3;
> CONNECT_NETWORK_DOWN = 4;
>
> TYPE
> STRING =
> ARRAY OF CHAR;
> STRING128 = ARRAY
129
> OF CHAR;
> STRING256 = ARRAY
266
> OF CHAR;
> STRING1024 = ARRAY
1025
> OF CHAR;
>
> VAR
> hostaddress : STRING128;
> sHTTP :
> CommStreams.Stream;
> connectstatus : INTEGER;
> pagestatus : BOOLEAN;
> (*
>
----------------------------------------------------------------------------
> --------- *)
> PROCEDURE StringToByte(IN s : ARRAY OF CHAR; OUT b : ARRAY OF BYTE);
> VAR
> i : INTEGER;
> BEGIN
> i := 0;
> WHILE (i < LEN(s$)) & (s[i] # 0X) DO
> b[i] := SHORT(SHORT(ORD(s[i])));
> INC(i);
> END;
> END StringToByte;
>
> (*
>
----------------------------------------------------------------------------
> --------- *)
> PROCEDURE ByteToString(IN b : ARRAY OF BYTE; bytecnt : INTEGER; OUT s:
ARRAY
> OF CHAR);
> VAR
> i : INTEGER;
> BEGIN
> i := 0;
> WHILE (i < bytecnt) DO
> s[i] := CHR(b[i]);
> INC(i);
> END;
> s[i] := 0X;
> END ByteToString;
>
> (*
>
----------------------------------------------------------------------------
> --------- *)
> PROCEDURE Connect*(hostname : STRING; port : STRING): INTEGER;
> VAR
> res : INTEGER;
> BEGIN
> res := 0;
>
> Out.String('Connecting...');
> Out.Ln;
> hostaddress := hostname + ':' + port;
> CommStreams.NewStream ('CommTCP', '', hostaddress, sHTTP, res);
> Out.String('Connection status: ');
> Out.Int(res, 2);
> Out.Ln;
>
> RETURN res;
> END Connect;
>
> (*
>
----------------------------------------------------------------------------
> --------- *)
> PROCEDURE Close*;
> BEGIN
> sHTTP.Close;
> END Close;
>
> (*
>
----------------------------------------------------------------------------
> --------- *)
> PROCEDURE RequestPage*(url : STRING): BOOLEAN;
> VAR
> sRequest : STRING256;
> bRequest : ARRAY 513 OF BYTE;
> sReply : STRING1024;
> bReply : ARRAY 2049 OF BYTE;
> nrBytesWriten : INTEGER;
> nrBytesRead : INTEGER;
> BEGIN
> sRequest := '';
> sReply := '';
> nrBytesWriten := 0;
>
> IF ~sHTTP.IsConnected() THEN
> RETURN FALSE;
> END;
>
> Out.String('Request');
> Out.Ln;
>
> sRequest := 'GET ' + url + ' HTTP/1.1\nAccept: */*\nAccept-Language:
> nl\nAccept-Encoding: gzip\nUser-Agent: Mozilla/4.0 (compatible; MSIE 4.01;
> Windows 95)\n'+ hostaddress;
> StringToByte(sRequest, bRequest);
>
> sHTTP.WriteBytes(bRequest, 0, LEN(sRequest$), nrBytesWriten);
> Out.String('Send ');
> Out.Int(nrBytesWriten, 2);
> Out.String(' bytes');
> Out.Ln;
>
> sHTTP.ReadBytes(bReply, 0, 1024, nrBytesRead);
> ByteToString(bReply, nrBytesRead, sReply);
> Out.String('Reply: "' + sReply + '" (');
> Out.Int(nrBytesRead, 2);
> Out.String(' bytes).');
> Out.Ln;
>
> RETURN TRUE;
> END RequestPage;
>
> (*
>
----------------------------------------------------------------------------
> --------- *)
> PROCEDURE Try*;
> BEGIN
> connectstatus := Connect('127.0.0.1', '80');
> pagestatus := RequestPage('http://127.0.0.1/mercurius/logon.htm');
> Close();
> END Try;
>
> (*
>
----------------------------------------------------------------------------
> --------- *)
> BEGIN
> END WwebAgent.
>
> Regards,
>
> > ____________________________________
> > Bart van Wijck
> > Senior Business Development Consultant
> > Compuware BV
> > Telefoon: 020 311 88 57
> > Fax : 020 311 88 01
> > Mobiel : 06 54 35 23 76
> >
> >
> --------------------------------------------
>
> To unsubscribe from this mailing list, send a message containing the word
"unsubscribe" to:
> blackbox-request{([at]})nowhere.xy
>
> To get a list of valid e-mail commands and instructions on their usage,
send a message containing the word "help" to the above address.
>
> Send any problem reports or questions related to this email list to the
list owner at
> owner-blackbox{([at]})nowhere.xy
--------------------------------------------
To unsubscribe from this mailing list, send a message containing the word "unsubscribe" to:
blackbox-request{([at]})nowhere.xy
To get a list of valid e-mail commands and instructions on their usage, send a message containing the word "help" to the above address.
Send any problem reports or questions related to this email list to the list owner at
owner-blackbox{([at]})nowhere.xy
Received on Mon Jun 11 2001 - 07:42:17 UTC