Ola Pablo,

Você sabe a versão paga, quantas conecções consecutivas ele aguenta?
Quais os limites?

Obrigado,

Rogério




On 9/3/07, Pablo Faria <[EMAIL PROTECTED]> wrote:
>
> Primeiramente vamos saber o que é FMS (Flash Media Server)
>
>  O Flash Media Server é um servidor de Streaming, nele é possível
> fazer:
>
>     · Aplicações de áudio e vídeo interativas
>     · Mídia em tempo real
>     · Vídeo e áudio "on Demand"
>     · Aplicações de colaboração
>     · Chats via webcam
>
> Ele é muito usado em aplicações feitas em Flash, mais nós podemos
> também usá-lo em aplicações feitas em Flex.
>
> A primeira coisa a se fazer é baixar o instalador:
>
> https://www.adobe.com/cfusion/tdrc/index.cfm?product=flashmediaserver
>
> Ele é gratuito para desenvolvedores, dá até 10 conexões simultãneas
> sem cobrar nada.
>
> Após a instalação vamos começar a programação:
>
> primeiro no Flex:
>
> Crie um arquivo chamado flexFCS.mxml
>
> nele escreva o seguinte código
>
> <?xml version="1.0" encoding="utf-8"?>
>
> <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml"; width="650"
> height="516" creationComplete="init();" backgroundColor="#e6e6e6">
>
>         <mx:Script>
>
>              <![CDATA[
>
>                         import mx.collections.ArrayCollection;
>
>                                 import flash.net.*;
>
>                                 import flash.events.*;
>
>                                 import flash.utils.*;
>
>                                 import mx.controls.*;
>
>                                 import mx.core.UIComponent;
>
>
>
>                     // Current release of FMS only understands AMF0 so tell
> Flex to
>
>                                 // use AMF0 for all NetConnection, NetStream, 
> and SharedObject
> objects.
>
>                                 NetConnection.defaultObjectEncoding =
> flash.net.ObjectEncoding.AMF0;
>
>                                 //NetStream.defaultObjectEncoding     =
> flash.net.ObjectEncoding.AMF0;
>
>                                 SharedObject.defaultObjectEncoding  =
> flash.net.ObjectEncoding.AMF0;
>
>
>
>                                 // echoResponder is used when nc.call("echo", 
> echoResponder ...)
> is called.
>
>                                 private var echoResponder:Responder = new 
> Responder(echoResult,
> echoStatus);
>
>
>
>                                 // SharedObject and NetConnection vars
>
>                                 private var nc:NetConnection;
>
>                                 public var ro:SharedObject;
>
>
>
>                     private function init():void
>
>                     {
>
>                                         writeln("Initializing application... 
> in player: " +
> flash.system.Capabilities.version + "\n");
>
>                                         // create new connection to FMS and 
> add listeners
>
>                         nc = new NetConnection();
>
>                                         
> nc.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
>
>                                         
> nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
> netSecurityError);
>
>                     }
>
>
>
>                         /**
>
>                          * connect is called whenever the connectButton is 
> pressed
>
>                          * and decides what to do based on the current label 
> of the
> button.
>
>                          * NOTE: the rtmp address is in this function. Change 
> it if
> you need to.
>
>                          */
>
>                     private function connect():void
>
>                     {
>
>                                 if(userName.text == ""){
>
>                                         Alert.show("Please enter a user 
> name.");
>
>                                         return;
>
>                                 }
>
>                                 switch(connectButton.label){
>
>                                         case "Connect":
>
>                                                 connectButton.label = "Wait";
>
>                                                 connectButton.enabled = false;
>
>                                                 
> nc.connect("rtmp://localhost/chat_test", userName.text);
>
>                                                 nc.client = this;
>
>                                         break;
>
>                                         case "Disconnect":
>
>                                                 connectButton.label = 
> "Connect";
>
>                                                 connectButton.enabled = true;
>
>                                                 nc.close();
>
>                                         break;
>
>                                 }
>
>                     }
>
>
>
>                     private function
> netSecurityError(event:SecurityErrorEvent):void {
>
>                             writeln("netSecurityError: " + event);
>
>                         }
>
>
>
>                     /**
>
>                                  * This method could be named anything - even 
> onStatus. I've named
> it
>
>                                  * netStatus as in Dave Simmons example. In 
> the docs they use the
>
>                                  * name netStatusHandler. Instead of 
> receiving an information
> object
>
>                                  * it is passed an event that contains the 
> information object.
>
>                                  */
>
>                                 private function 
> netStatus(event:NetStatusEvent):void
>
>                                 {
>
>                                         // Write out information about 
> connection events:
>
>                             writeln("netStatus: " + event);
>
>                             var info:Object = event.info;
>
>                             for(var p:String in info) {
>
>                                 writeln(p + " : " + info[p]);
>
>                             }
>
>                             writeln("");
>
>
>
>                                         switch (info.code)
>
>                                         {
>
>                                                 case 
> "NetConnection.Connect.Success" :
>
>                                                         connectButton.label = 
> "Disconnect";
>
>                                         connectButton.enabled = true;
>
>                                         sendButton.enabled = true;
>
>
>
>                                         writeln("Connecting non-persistent 
> Remote
> SharedObject...\n");
>
>                                                         ro = 
> SharedObject.getRemote("ChatUsers", nc.uri);
>
>                                                         if(ro){
>
>                                                                 
> ro.addEventListener(SyncEvent.SYNC, OnSync);
>
>                                                                 
> ro.connect(nc);
>
>                                                                 ro.client = 
> this; // refers to the scope of application and
> public funtions
>
>                                                         }
>
>                                                         getServerTime(); // 
> get local time
>
>                                                    break;
>
>                                                 case 
> "NetConnection.Connect.Closed" :
>
>                                                         connectButton.label = 
> "Connect";
>
>                                         connectButton.enabled = true;
>
>                                         sendButton.enabled = false;
>
>                                                    break;
>
>                                                 case 
> "NetConnection.Connect.Failed" :
>
>                                                    break;
>
>                                                 case 
> "NetConnection.Connect.Rejected" :
>
>                                                    break;
>
>                                                 default :
>
>                                                    //statements
>
>                                                    break;
>
>                                         }
>
>                                 }
>
>
>
>                                 private function OnSync(event:SyncEvent):void
>
>                                 {
>
>                                         // Show the ChangeList:
>
>                                         var info:Object;
>
>                                         var currentIndex:Number;
>
>                                         var currentNode:Object;
>
>                                         var changeList:Array = 
> event.changeList;
>
>                                         var temp:Array = new Array();
>
>
>
>                                         writeln("---- Shared Object Data 
> -----");
>
>                                         for(var p:String in ro.data){
>
>                                                 writeln("OnSync> RO: " + p + 
> ": " + ro.data[p]);
>
>                                                 temp.push(ro.data[p]);
>
>                                         }
>
>                                         this.usersList.dataProvider = temp; 
> //update list of users
>
>
>
>                                         for (var i:Number=0; i < 
> changeList.length; i++)
>
>                                         {
>
>                                                 info =  changeList[i];
>
>                                                 for (var k:String in info){
>
>                                                         writeln("OnSync> 
> changeList[" + i + "]." + k + ": " + info[k]);
>
>                                                 }
>
>                                         }
>
>                                 }
>
>
>
>                                 /** echoResult is called when the 
> echoResponder gets a result from
> the nc.call("echoMessage"..) */
>
>                         private function echoResult(msg:String):void{
>
>                                 writeln("echoResult: " + msg + "\n");
>
>                                 this.serverTime.text = msg;
>
>                         }
>
>
>
>                         /** echoResult is called when the echoResponder gets 
> a error
> after a nc.call("echoMessage"..) */
>
>                         private function echoStatus(event:Event):void{
>
>                                 writeln("echoStatus: " + event);
>
>                         }
>
>
>
>                                 /** sendMessage is called when the sendButton 
> is pressed to test
> ns.send */
>
>                                 private function sendMessage():void{
>
>                                         // call our remote function and send 
> the message to all connected
> clients
>
>                                         nc.call("msgFromClient", null, 
> sendMessageInput.text);
>
>                                         sendMessageInput.text = "";
>
>                                 }
>
>
>
>                                 /** get server tme  */
>
>                                 private function getServerTime():void{
>
>                                         nc.call("getServerTime", 
> echoResponder,  sendMessageInput.text);
>
>                                 }
>
>
>
>                                 /** showMessage is the function called by the 
> inStream. See the
> netStatus function */
>
>                                 public function showMessage(msg:String):void{
>
>                                         writeln("showMessage: " + msg + "\n");
>
>                                 }
>
>
>
>                                 public function setUserID(msg:Number):void{
>
>                                         writeln("showMessage: " + msg + "\n");
>
>                                 }
>
>
>
>                                 public function setHistory(msg:String):void{
>
>                                         writeln("showHistory: " + msg + "\n");
>
>                                 }
>
>
>
>                                 public function msgFromSrvr(msg:String):void{
>
>                                         writeMessage(msg);
>
>                                 }
>
>
>
>                                 /**
>
>                                  * writeln writes text into the traceArea 
> TextArea instead of
> using trace.
>
>                                  * Note to get scrolling to the bottom of the 
> TextArea to work
> validateNow()
>
>                                  * must be called before scrolling.
>
>                                  */
>
>                                 public function writeln(msg:String):void{
>
>                                         traceArea.text += msg + "\n";
>
>                                         traceArea.validateNow();
>
>                                         traceArea.verticalScrollPosition =
> traceArea.maxVerticalScrollPosition;
>
>                                 }
>
>
>
>                                 /**
>
>                                  * writeMessage writes text into the main 
> chat text area
>
>                                  */
>
>                                 public function writeMessage(msg:String):void{
>
>                                         messageArea.text += msg + "\n";
>
>                                         messageArea.validateNow();
>
>                                         messageArea.verticalScrollPosition =
> messageArea.maxVerticalScrollPosition;
>
>                                 }
>
>              ]]>
>
>      </mx:Script>
>
>         <mx:List width="127" height="210" x="513" y="66" id="usersList"/>
>
>         <mx:TextArea width="495" height="210" id="messageArea"
> wordWrap="true" x="10" y="66"/>
>
>         <mx:TextInput text="hello" id="sendMessageInput"  width="366" x="77"
> y="284"/>
>
>         <mx:Button label="Send" id="sendButton" enabled="false"
> click="sendMessage();" x="451" y="284"/>
>
>         <mx:TextInput id="serverTime"  width="243" x="397" y="10"/>
>
>         <mx:Button label="Connect" id="connectButton" click="connect();"
> x="212" y="10" width="90"/>
>
>         <mx:TextInput x="10" y="10" width="194" id="userName"/>
>
>         <mx:TextArea width="630" height="156" id="traceArea" wordWrap="true"
> x="10" y="350"/>
>
>         <mx:Label x="10" y="324" text="Trace Window" fontWeight="bold"/>
>
>         <mx:Label x="10" y="40" text="Message Window" fontWeight="bold"/>
>
>         <mx:Label x="513" y="40" text="Users" fontWeight="bold"/>
>
>         <mx:Label x="319" y="12" text="Local Time:"/>
>
>         <mx:Label x="10" y="286" text="Message:"/>
>
> </mx:Canvas>
>
>
>
> Agora vamos fazer uma tela pra abrir essa outra tela.
> Crie o arquivo main.mxml
> nele escreva o seguinte código
>
> <?xml version="1.0" encoding="utf-8"?>
>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> layout="absolute" xmlns:ns1="*" viewSourceURL="srcview/index.html">
>
>         <ns1:flexFCS y="10" horizontalCenter="0">
>
>         </ns1:flexFCS>
>
> </mx:Application>
>
>
>
> Agora a parte Flex está pronta. Vamos mexer agora com a programação
> para o FMS.
> No servidor FMS trabalhamos com arquivos .asc, Action Script
> Communication
>
> Crie um arquivo main.asc e digite o seguinte código:
>
> Client.prototype.getServerTime = function(msg){
>
>         var now = new Date();
>
>         return now.toString();
>
> }
>
>
>
> application.onAppStart = function()
>
> {
>
>         trace("Begin sharing text");
>
>
>
>         // Get the server shared object 'users_so'
>
>         application.users_so = SharedObject.get("ChatUsers");
>
>
>
>         // Initialize the history of the text share
>
>         application.history = "";
>
>
>
>         // Initialize the unique user ID
>
>         application.nextId = 0;
>
> }
>
>
>
> application.onConnect = function(newClient, userName)
>
> {
>
>         // Make this new client's name the user's name
>
>         newClient.name = userName;
>
>
>
>         // Create a unique ID for this user while incrementing the
>
>         // application.nextID.
>
>         newClient.id = "u" + application.nextId++;
>
>
>
>         // Update the 'users_so' shared object with the user's name
>
>         application.users_so.setProperty(newClient.name, userName);
>
>
>
>         // Accept the client's connection
>
>         application.acceptConnection(newClient);
>
>
>
>         // Call the client function 'setHistory,' and pass
>
>         // the initial history
>
>         newClient.call("setHistory", null, application.history);
>
>
>
>         // The client will call this function to get the server
>
>         // to accept the message, add the user's name to it, and
>
>         // send it back out to all connected clients.
>
>         newClient.msgFromClient = function(msg) {
>
>                 msg = userName + ": " + msg + "\n";
>
>                 application.history += msg;
>
>                 application.users_so.send("msgFromSrvr", msg);
>
>         }
>
> }
>
>
>
> application.onDisconnect = function(client)
>
> {
>
>         trace("disconnect: " + client.name);
>
>         application.users_so.setProperty(client.name, null);
>
> }
>
>
> Vá no diretório de instalação do FMS (Ex.: C:\Arquivos de Programas
> \Macromedia\Flash Media Server 2\)
> abra o diretório applications
>
> crie uma pasta chamada chat_test e dentro dela coloque o arquivo
> main.asc que acabou de criar
>
> Vá em Iniciar > Programas > Macromedia > Flash Media Server 2 >
> Management Console
>
> Coloque o login e senha que colocou na instalação.
>
> Na primeira tela na parte de baixo tem um combo onde está escrito New
> Instance
> Clique nele e selecione a pasta que acabou de criar "chat_test"
>
> Agora sua aplicação já está carregada no FMS.
>
> Agora coloque os swfs gerados pelos arquivos mxml e coloque em um
> servidor qualquer.
>
> Usei aqui o php (só como exemplo)
>
> crieu uma  pasta dentro de www chamada chatFlex e coloquei os swfs
> dentro dela
>
> Agora é só abrir http://localhost/chatFlex/main.swf
>
> Ta aí um chat em Flex e FMS.
>
> Qualquer dúvida tamos aí
>
>
> On Sep 3, 7:09 am, Pablo Faria <[EMAIL PROTECTED]> wrote:
> > Eu consegui fazer um chat. Pra isso usei FMS.  É bem fácil
> > To escrevendo um artigo pra colocar no meu blog, passo a passo como
> > fazer
> >
> > http://javapablo.blogspot.com/
> >
> > Quando tiver terminado eu te respondo denovo
> >
> > Valeu
> >
> > On Sep 1, 11:25 am, Alan Granadeiro <[EMAIL PROTECTED]>
> > wrote:
> >
> > > Galera,
> >
> > > A um tempo atras na lista tinha alguem desenvovlendo um chat em Flex.
> >
> > > Alguem sabe se a pessoa conseguiu? Usou HTTP?
> >
> > > Forte abraço,
> >
> > > Alan de Melo Granadeiro
> > > Desenvovledor Web
> >
> > >       Flickr agora em português. Você clica, todo mundo 
> > > vê.http://www.flickr.com.br/
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Responder a