The starting point is a dynamically-typed, extensible descriptor format called an AEDesc, which is just an OSType code specifying the data type, together with a block of type-dependent data. For instance, the OSType code 'inte' indicated that the data was a four-byte signed integer in big-endian format.
Besides predefined type codes for various common simple types, there are two predefined structured descriptor types: an AERecord, which had data type 'reco' (record), and AEList with type 'list' (list or array). The internal structure of these contain recursively-nested AEDescs, while the AERecord also associated each element with a unique record field ID, which is an OSType. The Apple Event Manager provids API calls to construct these structures, as well as extract their contents and query the type of contents they hold.
The Apple Event Manager also supports coercions, which converts AEDescs from one data type to another. In addition to standard coercions (for instance between integer and real types), applications can install their own coercion handler callbacks, which could for example handle conversions to and from custom data types.
An Apple Event proper is an AERecord with fields that depended on the purpose of the event. In addition, it has attributes (which are distinct from record fields, which are now called the parameters of the event) from a set predefined by the Apple Event Manager, specifying such things as the event type and class codes which indicates what the event is supposed to do (both OSTypes), the target address to which the event is to be sent (which could be a process on the local or a remote machine), and various other options for handling it. Remote machines initially had to be connected via AppleTalk, but Mac OS 9 added the option for connections via TCP/IP.
After sending an AppleEvent to its target process, the sending process could elect to receive a reply. This is also an Apple Event, which could contain various bits of information returned from the target about the processing of the request event, including an error code indicating success/failure, or any other appropriate information.
Sources and References
|This page uses Creative Commons Licensed content from Wikipedia. (view authors)|