Online Book Reader

Home Category

Developing Android Applications with Adobe AIR [93]

By Root 2476 0
of the publisher to subscribe. The publisher needs a way to communicate the ID to others. In a professional application, you would use a web service or a remote sharedObject, but for web development, or if you know the people you want to communicate with, you can send your peerID in the body of an email:

var myPeerID:String

function onStatus(event:NetStatusEvent):void {

if (event.info.code == "NetConnection.Connect.Success") {

myPeerID = connection.nearID;

navigateToURL(new URLRequest('mailto:FRIEND_EMAIL?subject=id&body='+

myPeerID));

}

}

The streams are not sent until another endpoint subscribes to the publisher’s stream.

Receiving a stream


In this example, the subscribers get the ID via email and copy its content into the system clipboard. Then they press the giveMe button:

var giveMe:Sprite = new Sprite();

giveMe.y = 100;

var g:Graphics = giveMe.graphics;

g.beginFill(0x0000FF);

g.drawRect(20, 20, 100, 75);

g.endFill();

giveMe.addEventListener(MouseEvent.CLICK, startStream);

The startStream method gets the content of the clipboard and uses it to create the stream. The ID needs to be passed as the second parameter in the stream constructor:

function startStream():void {

var id:String =

Clipboard.generalClipboard.getData(ClipboardFormats.TEXT_FORMAT) as String;

var inStream:NetStream = new NetStream(connection, id);

inStream.addEventListener(NetStatusEvent.NET_STATUS, onStatus);

var video:Video = new Video();

addChild(video);

inStream.play("privateVideo");

video.attachNetStream(inStream);

}

The publisher has control, if needed, over accepting or rejecting subscribers. When a subscriber attempts to receive the stream, the onPeerConnect method is invoked. Create an object to capture the call. The way to monitor whom to accept (or not) is completely a function of your application:

var farPeerID:String;

var outClient:Object = new Object();

outClient.onPeerConnect = onConnect;

outStream.client = outClient;

function onConnect(stream:NetStream):Boolean {

farPeerID = stream.farID;

return true; // accept

OR

return false; // reject

}

The publisher stream has a peerStreams property that holds all the subscribers for the publishing stream. Use NetStream.send() to send messages to all the recipients or NetStream.peerStreams[0].send() for an individual user, here the first one in the list.

NetConnection.maxPeerConnections returns the limit of peer streams, typically set to a maximum of eight.

Directed Routing


Directed routing is for sending data to a specific peer in a group. Peers can send each other messages if they know their counterpart PeerID. This feature only works in a group via NetGroup. It is not available via NetStream.

Sending a message


Individual messages can be sent from one neighbor to another using the NetGroup.sendToNeighbor method:

var groupSpec:GroupSpecifier = new GroupSpecifier("videoGroup");

groupSpec.postingEnabled = true;

groupSpec.serverChannelEnabled = true;

groupSpec.routingEnabled = true;

var netGroup = new NetGroup(connection,

groupSpec.groupspecWithAuthorizations());

netGroup.addEventListener(NetStatusEvent.NET_STATUS, onStatus);

The message is an Object. It needs a destination which is the peer receiving the message. Here, PeerID is converted to a group address. It also needs the message itself. Here, we added the time to make each message unique and a type to filter the conversation:

var message:Object = new Object();

var now:Date = new Date();

message.time = now.getHours() + "" + now.getMinutes()+ "" + now.getSeconds();

message.destination = group.convertPeerIDToGroupAddress(peerID);

message.value = "south";

message.type = "direction";

group.sendToNearest(message, message.destination);

Receiving a message


The recipient must be in the same group. The message is received at an event with an info.code value of NetGroup.SendTo.Notify. The recipient checks to see if the message is for her by checking if event.info.fromLocal is true, and if it is not, sends it to the next neighbor until its destination is reached:

Return Main Page Previous Page Next Page

®Online Book Reader