|
From: creedon <icr...@us...> - 2005-12-22 19:30:38
|
Update of /cvsroot/frontierkernel/odbs/mainResponderRoot/mainResponder/subscriptions In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2008 Modified Files: server Log Message: support relative paths in user.rootUpdates.servers.x.f no longer need to pop the file off an address as what is now stored as a relative address Index: server =================================================================== RCS file: /cvsroot/frontierkernel/odbs/mainResponderRoot/mainResponder/subscriptions/server,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** server 26 Mar 2005 21:46:14 -0000 1.1.1.1 --- server 22 Dec 2005 19:30:30 -0000 1.2 *************** *** 1,3 **** FrontierVcsFile:1:scpt:mainResponder.subscriptions.server ! on server (dbname, ipaddress, lastupdate, username, mailaddress, serialnumber) { ÇReturn new and changed parts of a database since the last update. ÇChanges: Ç8/12/04; 3:12:31 AM by JES ÇAdditional logging: Errors are now logged. When an update is successful, ctPartsSent (in the log sub-table) is set to the number of parts sent to the client. Ç12/7/03; 11:52:32 PM by JES ÇAdd callback support. Callbacks are in config.mainResponder.callbacks.subscriptionsServer. They take the same parameters as this RPC handler. If any callback returns false, then an error is generated. Ç11/04/00; 5:55:40 PM by PBS ÇReturn the time on the server of the last update, so clients don't miss updates. local (adrtable = log.addToGuestDatabase ("subscriptions")); bundle { //add a record to the subscription log adrtable^.dbname = dbname; adrtable^.ipaddress = ipaddress; adrtable^.lastupdate = lastupdate; adrtable^.username = username; adrtable^.mailaddress = mailaddress; adrtable^.serialnumber = serialnumber}; bundle { //call callbacks local (adrcallbacks = @config.mainResponder.callbacks.subscriptionsServer); if not defined (adrcallbacks^) { new (tableType, adrcallbacks)}; local (adr, ct = sizeOf (adrcallbacks^), i, flSendUpdate = true); for i = 1 to ct { adr = @adrcallbacks^[i]; try { while typeOf (adr^) == addressType { adr = adr^}; if not adr^ (dbname, ipaddress, lastupdate, username, mailaddress, serialnumber) { flSendUpdate = false}}; if not flSendUpdate { scriptError ("Can't update because you are not authorized for updates to this database.")}}}; local (adrdb = @user.databases.[dbname]); if not defined (adrdb^) { adrtable^.error = "The sysop hasn't registered a database named \"" + dbname + "\"."; //02/04/07, 08:22:52 by DAB scriptError ("Can't send you an update because the sysop hasn't registered a database named \"" + dbname + "\".")}; if not (adrdb^.supportsSubscribe) { adrtable^.error = "The database \"" + dbname + "\" doesn't support subscriptions."; //02/04/07, 08:22:48 by DAB scriptError ("Can't send you an update because the database \"" + dbname + "\" doesn't support subscriptions.")}; local (adrguestdatabase = @[adrdb^.f]); table.sureDatabaseOpen (adrguestdatabase); lastupdate = date (lastupdate); //convert from a net-standard-string local (frontierVersion = Frontier.version ()); local (adrchanges = @adrguestdatabase^.["#changes"]); local (sizechanges = sizeof (adrchanges^)); local (parts); new (tabletype, @parts); parts.serialNum = sizechanges; //it's synthetic! parts.lastUpdateTime = date.netStandardString (clock.now ()); //PBS 11/4/00: save server time on client, to avoid missing updates new (tabletype, @parts.parts); local (i, addeditems = {}); for i = sizechanges downto 1 { local (adritem = @adrchanges^ [i]); if adritem^.when < lastupdate { break}; if addeditems contains adritem^.what { //we've already included this continue}; local (name = "part" + string.padwithzeros (i, 4)); local (adrnewpart = @parts.parts.[name]); new (tabletype, adrnewpart); bundle { //2/14/99; 9:01:26 AM by DW, customized error if object doesn't exist if not defined (adritem^.what^) { adrtable^.error = "The #changes table in \"" + dbname + "\" on the server says that \"" + adritem^.what + "\" has changed, but the object isn't in the database."; //02/04/07, 08:22:41 by DAB scriptError ("Can't do the update because the #changes table in \"" + dbname + "\" on the server says that \"" + adritem^.what + "\" has changed, but the object isn't in the database.")}; adrnewpart^.data = adritem^.what^}; adrnewpart^.timestamp = adritem^.when; adrnewpart^.userName = adritem^.who; bundle { //put the relative address into adr field local (s = string (adritem^.what)); local (ix = string.patternMatch ("].", s)); s = string.delete (s, 1, ix + 1); adrnewpart^.adr = s}; wp.newtextobject ("", @adrnewpart^.changes); adrnewpart^.platform = "both"; adrnewpart^.version = frontierVersion; local (bytes); pack (adrnewpart^, @bytes); bytes = base64.encode (bytes, infinity); delete (adrnewpart); adrnewpart^ = bytes; addeditems = addeditems + {adritem^.what}; sys.systemTask ()}; adrtable^.ctPartsSent = sizeof (addedItems); //02/04/07, 08:22:36 by DAB return (parts)}; Çbundle //test code Çserver ("prefs.root", tcp.dns.getMyDottedId (), clock.now (), "Jake", "ja...@us...", 10) \ No newline at end of file --- 1,3 ---- FrontierVcsFile:1:scpt:mainResponder.subscriptions.server ! on server (dbname, ipaddress, lastupdate, username, mailaddress, serialnumber) { ÇChanges Ç12/21/05; 10:11:19 PM by TAC Çsupport relative paths in user.rootUpdates.servers.x.f Çno longer need to pop the file off an address as what is now stored as a relative address Ç8/12/04; 3:12:31 AM by JES ÇAdditional logging: Errors are now logged. When an update is successful, ctPartsSent (in the log sub-table) is set to the number of parts sent to the client. Ç12/7/03; 11:52:32 PM by JES ÇAdd callback support. Callbacks are in config.mainResponder.callbacks.subscriptionsServer. They take the same parameters as this RPC handler. If any callback returns false, then an error is generated. Ç11/04/00; 5:55:40 PM by PBS ÇReturn the time on the server of the last update, so clients don't miss updates. ÇReturn new and changed parts of a database since the last update. local (adrtable = log.addToGuestDatabase ("subscriptions")); bundle { //add a record to the subscription log adrtable^.dbname = dbname; adrtable^.ipaddress = ipaddress; adrtable^.lastupdate = lastupdate; adrtable^.username = username; adrtable^.mailaddress = mailaddress; adrtable^.serialnumber = serialnumber}; bundle { //call callbacks local (adrcallbacks = @config.mainResponder.callbacks.subscriptionsServer); if not defined (adrcallbacks^) { new (tableType, adrcallbacks)}; local (adr, ct = sizeOf (adrcallbacks^), i, flSendUpdate = true); for i = 1 to ct { adr = @adrcallbacks^[i]; try { while typeOf (adr^) == addressType { adr = adr^}; if not adr^ (dbname, ipaddress, lastupdate, username, mailaddress, serialnumber) { flSendUpdate = false}}; if not flSendUpdate { scriptError ("Can't update because you are not authorized for updates to this database.")}}}; local (adrdb = @user.databases.[dbname]); if not defined (adrdb^) { adrtable^.error = "The sysop hasn't registered a database named \"" + dbname + "\"."; //02/04/07, 08:22:52 by DAB scriptError ("Can't send you an update because the sysop hasn't registered a database named \"" + dbname + "\".")}; if not (adrdb^.supportsSubscribe) { adrtable^.error = "The database \"" + dbname + "\" doesn't support subscriptions."; //02/04/07, 08:22:48 by DAB scriptError ("Can't send you an update because the database \"" + dbname + "\" doesn't support subscriptions.")}; local (adrGuestDatabase = @[fileSpec (adrdb^.f)]); table.sureDatabaseOpen (adrGuestDatabase); lastupdate = date (lastupdate); //convert from a net-standard-string local (frontierVersion = Frontier.version ()); local (adrchanges = @adrGuestDatabase^.["#changes"]); local (sizechanges = sizeof (adrchanges^)); local (parts); new (tabletype, @parts); parts.serialNum = sizechanges; //it's synthetic! parts.lastUpdateTime = date.netStandardString (clock.now ()); //PBS 11/4/00: save server time on client, to avoid missing updates new (tabletype, @parts.parts); local (i, addedItems = {}); for i = sizechanges downto 1 { local (adrItem = @adrchanges^ [i]); if adrItem^.when < lastupdate { break}; if addedItems contains adrItem^.what { //we've already included this continue}; local (name = "part" + string.padwithzeros (i, 4)); local (adrNewPart = @parts.parts.[name]); new (tabletype, adrNewPart); bundle { //2/14/99; 9:01:26 AM by DW, customized error if object doesn't exist if not defined (adrItem^.what^) { adrtable^.error = "The #changes table in \"" + dbname + "\" on the server says that \"" + adrItem^.what + "\" has changed, but the object isn't in the database."; //02/04/07, 08:22:41 by DAB scriptError ("Can't do the update because the #changes table in \"" + dbname + "\" on the server says that \"" + adrItem^.what + "\" has changed, but the object isn't in the database.")}; adrNewPart^.data = adrItem^.what^}; adrNewPart^.timestamp = adrItem^.when; adrNewPart^.userName = adrItem^.who; adrNewPart^.adr = adrItem^.what; Çbundle //put the relative address into adr field Çlocal (s = string (adrItem^.what)) Çlocal (ix = string.patternMatch ("].", s)) Çs = string.delete (s, 1, ix + 1) ÇadrNewPart^.adr = s wp.newtextobject ("", @adrNewPart^.changes); adrNewPart^.platform = "both"; adrNewPart^.version = frontierVersion; local (bytes); pack (adrNewPart^, @bytes); bytes = base64.encode (bytes, infinity); delete (adrNewPart); adrNewPart^ = bytes; addedItems = addedItems + {adrItem^.what}; sys.systemTask ()}; adrtable^.ctPartsSent = sizeof (addedItems); //02/04/07, 08:22:36 by DAB return (parts)}; Çbundle //test code Çserver ("prefs.root", tcp.dns.getMyDottedId (), clock.now (), "Jake", "ja...@us...", 10) \ No newline at end of file |