Como mandar mensagens OSC
pelo Flash via Flosc
Primeiro, deve-se baixar o Flosc.
Existe uma base de dados Flosc no sourceforge, mas essa base está em formato .swc, só
possível de ser lido pelo Flex (hoje Builder).
Então, baixe o código oficial do site do Flosc pelo link:
http://www.benchun.net/flosc/
Depois, baixe as classes Actionscript 3 para encapsular as funcionalidades do Flosc no
link:
http://www.dustypixels.com/blog/2007/03/02/flosc-as3-classes/
Feito isso, é só importar as classes, de uma pasta para o seu projeto Actionscript do flash.
Pronto, agora você está pronto para começar a enviar mensagens flosc!
No flash, você tem que fazer necessariamente 4 coisas:
•
•
•
•
Estabelecer uma conexão com o cliente (“enviador”) / servidor (“receptor”);
Criar um pacote com os dados.
Enviar pacotes pela conexão.
Receber pacotes pela conexão.
Para estabelecer uma conexão:
Dentro das classes AS3 que você importou deve estar uma que se chama
OSCConnection. Essa classe deve ser instanciada para que a conexão comece. Para
isso, use o comando:
var tal:OSCConnection = new OSCConnection(IP, port);
E essa variável tal vai conter todas as informações para que se crie uma nova conexão
para enviar mensagens OSC, ou seja, tal é a instância da classe OSCConnection. Os
parâmetros são: o endereço IP onde está o cliente/servidor, e a porta de rede por onde
serão passadas as informações (que deverá ser a mesma porta do outro lado da
conexão).
Mas a conexão ainda não está pronta. Para que ela tente se estabelecer você precisa
usar a seguinte função dessa classe:
tal.connect();
Caso não houve nenhum erro durante a conexão, você está pronto para receber e enviar
mensagens.
Para criar um pacote de dados OSC:
Todos os dados OSC são transferidos pelas portas através de conjuntos de dados
chamados pacotes. Para criar um, deve-se primeiro criar uma instância da classe
OSCPacket.
var pacote:OSCPacket = new OSCPacket(/*<aqui varia dependendo da
implementação>*/);
Quanto à estrutura de um pacote OSC, existem pelo menos duas implementações
diferentes (podem existir mais):
Pela implementação da classe dada no link acima, deve-se fazer um array (tipo básico do
flash) contendo os dados a serem enviados, por exemplo:
var arranjo:Array = [“ack”];
Nessa implementação, a criação do pacote é feita da seguinte maneira:
var pacote:OSCPacket = new OSCPacket(nome_do_pacote,arranjo,IP,port);
O nome_do_pacote é uma string que rotula o pacote, o arranjo é um arranjo simples de
dados, o IP é o endereço IP para onde o pacote será enviado, a o port é a porta.
Para enviar mensagens:
Para enviar mensagens, é extremamente simples. Com uma conexão já estabelecida e
um pacote pronto, é só chamar o método sendOSCPacket() da classe OSCConnection.
Obviamente, o sendOSCPacket pede como parâmetro somente o pacote, ficando da
seguinte forma:
conexao.sendOSCPacket(pacote);
Feito isso, será enviado um pacote com os dados.
Para receber mensagens:
Na implementação do link acima, existe uma classe OSCConnectionEvent que são
eventos (interrupções) que representam coisas inesperadas (ou não) que a conexão pode
captar. O melhor exemplo disso é o recebimento de mensagens.
Deve-se então adicionar um ouvidor de eventos na instância da OSCConnection. Para-se
fazer isso, deve-se chamar a função flash addEventListener nessa instância. Aí está o
template da função addEventListener:
objeto.addEventListener(TIPO_DO_EVENTO, funcaoListener);
Ao usar essa função o que basicamente estará sendo feito é marcado o objeto para que
toda vez que o evento do tipo TIPO_DO_EVENTO acontecer relacionado nesse objeto,
será chamada a funcaoListener. Existem vários exemplos disso: toda vez que ocorre um
clique no mouse em cima do objeto botão, esse botão fica azul; toda vez que digita
alguma coisa no teclado, o editor de texto faz aparecer texto na tela; entre muitos outros.
Deve-se também, como mencionado, escrever uma função listener (ouvinte) que é
executada quando o evento acontece. Essa função não pode ter uma forma qualquer. Ela
deve ter apenas um parâmetro, e esse parâmetro tem que ser uma instância do evento do
tipo que está sendo tratado. No nosso caso, esse será uma instância da classe
OSCConnectionEvent, e o template da função listener será:
function ouvinte(e:OSCConnectionEvent):void
{
// coisas a fazer quando o evento acontecer aqui
}:
Existem quatro eventos possíveis para a OSCConnection, definidos na classe
OSCConnectionEvent (novamente, na implementação dada no link acima) ,aí estão as
strings de tipo, que substituem o TIPO_DO_EVENTO no template acima:
•
•
•
•
OSCConnectionEvent.ON_CONNECT → chama a função listener quando essa
conexão foi efetuada com sucesso;
OSCConnectionEvent.ON_CONNECT_ERROR → chama a função listener quando
ocorre um erro na tentativa de conectar;
OSCConnectionEvent.ON_PACKET_OUT → chama a função listener quando um
pacote foi enviado pela conexão;
OSCConnectionEvent.ON_PACKET_IN → chama a função listener quando um
pacote for recebido. → Aqui está a chave de como receber mensagens!
Portanto, para receber mensagens, deve-se adicionar um ouvinte de evento para esse
evento ON_PACKET_IN. A seguir como fica no código:
conexao.addEventListener(OSCConnectionEvent.ON_PACKET_IN,quandoRec
eber);
function quandoReceber(e:OSCConnectionEvent)
{
// Quando receber tratar aqui
}
Esse parâmetro que recebe uma instância do evento não está aí inutilmente Você tem
que usar essa instância para tirar as informações do pacote enviado. Dentro dela pode-se
perceber um campo data do tipo Object. Esse campo na verdade pode ser transformado
em um OSCPacket através de um elencamento, e então é usado:
conexao.addEventListener(OSCConnectionEvent.ON_PACKET_IN,quandoRec
eber);
function quandoReceber(e:OSCConnectionEvent)
{
var pacoteRecebido = e.data as OSCPacket;
// Fazer o que você quer que faça com o pacoteRecebido aqui
}
É uma boa prática que todos os tipos de eventos sejam tratados por uma função ouvinte,
para que tudo o que aconteça esteja melhor no seu controle, e não apenas o
ON_PACKET_IN. Você pode fazer um texto vermelho aparecer quando ocorrer um erro
na conexão, por exemplo.
Pronto! Agora você tem um cliente/servidor de OSC no flash. Lembrando que o servidor
java de OSC que vem com o flosc original vem com seu código fonte, que pode ser
alterado.
Download

Comunicação Flash via osc (Flosc)