Monday, November 08, 2010 at 12:00 AM.
river2Suite.cloudPipe.client
on client () {
<<Changes
<<12/27/09; 9:38:47 AM by DW
<<Ooops. Failed to set flfirstloop false, so every call was a POST. Glad we caught that one! :-)
<<12/26/09; 5:45:42 PM by DW
<<In the first call, send the OPML subscription list in the body with the method == POST.
<<12/15/09; 9:47:58 AM by DW
<<Created.
local (flfirstloop = true);
loop {
local (adrdata = river2suite.init (), xstruct);
if not adrdata^.prefs.cloudPipeClient.enabled {
break};
try {
bundle { //call the server, xstruct contains what it returned
local (urllist = string.urlsplit (adrdata^.prefs.cloudPipeClient.apiUrl), method = "GET", body = " ");
if flfirstloop or adrdata^.stats.cloudPipeClient.flFeedsDirty {
method = "POST";
body = river2Suite.opmlBuild ();
flfirstloop = false;
adrdata^.stats.cloudPipeClient.flFeedsDirty = false};
adrdata^.stats.cloudPipeClient.ctServerCalls++;
local (s = string.httpResultSplit (tcp.httpClient (method, server:urllist [2], path:urllist [3], username: adrdata^.prefs.cloudPipeClient.username, password: adrdata^.prefs.cloudPipeClient.password, timeoutticks:60 * adrdata^.prefs.cloudPipeClient.ctSecsTimeout, flmessages:false, data:body)));
<<scratchpad.cloudpipestring = s
bundle { //call the callbacks
local (adrscript);
for adrscript in @river2Suite.cloudPipe.callbacks.clientXml {
while typeof (adrscript^) == addresstype {
adrscript = adrscript^};
try {adrscript^ (s)}}};
xml.compile (s, @xstruct)};
<<scratchpad.cloudpipestruct = xstruct
bundle { //do callbacks for each packet in the returned struct
local (adrpackets = xml.getaddress (@xstruct, "packets"), adrpacket);
for adrpacket in adrpackets {
local (name = string.nthfield (nameof (adrpacket^), "\t", 2));
local (adrcallback = @river2suite.cloudPipe.callbacks.client.[name]);
while typeof (adrcallback^) == addresstype {
adrcallback = adrcallback^};
try {
adrcallback^ (adrpacket)}}}};
adrdata^.stats.cloudPipeClient.ctClientLoops++}};
bundle { //test code
client ()}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.