Copyright (C) 1994, Digital Equipment Corp.
Siphon.i3
INTERFACESiphon ; IMPORT TextList, NetObj, PackageObj, PkgErr, LockOps, Thread; FROM PackageObj IMPORT PN, Source; FROM LockOps IMPORT Version, SiteName; CONST SiphonExportName = "Siphon"; TYPE Sites = REF ARRAY OF SiteName; SynchKind = {CheckOnly, (* does nothing *) UpdateSelf, (* update local site from network *) UpdateAll (* push updates from local site to world *) }; TYPE SiteList = TextList.T (* of SiteName *); TYPE T = NetObj.T OBJECT METHODS ship( package: PN; source: Source; version: Version; caller: SiteName; (* used for stats *) manager: SiteName; fwdSites: SiteList) RAISES {PkgErr.E, NetObj.Error, Thread.Alerted}; (* ship a package across the siphon *) (* target should forward this package to "fwdRoute" *) enqueue( package: PN; version: Version; manager: SiteName; forSite: SiteName; urgent: BOOLEAN := FALSE) RAISES {PkgErr.E, NetObj.Error, Thread.Alerted}; (* enqueue the named package for transmission *) (* if forSite=NIL, send to all sites in siphon.config *) (* manager used only if the package has to be created *) (* if urgent, package is put at the beginning of the send queue *) dequeue( package: PN; forSite: SiteName := NIL; interruptSend: BOOLEAN := FALSE) : BOOLEAN RAISES {PkgErr.E, NetObj.Error, Thread.Alerted}; (* removes package from send queue regardless of instance *) (* if forSite is NIL, removes package from all send queues *) (* result indicates whether a dequeue actually occured *) synch(kind: SynchKind; package: PN): TEXT RAISES {NetObj.Error, Thread.Alerted}; (* initiate skulker synchronization *) (* synchronize all packages if package = NIL*) (* result text tells what happened *) (* if kind=checkOnly, result contains what should be done *) lockserver() : LockOps.T RAISES {PkgErr.E, NetObj.Error, Thread.Alerted}; status() : TEXT RAISES {NetObj.Error, Thread.Alerted}; END; PROCEDURE New(site: SiteName): T RAISES {PkgErr.E, NetObj.Error, Thread.Alerted}; (* NIL means local site *) PROCEDURE SetServerT(t: T; site: SiteName); (* register local server object *) END Siphon.