flex.messaging.MessageBrokerServlet
endpointPath=/messagebroker/amf
endpoint.server(req,res) ->
flex.messaging.endpoints.BaseHTTPEndpoint
super(req,res) ->
AbstractEndPoint.service
validateRequestProtocol(req):
filterChain
flex.messaging.endpoints.amf.SerializationFilter
do the message serialization
flex.messaging.io.MessageDeserializer
flex.messaging.io.amf.Amf0Input amfIn
//AMF package header
int version=amfIn.readUnsignedShort(); //4
int headerCount=amfIn.readUnsignedShort(); //0
int bodyCount=amfIn.readUnsignedShort(); //1
//AMF message
String targetURI=amfIn.readUTF(); //null
String responseURI=amfIn.readUTF(); // /1
int length=amfIn.readInt(); //ignored
//read object
Object obj=amfIn.readObject();
flex.messaging.messages.ActionMessage
respMsg.setVersion(contect.getVersion())
BatchProcessFilter.java
Response Message
MessageBody responseBody=new MessageBody();
reponseBody.setTargetURI("/1");
next filter: SessionFilter.java
next filter: LegacyFilter.java
if (data.getClass().isArray())
int paramLength=Array.getLength(data);
//get the first object from array
Object firstObj=Array.get(data,0);
convert to ArrayList();
newParams=new ArrayList();
newParams.add(firstObj);
next filter: flex.messaging.endpoints.amf.MessageBrokerFilter
response:
flex.messaging.endpoints.amf.SerializationFilter
flex.messaging.io.MessageSerializer serializer=sc.newMessageSerializer();
serializer.initialize(sc, outBuffer, debugTrace);
serializer.writeMessage(respMesg);
flex.messaging.io.amf.AmfMessageSerializer.java
Amf0Output amfOut
amfOut.setAvmPlus(true);
amfOut.writeShort(3);
int headerCount=0;
amfOut.writeShort(headerCount);
int bodyCount=0;
amfOut.writeShort(bodyCount); //1
//write the body
String targetURI="/1/onStatus";
amfOut.writeUTF(targetURI);
String responseURI="";
amfOut.writeURF(reponseURI);
int UNKOWN_CONTENT_LENGTH=-1;
amfOut.writeInt(UNKNOWN_CONTENT_LENGTH);
amfOut.reset();
amfOut.writeObject(obj);
obj:
messages.ErrorMessage
messages.AcknowledgeMessageExt
messages.AcknowledgeMessage