SharedObject com Flash Media Server

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

Mais códigos e PDFs clique aqui.

ActionScript 3.0, Flash, Flash Media Server

1 comment


Leave a Reply