<> <> <> <> <> DIRECTORY BasicTime, Commander, ComputeServer, ComputeServerClient, ComputeServerCallbacksRpcControl, ComputeServerControllerRpcControl, ComputeServerServer, ComputeServerStatistics, InterpreterToolPrivate, IO, PrincOps, Pup USING [Address, nullAddress], PupStream USING [Sockets], Rope, RPC, RuntimeError, SymTab; ComputeServerInternal: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; STREAM: TYPE = IO.STREAM; IdleTransitionsEnabled: BOOL; ActiveServices: INT; -- count of currently active services LastActiveTime: BasicTime.GMT; myHostName: ROPE; MyNetAddressRope: ROPE; ControllerGVName: ROPE; RemoteCommandDir: ROPE; LocalCommandDir: ROPE ; OKToUseLocalDisk: BOOL; DisableIFIdle: BOOL; DisableIFIdleAfter: INT; DisableIFIdleBefore: INT; RegisteredProcObject: TYPE = ComputeServerServer.RegisteredProcObject; <<>> <> <> <> <> <<];>> RegisteredProcHandle: TYPE = REF RegisteredProcObject; PackageEntryObject: TYPE = RECORD [ package: ROPE _ NIL, dfCreate: BasicTime.GMT _ BasicTime.nullGMT, commands: LIST OF ROPE _ NIL, maintainer: LIST OF ROPE _ NIL, latestVersion: ROPE _ NIL, runVersion: ROPE _ NIL, exclusive: BOOL _ FALSE, maxCountActive: INT _ 10000, nowActive: INT _ 0 ]; PackageEntry: TYPE = REF PackageEntryObject; PackageTable: SymTab.Ref; CmdEntryObject: TYPE = RECORD [ service: ROPE _ NIL, package: ROPE _ NIL, version: ROPE _ NIL, firstTime: BOOL _ TRUE, doQueueing: BOOL _ FALSE, okToQueuePosted: BOOL _ FALSE ]; CmdEntry: TYPE = REF CmdEntryObject; ConfigEntryObject: TYPE = RECORD [ package: ROPE _ NIL, dfCreate: BasicTime.GMT _ BasicTime.nullGMT, maintainer: LIST OF ROPE _ NIL ]; ConfigEntry: TYPE = REF ConfigEntryObject; ConfigTable: PUBLIC SymTab.Ref; ActiveServicesListBase: ActiveServicesItem ; ActiveServicesItem: TYPE = REF ActiveServicesItemObject; ActiveServicesPointer: TYPE = LONG POINTER TO ActiveServicesItemObject; StreamEOFState: TYPE = {true, pending, false}; ActiveServicesItemObject: TYPE = RECORD [ next: ActiveServicesItem, callbacksInterface: ComputeServerCallbacksRpcControl.InterfaceRecord _ NIL, listenerPupAddress: Pup.Address, startListenGMT: BasicTime.GMT, sockets: PupStream.Sockets, heardDoService: BOOL _ FALSE, debugItem: BOOL _ FALSE, quitRendezvousAttempt: BOOL _ FALSE, rendezvousDone: BOOL _ FALSE, h: InterpreterToolPrivate.Handle _ NIL, originalListenerPupAddress: Pup.Address _ Pup.nullAddress, procHandle: RegisteredProcHandle, msg: ROPE _ NIL, success: ComputeServerClient.RemoteSuccess, remoteStream: IO.STREAM _ NIL, clientNetAddressRope: ROPE _ NIL, clientMachineName: ROPE _ NIL, userName: ROPE _ NIL, packageEntry: PackageEntry, commandEntry: CmdEntry, inEOF: BOOL _ FALSE, outEOF: StreamEOFState _ false, flushCounter: INT _ -1, outStreamBusy: BOOL _ FALSE, doingEnumerate: BOOL _ FALSE, callOver: BOOL _ FALSE, pleaseAbort: BOOL _ FALSE, request: LIST OF ComputeServer.Request ]; CurrentRequests: LIST OF ComputeServer.Request; BufStreamData: TYPE = REF BufStreamDataObject; BufStreamBufferSize: CARDINAL = 1024; -- must be a power of 2 and match BufStreamBufferSizeMask BufStreamBufferSizeMask: INT = 1777B; -- must match BufStreamBufferSize bufStreamState: TYPE = {true, pending, false}; BufStreamDataObject: TYPE = RECORD [ inPointer: CARD _ 0, outPointer: CARD _ 0, EOF: bufStreamState _ false, listenerItem: ActiveServicesItem, buffer: ARRAY [0..BufStreamBufferSize) OF CHAR _ ALL[' ], backUpChars: LIST OF CHAR _ NIL ]; CommandTable: SymTab.Ref; -- knowing a command, find the package/version MarkGuestProcess: PROC [process: PROCESS, data: LONG POINTER] RETURNS [ok: BOOL _ TRUE, oldData: LONG POINTER]; <> IsGuestProcess: PROC [] RETURNS [isGuest: BOOL] ; GetGuestProcessData: PROC [process: PROCESS] RETURNS [data: LONG POINTER]; MarkProcessNotGuest: PROC [process: PROCESS]; <> RemoveMarkProcessNotGuest: PROC [process: PROCESS]; <> MarkProcessUseLocalFS: PROC [process: PROCESS]; <> RemoveMarkProcessUseLocalFS: PROC [process: PROCESS]; <> AddPupAddress: PROC [serverPupAddress: Pup.Address, procHandle: RegisteredProcHandle, sockets: PupStream.Sockets] RETURNS [newItem: ActiveServicesItem]; <> DeletePupAddress: PROC [serverPupAddress: Pup.Address] RETURNS [found: BOOL]; <> MatchPupAddress: PROC [serverPupAddress: Pup.Address, flagStarted: BOOL _ FALSE] RETURNS [found: BOOL, item: ActiveServicesItem]; <> GetClientInterfaceFromCache: PROC [clientInstance: RPC.ShortROPE, forceNewInterface: BOOL _ FALSE] RETURNS [clientInterface: ComputeServerCallbacksRpcControl.InterfaceRecord _ NIL]; DeleteClientInterfaceFromCache: PROC [clientInterface: ComputeServerCallbacksRpcControl.InterfaceRecord] RETURNS [gotIt: BOOL _ FALSE]; findDebuggerItemFromInterpreterHandle: PROC [h: InterpreterToolPrivate.Handle] RETURNS [found: BOOL, item: ActiveServicesItem _ NIL]; KillOldUnstartedServices: PROC; inStreamProcs: REF IO.StreamProcs; outStreamProcs: REF IO.StreamProcs; inCharsAvail: PROC [self: STREAM, wait: BOOL] RETURNS [INT]; inBufGetChar: PROC [self: STREAM] RETURNS [ch: CHAR]; outBufPutChar: PROC [self: STREAM, char: CHAR]; ControllerInterface: ComputeServerControllerRpcControl.InterfaceRecord; ServiceEnabled: BOOL; SendStats: PROC [] RETURNS [success, terminateService, newPackage: BOOL, queueingCommands: LIST OF Rope.ROPE]; InitStats: PROC [myName: RPC.ShortROPE, myAddress: RPC.ShortROPE] ; InitCommands: PROC [remoteCommandDirectory, localCommandDirectory: Rope.ROPE] RETURNS [msg: Rope.ROPE _ NIL] ; getNewPackages: PROC; MyCatcher: RuntimeError.UCSProc; SummonerServerMonitor: PROC; ReportServerEvent: PROC [type: ComputeServerStatistics.ServerEventType, command: Rope.ROPE, startTime: BasicTime.GMT, endTime: BasicTime.GMT, remoteMachineName: Rope.ROPE, userName: Rope.ROPE]; END. <> <> <<>> <> < change BufStreamDataObject to use CARD>> <<, bufStreamState>> <<>> <> <> <<>> <<>>