I've searched through Google, FMS Guru and a ton of Adobe developer tutorials. I'm a little confused as how to send variables as parameters in the sharedobject or the client object from the client side so I can grab & process the variables on the server side from within the main.asc file.
For example how would I send username, userid, gender, usertype and birthday variables to the main.asc file using AS3 from the created SWF?
From chat.mxml
private var xmlstring:String = "http://www.blah.com/xml.xml";
private var userType:String;
private var userCountText:String;
protected function getXML():void {
XML.ignoreWhitespace = true;
var myLoader:URLLoader=new URLLoader();
myLoader.load(new URLRequest(ownerstring));
myLoader.addEventListener(Event.COMPLETE, processXML);
}
protected function processXML(e:Event):void {
var myXML:XML = XML(e.target.data)
for (var i:int = 0; i<myXML.*.length(); i++){
xinstance = myXML.owner[0];
xuserid = myXML.owner[1];
xusername = myXML.owner[2];
xphoto = myXML.owner[3];
xroomowner = myXML.owner[4];
}
//xinstance = myXML.broadcastowner.owner.(@title == "instance");
//xuserid = myXML.broadcastowner.owner.(@title == "userid");
//xusername = myXML.broadcastowner.owner.(@title == "username");
//xphoto = myXML.broadcastowner.owner.(@title == "photo");
//xroomowner = myXML.broadcastowner.owner.(@title == "roomowner");
go();
}
private function initConnection(event:FlexEvent):void{
getXML();
}
private function go():void {
var fmsstring:String = "rtmp://blah.com/appname/" + xinstance;
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.connect(fmsstring);
nc.client = this;
}
protected function onNetStatus(event:NetStatusEvent):void{
trace(event.info.code);
switch(event.info.code){
case "NetConnection.Connect.Success":
publishCamera();
displayPublishingVideo();
chat_broadcastLive();
so = SharedObject.getRemote("message", nc.uri, false);
so.username = xusername;
so.userid = xuserid;
so.userType = xroomowner;
so.addEventListener(SyncEvent.SYNC, soOnSync);
so.client = this;
so.connect(nc);
//so.setProperty("userinfo",{username:xusername, userid:xuserid, userType:xroomowner});
sendBtn.addEventListener(MouseEvent.CLICK, onClickSendBtn);
break;
case "NetConnection.Connect.Closed" :
nc.call("chat.sendMessage", myResponder, xusername + " left the room");
break;
}
}
Main.asc
application.onAppstart = function(){
this.totalUserCount = 0;
}
application.onConnect = function(client, username, userid, gender, userType, birthday )
{
//userType = so.data.userinfo["userType"];
client.username = username;
client.userid = userid;
client.gender = gender;
client.userType = userType;
client.birthdaye = birthday;
if(userType="viewer"){
this.totalUserCount++;
}
client.chat = chat;
application.acceptConnection(client);
}
application.onDisconnect = function(client){
if(userType="viewer"){
this.totalUserCount--;
}
}
trace("usercount is:" + this.totalUserCount);
Using the main.asc code above I get "usercount is undefined", so I must be doing something wrong.
At least one of your problems is your assigning the value "viewer" to your userType var instead of evaluating it. eg
if(userType="viewer")
should be
if(userType == "viewer")
Also, your trace statement is likely running before you're application onStart(), so indeed your variable is undefined at that point.
In your client side code, you need to pass the arguments in the connect() function on the net connection after the connection string, so in case it would be like this:
nc.connect(fmsstring, username, userid, gender, userType, birthday);