SharedObject é um recurso que dar ao Flash Player a capacidade de salvar dados localmente para poder ser usado posteriormente em sua aplicação, a grosso modo é como um cookie. Com o Flash Media Server, foi introduzido a possibilidade de usar o SharedObject Remote, no qual os dados são salvos no servidor Flash Media Server e compartilhados para todas as instâncias de uma conexão entre o Flash Player e o Flash Media Server. Isso possibilita a criação de aplicativos em real time como Dashboards, chats e o que mais a imaginação permitir.
O uso do SharedObject Remote pode ser usado de duas maneiras em conjunto com o Adobe Flash Media Server.
- Somente pelo lado cliente, através do Flash Player/AIR
- Em conjunto com ActionScript Communication, linguagem de servidor do Flash Media Server
Vejamos o primeiro caso:
Através do lado cliente, através do Flash Player/AIR
Caso você não tenha conhecimento para usar a linguagem Server-side do Flash Media Server, é possÃvel utilizar o SharedObject Remote somente pelo ActionScript 3.0. Vamos a um exemplo clássico sharedBall, onde o objetivo é compartilhar as posições da bolinha a atualizar nos outros clientes conectados a mesma instância.
- Vá até o diretório de instalação do Flash Media Server e procure pela pasta “applications”, lá crie um diretório chamado “sharedBall”, dentro dele um arquivo chamado “main.asc”
- Abra o main.asc no seu editor de textos de preferencia ou pelo próprio Flash e digite: trace(“sharedBall…”);
- Vamos testar esse arquivo, abra o console do Flash Media Server, geralmente fica localizado no diretorio de instalação/webrrot/swfs. Você pode abrir pelo browser ou o swf diretamente.
- Clique no botão “View Applications” e em seguida procure o nome “sharedBall” no combobox logo no canto inferior esquerdo onde está escrito “New Instance…”
- Selecione “sharedBall” e deveremos ter na aba Live Log algo como na imagem abaixo:
- No Flash, criei uma bola com as ferramentas de desenho e converti para MovieClip dando o nome de “mc_ball”.
- Estamos prontos para começar a integração entre o Flash e o Flash Media Server. Crie um layer para o ActionScript e abra o editor apertando F9 ou “Window->Actions”
- Nosso código começa com a conexão com o servidor Flash Media Server
[ACTIONSCRIPT3]
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
var nc:NetConnection;
function init():void
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
nc.connect(“rtmp://localhost/sharedBall”);
}
function handlerNetStatus(evt:NetStatusEvent):void
{
trace(evt.info.code);
}
init();
[/ACTIONSCRIPT3]
Feito isso, podemos testar o swf apertando Ctrl+Enter, se tudo correr bem, deveremos ter a seguinte mensagem no output do Flash:
NetConnection.Connect.Success
Com a conexão feita, podemos instanciar o nosso SharedObject Remote para compartilhar as posições de x e y da bolinha.
[ACTIONSCRIPT3]
if(evt.info.code == “NetConnection.Connect.Success”)
{
so = SharedObject.getRemote(“so”,nc.uri,false);
so.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
so.addEventListener(SyncEvent.SYNC, handlerSync);
so.connect(nc);
}
[/ACTIONSCRIPT3]
O handlerSync é responsável por atualizar os dados de x e y pegaremos do SharedObject Remote:
[ACTIONSCRIPT3]
function handlerSync(evt:SyncEvent):void
{
mc_ball.x = so.data.x;
mc_ball.y = so.data.y;
}
[/ACTIONSCRIPT3]
Daremos a opção de ao clicar na bolinha, que ela possa ser arrastável, em seguida atualizaremos as posições de x e y no SharedObject Remote:
[ACTIONSCRIPT3]
mc_ball.addEventListener(MouseEvent.MOUSE_DOWN, handlerSharedBall);
mc_ball.addEventListener(MouseEvent.MOUSE_UP, handlerSharedBallOut);
function handlerSharedBall(evt:MouseEvent):void
{
this.addEventListener(Event.ENTER_FRAME, update);
mc_ball.startDrag();
}
function handlerSharedBallOut(evt:MouseEvent):void
{
mc_ball.stopDrag();
}
function update(evt:Event=null):void
{
so.setProperty(“x”,mc_ball.x);
so.setProperty(“y”,mc_ball.y);
}
[/ACTIONSCRIPT3]
Segue o código completo:
[ACTIONSCRIPT3]
import flash.net.NetConnection;
import flash.events.NetStatusEvent;
import flash.net.SharedObject;
import flash.events.SyncEvent;
import flash.events.MouseEvent;
import flash.events.Event;
var nc:NetConnection;
var so:SharedObject;
function init():void
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
nc.connect(“rtmp://localhost/sharedBall”);
}
function handlerNetStatus(evt:NetStatusEvent):void
{
trace(evt.info.code);
if(evt.info.code == “NetConnection.Connect.Success”)
{
so = SharedObject.getRemote(“so”,nc.uri,false);
so.addEventListener(NetStatusEvent.NET_STATUS, handlerNetStatus);
so.addEventListener(SyncEvent.SYNC, handlerSync);
so.connect(nc);
}
}
function handlerSync(evt:SyncEvent):void
{
mc_ball.x = so.data.x;
mc_ball.y = so.data.y;
}
mc_ball.addEventListener(MouseEvent.MOUSE_DOWN, handlerSharedBall);
mc_ball.addEventListener(MouseEvent.MOUSE_UP, handlerSharedBallOut);
function handlerSharedBall(evt:MouseEvent):void
{
this.addEventListener(Event.ENTER_FRAME, update);
mc_ball.startDrag();
}
function handlerSharedBallOut(evt:MouseEvent):void
{
mc_ball.stopDrag();
}
function update(evt:Event=null):void
{
so.setProperty(“x”,mc_ball.x);
so.setProperty(“y”,mc_ball.y);
}
init();
[/ACTIONSCRIPT3]
Veja uma demostração em funcionamento:
Compre o Arquivo fonte de exemplo por R$4,99
[wp_cart:Arquivo Fonte sharedBall.fla:price:4.99:end]
Mais códigos e PDFs clique aqui.
Muito legal esse post.