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 -~----------~----~----~----~------~----~------~--~---
