Voilà un bout de code tout simple pour transformer votre téléphone en manette de jeu :
App.as
package
{
import flash.desktop.NativeApplication;
import flash.display.Sprite;
import flash.events.AccelerometerEvent;
import flash.sensors.Accelerometer;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class App extends Sprite
{
private var _nativeApplication:NativeApplication;
private var _client:PeerClient;
private var _acc:Accelerometer;
private var _log:TextField;
private var _connected:Boolean;
public function App()
{
trace(this);
_nativeApplication = NativeApplication.nativeApplication;
_log = new TextField();
_log.autoSize = TextFieldAutoSize.LEFT;
addChild(_log);
_acc = new Accelerometer();
_acc.addEventListener(AccelerometerEvent.UPDATE,handleAccelerometerUpdate);
AccelerometerData.register();
_client = new PeerClient();
_client.addEventListener(PeerClientEvent.NETCONNECTION_CONNECTED,handleNetConnectionConnected);
_client.addEventListener(PeerClientEvent.NETGROUP_CONNECTED,handleNetGroupConnected);
_client.connect();
}
protected function handleNetConnectionConnected(event:PeerClientEvent):void
{
trace(this,'handleNetConnectionConnected',event);
_log.text = 'handleNetConnectionConnected';
}
protected function handleNetGroupConnected(event:PeerClientEvent):void
{
trace(this,'handleNetGroupConnected',event);
_log.text = 'handleNetGroupConnected';
_connected = true;
}
protected function handleAccelerometerUpdate(event:AccelerometerEvent):void
{
if(!_connected) return;
var data:AccelerometerData = new AccelerometerData();
data.x = event.accelerationX;
data.y =event.accelerationY;
data.z = event.accelerationZ;
_client.send(data);
}
}
}
PeerClient.as
package
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.NetStatusEvent;
import flash.net.GroupSpecifier;
import flash.net.NetConnection;
import flash.net.NetGroup;
public class PeerClient extends EventDispatcher
{
private var _nc:NetConnection;
private var _group:NetGroup;
private var _groupName:String = "goabonga/game";
private var _address:String = "225.225.0.1:30303";
public function PeerClient(target:IEventDispatcher=null)
{
trace(this);
super(target);
}
public function connect():void
{
trace(this,'connect');
_nc = new NetConnection();
_nc.addEventListener(NetStatusEvent.NET_STATUS, handleNetStatus);
_nc.connect("rtmfp:");
}
public function send(data:Object):void{
trace(this,'send',data)
_group.post(data);
}
protected function handleNetStatus(event:NetStatusEvent):void
{
trace(this,'handleNetStatus',event.info.code);
switch(event.info.code){
case "NetConnection.Connect.Success":
initLocalGroup();
dispatchEvent(new PeerClientEvent(PeerClientEvent.NETCONNECTION_CONNECTED));
break;
case "NetGroup.Connect.Success":
dispatchEvent(new PeerClientEvent(PeerClientEvent.NETGROUP_CONNECTED));
break;
}
}
protected function initLocalGroup():void
{
trace(this,'initLocalGroup');
var groupspec:GroupSpecifier = new GroupSpecifier(_groupName)
groupspec.postingEnabled = true;
groupspec.ipMulticastMemberUpdatesEnabled = true;
groupspec.addIPMulticastAddress(_address);
_group = new NetGroup(_nc,groupspec.groupspecWithAuthorizations());
_group.addEventListener(NetStatusEvent.NET_STATUS,handleNetStatus);
}
}
}
PeerClientEvent.as
package
{
import flash.events.Event;
public class PeerClientEvent extends Event
{
public static var NETCONNECTION_CONNECTED:String = 'onNetConnectionConnected';
public static var NETGROUP_CONNECTED:String = 'onNetGroupConnected';
public function PeerClientEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}
AccelerometerData.as
package
{
import flash.net.registerClassAlias;
public class AccelerometerData extends Object
{
public var x:Number;
public var y:Number;
public var z:Number;
public function AccelerometerData()
{
}
public function toString():String
{
return '[object AccelerometerData x="'+x+'" y="'+y+'" z="'+z+'"]';
}
static public function register():void
{
registerClassAlias('AccelerometerData',AccelerometerData);
}
}
}
Voilà le code de l'application Air qui sera capable de récupérer les informations via le P2P :
App.as
package
{
import flash.desktop.NativeApplication;
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class App extends Sprite
{
private var _nativeApplication:NativeApplication;
private var _server:PeerServer;
private var _log:TextField;
public function App()
{
trace(this);
_nativeApplication = NativeApplication.nativeApplication ;
_log = new TextField();
_log.autoSize = TextFieldAutoSize.LEFT;
addChild(_log);
AccelerometerData.register();
_server = new PeerServer();
_server.addEventListener(PeerServerEvent.NETCONNECTION_CONNECTED,handleNetConnectionConnected);
_server.addEventListener(PeerServerEvent.NETGROUP_CONNECTED,handleNetGroupConnected);
_server.addEventListener(PeerServerEvent.NET_DATA,handleNetData);
_server.connect();
}
protected function handleNetConnectionConnected(event:PeerServerEvent):void
{
trace(this,'handleNetConnectionConnected',event);
_log.text = 'handleNetConnectionConnected';
}
protected function handleNetGroupConnected(event:PeerServerEvent):void
{
trace(this,'handleNetGroupConnected',event);
_log.text = 'handleNetGroupConnected';
}
protected function handleNetData(event:PeerServerEvent):void
{
trace(this,'handleNetData',event);
_log.text = 'handleNetData : '+event.data;
}
}
}
PeerServer.as
package
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.NetStatusEvent;
import flash.net.GroupSpecifier;
import flash.net.NetConnection;
import flash.net.NetGroup;
public class PeerServer extends EventDispatcher
{
private var _nc:NetConnection;
private var _group:NetGroup;
private var _groupName:String = "goabonga/game";
private var _address:String = "225.225.0.1:30303";
public function PeerServer(target:IEventDispatcher=null)
{
trace(this);
super(target);
}
public function connect():void
{
trace(this,'connect');
_nc = new NetConnection();
_nc.addEventListener(NetStatusEvent.NET_STATUS, handleNetStatus);
_nc.connect("rtmfp:");
}
protected function handleNetStatus(event:NetStatusEvent):void
{
trace(this,'handleNetStatus',event.info.code);
switch(event.info.code){
case "NetConnection.Connect.Success":
initLocalGroup();
dispatchEvent(new PeerServerEvent(PeerServerEvent.NETCONNECTION_CONNECTED));
break;
case "NetGroup.Connect.Success":
dispatchEvent(new PeerServerEvent(PeerServerEvent.NETGROUP_CONNECTED));
break;
case "NetGroup.Posting.Notify":
dispatchEvent(new PeerServerEvent(PeerServerEvent.NET_DATA,event.info.message));
break;
}
}
protected function initLocalGroup():void
{
trace(this,'initLocalGroup');
var groupspec:GroupSpecifier = new GroupSpecifier(_groupName)
groupspec.postingEnabled = true;
groupspec.ipMulticastMemberUpdatesEnabled = true;
groupspec.addIPMulticastAddress(_address);
_group = new NetGroup(_nc,groupspec.groupspecWithAuthorizations());
_group.addEventListener(NetStatusEvent.NET_STATUS,handleNetStatus);
}
}
}
PeerServerEvent.as
package
{
import flash.events.Event;
public class PeerServerEvent extends Event
{
public static var NETCONNECTION_CONNECTED:String = 'onNetConnectionConnected';
public static var NETGROUP_CONNECTED:String = 'onNetGroupConnected';
public static var NET_DATA:String = 'onNetData';
private var _data:Object;
public function PeerServerEvent(type:String,data:Object = null, bubbles:Boolean=false, cancelable:Boolean=false)
{
_data = data ;
super(type, bubbles, cancelable);
}
public function get data():Object
{
return _data;
}
}
}
AccelerometerData.as
package
{
import flash.net.registerClassAlias;
public class AccelerometerData extends Object
{
public var x:Number;
public var y:Number;
public var z:Number;
public function AccelerometerData()
{
}
public function toString():String
{
return '[object AccelerometerData x="'+x+'" y="'+y+'" z="'+z+'"]';
}
static public function register():void
{
registerClassAlias('AccelerometerData',AccelerometerData);
}
}
}
App.as
package
{
import flash.desktop.NativeApplication;
import flash.display.Sprite;
import flash.events.AccelerometerEvent;
import flash.sensors.Accelerometer;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class App extends Sprite
{
private var _nativeApplication:NativeApplication;
private var _client:PeerClient;
private var _acc:Accelerometer;
private var _log:TextField;
private var _connected:Boolean;
public function App()
{
trace(this);
_nativeApplication = NativeApplication.nativeApplication;
_log = new TextField();
_log.autoSize = TextFieldAutoSize.LEFT;
addChild(_log);
_acc = new Accelerometer();
_acc.addEventListener(AccelerometerEvent.UPDATE,handleAccelerometerUpdate);
AccelerometerData.register();
_client = new PeerClient();
_client.addEventListener(PeerClientEvent.NETCONNECTION_CONNECTED,handleNetConnectionConnected);
_client.addEventListener(PeerClientEvent.NETGROUP_CONNECTED,handleNetGroupConnected);
_client.connect();
}
protected function handleNetConnectionConnected(event:PeerClientEvent):void
{
trace(this,'handleNetConnectionConnected',event);
_log.text = 'handleNetConnectionConnected';
}
protected function handleNetGroupConnected(event:PeerClientEvent):void
{
trace(this,'handleNetGroupConnected',event);
_log.text = 'handleNetGroupConnected';
_connected = true;
}
protected function handleAccelerometerUpdate(event:AccelerometerEvent):void
{
if(!_connected) return;
var data:AccelerometerData = new AccelerometerData();
data.x = event.accelerationX;
data.y =event.accelerationY;
data.z = event.accelerationZ;
_client.send(data);
}
}
}
PeerClient.as
package
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.NetStatusEvent;
import flash.net.GroupSpecifier;
import flash.net.NetConnection;
import flash.net.NetGroup;
public class PeerClient extends EventDispatcher
{
private var _nc:NetConnection;
private var _group:NetGroup;
private var _groupName:String = "goabonga/game";
private var _address:String = "225.225.0.1:30303";
public function PeerClient(target:IEventDispatcher=null)
{
trace(this);
super(target);
}
public function connect():void
{
trace(this,'connect');
_nc = new NetConnection();
_nc.addEventListener(NetStatusEvent.NET_STATUS, handleNetStatus);
_nc.connect("rtmfp:");
}
public function send(data:Object):void{
trace(this,'send',data)
_group.post(data);
}
protected function handleNetStatus(event:NetStatusEvent):void
{
trace(this,'handleNetStatus',event.info.code);
switch(event.info.code){
case "NetConnection.Connect.Success":
initLocalGroup();
dispatchEvent(new PeerClientEvent(PeerClientEvent.NETCONNECTION_CONNECTED));
break;
case "NetGroup.Connect.Success":
dispatchEvent(new PeerClientEvent(PeerClientEvent.NETGROUP_CONNECTED));
break;
}
}
protected function initLocalGroup():void
{
trace(this,'initLocalGroup');
var groupspec:GroupSpecifier = new GroupSpecifier(_groupName)
groupspec.postingEnabled = true;
groupspec.ipMulticastMemberUpdatesEnabled = true;
groupspec.addIPMulticastAddress(_address);
_group = new NetGroup(_nc,groupspec.groupspecWithAuthorizations());
_group.addEventListener(NetStatusEvent.NET_STATUS,handleNetStatus);
}
}
}
PeerClientEvent.as
package
{
import flash.events.Event;
public class PeerClientEvent extends Event
{
public static var NETCONNECTION_CONNECTED:String = 'onNetConnectionConnected';
public static var NETGROUP_CONNECTED:String = 'onNetGroupConnected';
public function PeerClientEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}
AccelerometerData.as
package
{
import flash.net.registerClassAlias;
public class AccelerometerData extends Object
{
public var x:Number;
public var y:Number;
public var z:Number;
public function AccelerometerData()
{
}
public function toString():String
{
return '[object AccelerometerData x="'+x+'" y="'+y+'" z="'+z+'"]';
}
static public function register():void
{
registerClassAlias('AccelerometerData',AccelerometerData);
}
}
}
Voilà le code de l'application Air qui sera capable de récupérer les informations via le P2P :
App.as
package
{
import flash.desktop.NativeApplication;
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class App extends Sprite
{
private var _nativeApplication:NativeApplication;
private var _server:PeerServer;
private var _log:TextField;
public function App()
{
trace(this);
_nativeApplication = NativeApplication.nativeApplication ;
_log = new TextField();
_log.autoSize = TextFieldAutoSize.LEFT;
addChild(_log);
AccelerometerData.register();
_server = new PeerServer();
_server.addEventListener(PeerServerEvent.NETCONNECTION_CONNECTED,handleNetConnectionConnected);
_server.addEventListener(PeerServerEvent.NETGROUP_CONNECTED,handleNetGroupConnected);
_server.addEventListener(PeerServerEvent.NET_DATA,handleNetData);
_server.connect();
}
protected function handleNetConnectionConnected(event:PeerServerEvent):void
{
trace(this,'handleNetConnectionConnected',event);
_log.text = 'handleNetConnectionConnected';
}
protected function handleNetGroupConnected(event:PeerServerEvent):void
{
trace(this,'handleNetGroupConnected',event);
_log.text = 'handleNetGroupConnected';
}
protected function handleNetData(event:PeerServerEvent):void
{
trace(this,'handleNetData',event);
_log.text = 'handleNetData : '+event.data;
}
}
}
PeerServer.as
package
{
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.NetStatusEvent;
import flash.net.GroupSpecifier;
import flash.net.NetConnection;
import flash.net.NetGroup;
public class PeerServer extends EventDispatcher
{
private var _nc:NetConnection;
private var _group:NetGroup;
private var _groupName:String = "goabonga/game";
private var _address:String = "225.225.0.1:30303";
public function PeerServer(target:IEventDispatcher=null)
{
trace(this);
super(target);
}
public function connect():void
{
trace(this,'connect');
_nc = new NetConnection();
_nc.addEventListener(NetStatusEvent.NET_STATUS, handleNetStatus);
_nc.connect("rtmfp:");
}
protected function handleNetStatus(event:NetStatusEvent):void
{
trace(this,'handleNetStatus',event.info.code);
switch(event.info.code){
case "NetConnection.Connect.Success":
initLocalGroup();
dispatchEvent(new PeerServerEvent(PeerServerEvent.NETCONNECTION_CONNECTED));
break;
case "NetGroup.Connect.Success":
dispatchEvent(new PeerServerEvent(PeerServerEvent.NETGROUP_CONNECTED));
break;
case "NetGroup.Posting.Notify":
dispatchEvent(new PeerServerEvent(PeerServerEvent.NET_DATA,event.info.message));
break;
}
}
protected function initLocalGroup():void
{
trace(this,'initLocalGroup');
var groupspec:GroupSpecifier = new GroupSpecifier(_groupName)
groupspec.postingEnabled = true;
groupspec.ipMulticastMemberUpdatesEnabled = true;
groupspec.addIPMulticastAddress(_address);
_group = new NetGroup(_nc,groupspec.groupspecWithAuthorizations());
_group.addEventListener(NetStatusEvent.NET_STATUS,handleNetStatus);
}
}
}
PeerServerEvent.as
package
{
import flash.events.Event;
public class PeerServerEvent extends Event
{
public static var NETCONNECTION_CONNECTED:String = 'onNetConnectionConnected';
public static var NETGROUP_CONNECTED:String = 'onNetGroupConnected';
public static var NET_DATA:String = 'onNetData';
private var _data:Object;
public function PeerServerEvent(type:String,data:Object = null, bubbles:Boolean=false, cancelable:Boolean=false)
{
_data = data ;
super(type, bubbles, cancelable);
}
public function get data():Object
{
return _data;
}
}
}
AccelerometerData.as
package
{
import flash.net.registerClassAlias;
public class AccelerometerData extends Object
{
public var x:Number;
public var y:Number;
public var z:Number;
public function AccelerometerData()
{
}
public function toString():String
{
return '[object AccelerometerData x="'+x+'" y="'+y+'" z="'+z+'"]';
}
static public function register():void
{
registerClassAlias('AccelerometerData',AccelerometerData);
}
}
}







