<> <> <> DIRECTORY Lark, LarkPlay, Pup USING [ Net, Host ], RPC USING [ InterfaceName ], Thrush USING [ ConversationHandle, ConvEvent, ConvEventBody, Disposition, IntervalSpecBody, PartyHandle, SHHH, SmartsHandle, unencrypted ] ; ThSmarts: CEDAR DEFINITIONS = { <> ConvEvent: TYPE = Thrush.ConvEvent; ConvEventBody: TYPE = Thrush.ConvEventBody; IntervalSpecBody: TYPE = Thrush.IntervalSpecBody; SmartsHandle: TYPE = Thrush.SmartsHandle; SHHH: TYPE = Thrush.SHHH; none: SHHH = Thrush.unencrypted; <Smarts interfaces are one=>many, the Party must be able to import instances of Smarts interfaces. These types are really Lupine-generated interface records. They are defined opaquely here to avoid circular Defs dependencies. See ThParty.Register*[].>> <<>> SmartsInterface: TYPE=REF SmartsInterfaceRecord; SmartsInterfaceRecord: TYPE = RPC.InterfaceName; <> <> PartyHandle: TYPE = Thrush.PartyHandle; ConversationHandle: TYPE = Thrush.ConversationHandle; Disposition: TYPE = Thrush.Disposition; Machine: TYPE = RECORD [ net: Pup.Net, host: Pup.Host ]; <> SmartsProperties: TYPE=RECORD[ x: SELECT role: SmartsRole FROM backstop, supervisor=> NULL, voiceTerminal, manager => [ netAddress: Machine_ ], ENDCASE ]; <<>> SmartsRole: TYPE={backstop, voiceTerminal, manager, supervisor}; <> <> <> <>>> <> <> <<>> <> Progress: PROC[ <> shh: SHHH_none, smartsID: Thrush.SmartsHandle, event: ConvEvent, yourParty: BOOL, -- TRUE if this event deals with your party. latestEvent: BOOL, -- TRUE if at time of call, this is latest known event for this conv. informationOnly: BOOL_FALSE -- TRUE if higher priority smarts has already acted. <> ] RETURNS [ d: Disposition ]; }. <> <> <> <<>>