Using Flex to graphically display data from url request...

Dear Experts:

I am new to programming and as well as Flex/AIR from Adobe. I am trying to build an application that will send a url request to a server and then take the information returned from the request and display that information visually.

The server we are using requires first for us to login, the url to do that is:

http://192.168.170.128:7878/command=Login&username=admin&secret=1234

The response to that request is as such:

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" message="Authentication accepted"/>
</response>
</ajax-response>

Then I want to execute the command that will return the system users, the url for that is:

http://192.168.170.128:7878/command=listusers

The response to that is as such:

<ajax-response>
<response type="object" id="unknown">
<generic response="Success" message="User list will follow"/>
</response>
<response type="object" id="unknown">
<generic event="userEntry" Usertype="Private" Username="John" Location="NJ" status="Active"/>
</response>
<response type="object" id="unknown">
<generic event="userEntry" Usertype="Private" Username="Tim" Location="CA" status="Active"/>
</response>
<response type="object" id="unknown">
<generic event="userEntry" Usertype="Public" Username="Bob" Location="VA" status="Active"/>
</response>
<generic event="UserlistComplete"  TotalUsers="3"/>
</response>
</ajax-response>

So I would like to do is this:

Have a basic AIR application that has a button that when pressed will login in the user and will return the user information showing an image for each user based on user type (Public or Private), then provide a label under that image that shows the username and location.

I hope this is enough information in advance.

Thanks,

Joel
LVL 12
Joel_SiskoAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

evcrCommented:
Not tested but should be close..
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private	var loginVars:URLVariables = new URLVariables();
 
private function goLogin():void {
	loginVars.command = 'Login';
	loginVars.username = username.text;
	loginVars.secret = secret.text;
	doLogin.send(loginVars);
}
 
private function httpResult(e:event):void {
	if (httpSvc.lastResult.response[0].generic.@message == 'Authentication accepted') {
		loginVars.command = 'listusers';
		doLogin.send(loginVars);		
	}
	if (httpSvc.lastResult.response[0].generic.@message == 'User list will follow') {
		trace (httpSvc.lastResult.response[1].generic.@event);
		trace (httpSvc.lastResult.response[1].generic.@Usertype);
		trace (httpSvc.lastResult.response[2].generic.@event);
		trace (httpSvc.lastResult.response[2].generic.@Usertype);
		//etc.... 
		//should get you started
	}
}
]]>
</mx:Script>
<mx:HTTPService result="httpResult(event);" resultFormat="e4x" id="httpSvc" url="http://192.168.170.128:7878/" useProxy="false" method="POST"/>
	<mx:Button x="149" y="154" label="login" click="goLogin();"/>
	<mx:TextInput id="username" x="99" y="86" text="admin"/>
	<mx:TextInput id="secret" x="99" y="116" text="1234"/>
</mx:Application>

Open in new window

0
evcrCommented:
oops maybe i should have run it first :-) try this.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private	var httpVars:URLVariables = new URLVariables();
 
private function goLogin():void {
	httpVars.command = 'Login';
	httpVars.username = username.text;
	httpVars.secret = secret.text;
	httpSvc.send(httpVars);
}
 
private function httpResult(e:ResultEvent):void {
	if (httpSvc.lastResult.response[0].generic.@message == 'Authentication accepted') {
		httpVars.command = 'listusers';
		httpSvc.send(httpVars);		
	}
	if (httpSvc.lastResult.response[0].generic.@message == 'User list will follow') {
		trace (httpSvc.lastResult.response[1].generic.@event);
		trace (httpSvc.lastResult.response[1].generic.@Usertype);
		trace (httpSvc.lastResult.response[2].generic.@event);
		trace (httpSvc.lastResult.response[2].generic.@Usertype);
		//etc.... 
		//should get you started
	}
}
]]>
</mx:Script>
<mx:HTTPService result="httpResult(event);" resultFormat="e4x" id="httpSvc" url="http://192.168.170.128:7878/" useProxy="false" method="POST"/>
	<mx:Button x="149" y="154" label="login" click="goLogin();"/>
	<mx:TextInput id="username" x="99" y="86" text="admin"/>
	<mx:TextInput id="secret" x="99" y="116" text="1234"/>
