<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
       creationComplete="onCreationComplete(event)" viewSourceURL="srcview/index.html">
       
       <mx:Script>
              <![CDATA[
                   import flash.net.registerClassAlias;
                   import mx.rpc.remoting.mxml.RemoteObject;
                   import weborb.messaging.WeborbProducer;
                   import mx.messaging.messages.AsyncMessage;
                   import mx.messaging.ChannelSet;
                   import weborb.messaging.WeborbMessagingChannel;
                   import weborb.messaging.WeborbConsumer;
                   import mx.controls.Alert;
                   import mx.rpc.events.FaultEvent;
                   import mx.rpc.events.ResultEvent;
                   import mx.messaging.events.MessageFaultEvent;
                   import mx.messaging.events.MessageAckEvent;
                   import mx.messaging.events.MessageEvent;
                   import mx.messaging.events.ChannelFaultEvent;
                   import mx.events.FlexEvent;
                     
                 public var producer:WeborbProducer;
                 public var consumer:WeborbConsumer;
                       
                 public function onCreationComplete(event:FlexEvent):void {
                       registerClassAlias("Messaging.Car", Car);
                       pingWeborb();
                 }      
                 
                 private function pingWeborb():void {
                       var ro:RemoteObject = new RemoteObject("GenericDestination");
                       ro.source = "Weborb.Management.ManagementService";
                       ro.endpoint = "http://{server.name}/indiegroup-edumatic3-prod/weborb.aspx";
                       ro.ping.addEventListener(ResultEvent.RESULT, onPingResult);
                          ro.ping.addEventListener(FaultEvent.FAULT, onPingFault);
                       ro.ping();
                 }
                 
                 private function connectAsProducer(subTopic:String):void{
                       var cs:ChannelSet = new ChannelSet();
                       var uri:String = "rtmp://{server.name}:2037/MessagingService";
                       var channel:WeborbMessagingChannel = new WeborbMessagingChannel(subTopic, uri);
                       cs.addChannel(channel);
                       
                       producer = new WeborbProducer();
                       producer.channelSet = cs;
                       producer.destination = "ExampleDestination";
                       producer.subqueue = subTopic;
                       producer.addEventListener(MessageAckEvent.ACKNOWLEDGE, onMessageAck);
                       producer.addEventListener(MessageFaultEvent.FAULT, onMessageFault);
                       var car:Car = new Car();
                       car.Make = "Zakke";
                       car.Mileage = 10;
                       car.Model = "Makke";
                       producer.send(new AsyncMessage(car));
                 }
     
                 private function connectAsConsumer(subTopic:String):void{
                       var cs:ChannelSet = new ChannelSet();
                       var uri:String = "rtmp://{server.name}:2037/MessagingService";
                       var channel:WeborbMessagingChannel = new WeborbMessagingChannel(subTopic, uri);
                       channel.addEventListener(MessageEvent.MESSAGE, onMessage);
                       cs.addChannel(channel);
                       
                       consumer = new WeborbConsumer();
                       consumer.channelSet = cs;
                       consumer.destination = "ExampleDestination";
                       consumer.subqueue = subTopic;
                       consumer.addEventListener(MessageAckEvent.ACKNOWLEDGE, onMessageAck);
                       consumer.addEventListener(MessageFaultEvent.FAULT, onMessageFault);
                       consumer.subscribe(); 
                 }                 
     
                 private function onChannelFault(event:ChannelFaultEvent):void {
                        
                 }
     
                 private function onMessage(event:MessageEvent):void {
                       trace(event.message.body);
                       //var body:* = event.message.body;
                 }
                 
                 private function onMessageAck(event:MessageAckEvent):void {
                       
                 }
                 
                 private function onMessageFault(event:MessageFaultEvent):void {
                       
                 }
                 
                 private function onPingResult(result:ResultEvent):void {
                       connectAsConsumer("johleromessagingqueue");
                       connectAsProducer("johleromessagingqueue");
                 }
                 
                 private function onPingFault(fault:FaultEvent):void {
                       Alert.show( "Server reported an error - " + fault.fault.faultDetail);
                 }                    
                 
                     
              ]]>
       </mx:Script>
       
</mx:Application>