[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: multiRef guidance
Steve,
Working with "multiRef" and RPG is a pain and I do not know whether my
English is good enough to explain how I do it, but I will do my best
to give you an idea of it. I use your sample data as part of my
explanation.
Basically my program monitors for multiRef elements. When it
encounters a multiRef reference, e.g. <getGpsReturn href="#id0"/>, it
adds that reference to a map along with the following information
(program state):
From the parameter list of the start-callback procedure:
userData
depth
namespace
name
path
attrs
From http_parser_get_start_cb() and http_parser_get_end_cb():
cbStart
cbEnd
Others:
itemIndex (item index, if itemData is an array entry)
itemData (either userData or address of aarray element)
length (length of storage of itemData)
I need all that information in order to re-build the program state
when the program goes on and hits a multiRef element <multiRef
id="id0" ...>.
When the program hits a multiRef element it calls
http_parser_switch_cb() to switch the callbacks to a special multiRef
handler callback. That callback retrieves the data that is associated
to "id0" from the map. Then it manipulates all input parameter values
of the start- and end-callback procedures to be the same as they were
at the time "id0" was added to the map. Finally it calls the
"original" callbacks that have been stored in "cbStart" and "cbEnd".
That way these callbacks are called as if there was no multiRef.
Last but not least you need to know that multiRef data (id="id0") can
be referenced more than once!
So in case my program encounters that there is a second and third
reference to "id0" it also stores the current program state in an
array as part of the map entry that is associated with "id0". At the
end of the program it copies the multiRef data from the first
reference (itemData, length) to the second, third, ..., references
(memcpy()).
I use my own BasicMap and BasicList "objects" as part of my BASICS1
service program in order to use dynamic memory allocation to manage an
unlimited number of entries.
Perhaps you should consider to use WSDL2RPG which supports multiRef
elements. In case you want to look at WSDL2R94 (multiRef handler), you
must know that I use my own eXpat adapter because Scott did not yet
released his HTTP API at the time that I neeed http_parser_switch_cb()
and some other new procedures. The names are slighlty different but
they work the same way. Actually I intended to change everything back
to Scott's eXpat adapter (HTTPXMLR4) but since my one works too, I
kept it the way it is. Honestly lot's of code had been taken from
Scott's HTTPXMLR4.
Thomas.
Von: steve@xxxxxxxxxxx
An: ftpapi@xxxxxxxxxxxxxxxxxxxxxx
Datum: 16.08.2010 07:09
Betreff: multiRef guidance
Gesendet von: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
_________________________________________________________________
Greetings All.
Please provide me some guidance with "multiRef".
I have found documentation that tells me what they are. I haven't
found any
docs that tell me how to best deal with them in RPG.
Thanks in advance.
Steve
[Anhang "multiref.txt" gelöscht von Thomas Raddatz/GfD/DE]
----------------------------------------------------------------------
-
This is the FTPAPI mailing list. To unsubscribe, please go to:
[1]http://www.scottklement.com/mailman/listinfo/ftpapi
----------------------------------------------------------------------
-
--
IMPORTANT NOTICE:
This email is confidential, may be legally privileged, and is for the
intended recipient only. Access, disclosure, copying, distribution, or
reliance on any of it by anyone else is prohibited and may be a
criminal
offence. Please delete if obtained in error and email confirmation to
the sender.
References
1. http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
This is the FTPAPI mailing list. To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------