Monday, November 08, 2010 at 12:00 AM.
scripting2Suite.data.code.realtime.server.getUpdates
on getUpdates (username, ipaddress) { <<Changes <<7/16/10; 7:43:21 AM by DW <<Add another level under each users' realtimeUpdates table, with the IP they're connecting through. <<Set the creation time of the table we're watching to now. If a table gets too old, it gets reclaimed, so we don't have to accumulate updates for connections that aren't being maintained. <<7/13/10; 8:16:06 AM by DW <<Wait for something to show up in the user's realtimeUpdates table, when it does, pack it up and return it. If it times out (initially hard-coded to 60 seconds) return an empty table. local (adrdata = realtime.init (), now = clock.now ()); local (timeoutticks = clock.ticks () + (adrdata^.server.prefs.ctSecsTimeout * 60)); local (adrinbox = realtime.server.initinbox (username, ipaddress)); local (sem = realtime.server.data.semaphoreName); adrinbox^.stats.whenLastCheck = now; adrinbox^.stats.ctChecks++; loop { if sizeof (adrinbox^.queue) > 0 { local (t); semaphore.lock (sem, 180); t = adrinbox^.queue; new (tabletype, @adrinbox^.queue); //consume it semaphore.unlock (sem); adrinbox^.stats.ctNonTimeouts++; return (t)}; //return it if clock.ticks () > timeoutticks { //return an empty table local (t); new (tabletype, @t); adrinbox^.stats.ctTimeouts++; return (t)}; thread.sleepfor (1); //sleep for a second adrinbox^.stats.ctLoops++}}; bundle { //test code scratchpad.updates = getUpdates ("davewiner", tcp.dns.getmydottedid ())}
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.