<> <> <> <> <> <<>> DIRECTORY Jukebox USING [ IntervalSpecBody, VoiceDirection ], MBQueue USING [ Queue ], Rope USING [ ROPE ], Thrush USING [ ConversationID, ConvEventBody, Credentials, EncryptionKey, KeyTable, NB, nullConvID, PartyID, SmartsID, SHHH ], ThSmarts, VoiceStream USING [ Handle ] ; BluejaySmarts: CEDAR DEFINITIONS = { <> JayInfo: TYPE = REF JayInfoBody; JayInfoBody: TYPE = RECORD [ credentials: Thrush.Credentials, shh: Thrush.SHHH, stream: VoiceStream.Handle_NIL, conversations: LIST OF ConvDesc _ NIL, intervalReqs: LIST OF IntervalReq _ NIL, notifications: MBQueue.Queue_NIL, numNotifications: INT_0, reportsExist: CONDITION, currentConvID: Thrush.ConversationID _ Thrush.nullConvID ]; infos: ARRAY[0..100) OF JayInfo; <> IntID: TYPE = LONG CARDINAL; nullIntID: IntID = 0; <> < $started and $scheduled events should be passed through to client.>> < $finished events should be passed through to client.>> << $flushed events should always be passed through if reportRequested.>> << (intended usage: multiple-interval voice ropes that result in only one sequence of client reports.)>> IntervalReq: TYPE = REF IntervalReqBody; IntervalReqBody: TYPE = RECORD [ iSpec: Jukebox.IntervalSpecBody, direction: Jukebox.VoiceDirection, cDesc: ConvDesc, requestingParty: Thrush.PartyID, -- not cDesc.situation.other, since could be more than rqstr. intID: IntID _ nullIntID, firstInterval: BOOL, lastInterval: BOOL, reportRequested: BOOL _ FALSE ]; <> ConvDesc: TYPE = REF ConvDescBody; ConvDescBody: TYPE = RECORD [ info: JayInfo, situation: Thrush.ConvEventBody, keyTable: Thrush.KeyTable_NIL, keysMightBeDistributed: CONDITION, -- for waiting for keys to distribute, see ..Impl keysDistributed: BOOL_FALSE ]; GetConversation: PROC [smartsID: Thrush.SmartsID, conv: Thrush.ConversationID] RETURNS [nb: Thrush.NB, cDesc: ConvDesc]; DistributeKey: PROC [cDesc: ConvDesc, key: Thrush.EncryptionKey, wait: BOOL_FALSE] RETURNS [nb: Thrush.NB, keyIndex: [0..17B]]; SetInterval: PROC [IntervalReq] RETURNS [nb: Thrush.NB]; }. <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<>> <<>> <<>> <<>>