@author Ruslan Babayev <ruslan@babayev.com> @copyright 2009 Ruslan Babayev @version 1.0.1 @title Action Message Format Library. @doc This library provides AMF support for Erlang. == Introduction == Action Message Format (AMF) is a compact binary format that is used to serialize ActionScript object graphs. Once serialized an AMF encoded object graph may be used to persist and retrieve the public state of an application across sessions or allow two endpoints to communicate through the exchange of strongly typed data. AMF was introduced in Flash Player 6 in 2001 and remained unchanged with the introduction of ActionScript 2.0 in Flash Player 7 and with the release of Flash Player 8. This version of AMF is referred to as AMF0. In Flash Player 9, ActionScript 3.0 was introduced along with a new ActionScript Virtual Machine (AVM+). The new data types and language features made possible by these improvements prompted AMF to be updated. Given the opportunity to relase a new version of AMF, several optimizations were also made to the encoding format to remove redundant information from serialized data. The new AMF format is referred to as AMF3. This library supports both AMF0 and AMF3. == Mapping between AMF0 and Erlang == <table border="1" width="100%"> <th>AMF0</th> <th>Erlang</th> <tr> <td>Number</td> <td>float() | '+infinity' | '-infinity' | 'qNaN' | 'sNaN'</td> </tr> <tr> <td>Bool</td> <td>true | false</td> </tr> <tr> <td>String</td> <td>binary()</td> </tr> <tr> <td>Object</td> <td>{object, Members::[{atom(), amf0()}]}</td> </tr> <tr> <td>Null</td> <td>null</td> </tr> <tr> <td>Undefined</td> <td>undefined</td> </tr> <tr> <td>ECMA Array</td> <td>[{binary(), amf0()}]</td> </tr> <tr> <td>Strict Array</td> <td>[amf0()]</td> </tr> <tr> <td>Date</td> <td>{date, MilliSecs::float(), TimeZone::integer()}</td> </tr> <tr> <td>Long String</td> <td>binary()</td> </tr> <tr> <td>Unsupported</td> <td>unsupported</td> </tr> <tr> <td>XML Document</td> <td>{xmldoc, Contents::binary()}</td> </tr> <tr> <td>Typed Object</td> <td>{object, ClassName::binary(), Members::[{atom(), amf0()}]}</td> </tr> <tr> <td>AVM+ Object</td> <td>{avmplus, amf3()}</td> </tr> </table> == Mapping between AMF3 and Erlang == <table border="1" width="100%"> <th>AMF3</th> <th>Erlang</th> <tr> <td>Undefined</td> <td>undefined</td> </tr> <tr> <td>Null</td> <td>null</td> </tr> <tr> <td>False</td> <td>false</td> </tr> <tr> <td>True</td> <td>true</td> </tr> <tr> <td>Integer</td> <td>integer()</td> </tr> <tr> <td>Double</td> <td>float() | '+infinity' | '-infinity' | 'qNaN' | 'sNaN'</td> </tr> <tr> <td>String</td> <td>binary()</td> </tr> <tr> <td>XML Document</td> <td>{xmldoc, binary()}</td> </tr> <tr> <td>Date</td> <td>{date, MilliSecs::float(), TimeZone::integer()}</td> </tr> <tr> <td>Array</td> <td>[{binary(), amf3()} | amf3()]</td> </tr> <tr> <td>Object</td> <td>{object, binary(), [{atom(), amf3()} | {binary(), amf3()}]}</td> </tr> <tr> <td>XML</td> <td>{xml, binary()}</td> </tr> <tr> <td>Byte Array</td> <td>{bytearray, binary()}</td> </tr> </table>