Saturday, April 02, 2011 at 9:20 PM.
rssCloudSuite.notifySubscribers
on notifySubscribers (feedurl) {
<<Changes
<<7/19/09; 9:14:20 AM by DW
<<Factored the core code into rssCloudSuite.notifyOne, so I can do each notification in its own thread, so they can happen simulataneously, not serially.
<<7/12/09; 6:06:02 PM by DW
<<Created.
local (adrdata = rssCloudSuite.init ());
adrdata^.stats.ctNotifySubscribers++;
adrdata^.stats.whenLastNotifySubscribers = clock.now ();
adrdata^.stats.urlLastNotify = feedurl;
local (adrsubscriptions = @adrdata^.subscriptions.[feedurl]);
if defined (adrsubscriptions^) {
local (adrsubscription);
for adrsubscription in adrsubscriptions {
while system.temp.rssCloud.ctNotifyThreads > adrdata^.prefs.maxConcurrentThreads {
clock.waitseconds (1)};
thread.callscript (@rssCloudSuite.notifyOne, {adrsubscription})}; //rssCloudSuite.notifyOne (adrsubscription)
<<bundle //old code
<<local (server = nameof (adrsubscription^))
<<rssCloudSuite.initSubscription (adrsubscription)
<<local (adrsubscriber = @adrdata^.subscribers.[server])
<<local (startticks = clock.ticks ())
<<try
<<if server beginswith "http://" //special case for http-post
<<local (params)
<<new (tabletype, @params)
<<params.url = feedurl
<<tcp.httppost (server, @params)
<<else
<<[server].[adrsubscriber^.notifyProcedure] (feedurl)
<<adrsubscription^.whenLastUpdate = clock.now ()
<<adrsubscription^.ctUpdates++
<<bundle //log the event
<<local (urllist = string.urlsplit (server))
<<local (servername = string.nthfield (urllist [2], ":", 1)) //pop the port off the name of the server
<<local (protocolname = urllist [1] - "://")
<<local (s = "Subscriber <a href=\"" + server + "\">" + servername + "</a> was notified that the <a href=\"" + feedurl + "\"> feed</a> has changed via <i>" + protocolname + "</i> protocol.")
<<log2.add (rssCloudInfo.name, "Notify", s, startticks)
<<else
<<adrsubscriber^.lastError = tryerror
<<log2.add (rssCloudInfo.name, "Notify", "Error: " + tryerror, startticks)
return (true)}};
bundle { //test code
local (adrdata = rssCloudSuite.init ());
notifySubscribers (adrdata^.stats.urlLastNotify)}
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.