</mx:Application>

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Joel_SiskoAuthor Commented:
evcr,

Thanks for the response. It was not working at first, so I used wireshark to capture the login from a regualr browser that works. I noticed that user FireFox is was using GET verses POST, so I changed that and now I can see on the server the request to autneticate.

The information being sent should be:

action=Login&username=admin&secret=1234

But I am getting this:

action=Login&secret=1234&username=admin

I tried switching the lines in the "goLogin()" hoping the order would rectify, but still the same result.

Joel
0
Cloud Class® Course: CompTIA Cloud+

The CompTIA Cloud+ Basic training course will teach you about cloud concepts and models, data storage, networking, and network infrastructure.

evcrCommented:
is this on a https service?

if so you should be using  'https..' etc. in the url.

Also you may need a crossdomain.xml file to allow the ip ports to converse.

e.g. try this crossdomain.xml file:
<?xml version="1.0" encoding="iso-8859-1"?>
<cross-domain-policy>
<allow-access-from domain="*" ports="80,443" secure="false" />
</cross-domain-policy>

If it works then adjust your secruity in this file respectively;
0
Joel_SiskoAuthor Commented:
evcr,

No this is on http, but I found the problem just not the solution:

        httpVars.action = 'Login';
        httpVars.usernam = 'admin;
        httpVars.secret = '1234';
        httpSvc.send(httpVars);

When the request is sent, it is putting the variables in alphabetical order, command+secret+username, where I need the order to be command+username+secret.

I confirmed this by using Zsecret instead of secret and the order was right just Zsecret will not do anything.

Joel
0
Joel_SiskoAuthor Commented:
evcr,

I have the same result using <mx:request>, that is the values are being alphabetically sorted.

Joel
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
<mx:Script>
<![CDATA[
 
private function goLogin():void {
	
        httpSvc.send();
}
 
]]>
</mx:Script>
 
<mx:HTTPService resultFormat="e4x"  id="httpSvc" url="http://192.168.170.128:8088/server/commands" showBusyCursor="true" useProxy="false" method="GET">
      <mx:request xmlns="">
            <zcommand>Login</zcommand>
            <ausername>admin</ausername>
            <password>1234</password>
      </mx:request>
</mx:HTTPService>
 
<mx:Button x="99" y="155" label="login" click="goLogin();"/>
 
</mx:WindowedApplication>

Open in new window

0
evcrCommented:

Yes I noticed that, normally it would not matter what order they were in but I guess the web service in your case isn't that sort of beast. Having said that I think it unnecessary that Flex is ordering them.

As I don't have access to your web service it's difficult to test. Could you try constructing a URLRequest from the variables and see if that works.

See code below...





//untested!
private function goLogin():void {
var requestString:String = 'http://192.168.170.128:7878/command=Login&username='+username.text+'&secret='+secret.text;
var request:URLRequest = new URLRequest(requestString);
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, httpResult);
loader.load(request);
}
 
private function httpResult(event:Event):void {
	var httpSvc:XML = XML(event.target.data);
	trace(httpSvc.toXMLString());
//If the trace is good here you can use my previous code to query the xml data
}

Open in new window

0
Joel_SiskoAuthor Commented:
evcr,

Bonehead move on my part, kept looking at captured packets verses if the connection actually worked with the server. Doh! It does in any order.

Thanks for sticking with me thorough this and all the help.

If you ever have a question on VoIP or phone systems in general follow my profile or head over to the VoIP section of EE.

Joel
0
evcrCommented:
No prob. Cheers!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Web Development

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.