<?xml version="1.0" encoding="utf-8" ?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" horizontalAlign="left" pageTitle="TUve White Board" creationComplete="initApp()" >
<mx:Script>
<![CDATA[
import mx.utils.ObjectUtil;
import mx.controls.Alert;
import flash.events.NetStatusEvent;
import flash.events.SyncEvent;
import flash.net.NetConnection;
import flash.net.SharedObject;
import mx.rpc.events.ResultEvent;
//import mx.graphics.ImageSnapshot;
//import mx.core.BitmapAsset;
private var isDrawing:Boolean=false;
private var x1:int;
private var y1:int;
private var x2:int;
private var y2:int;
private var drawColor:uint;
private var myID:Number;
private var bSize:Number = 1;
[Bindable]
private var brushArray:Array = new Array(1,2,3,4,5,6,7,8,9,10,20,30,40,50,75,100);
[Bindable] private var connected:Boolean = false;
private var nc:NetConnection = null;
private var so:SharedObject = null;
private var iN:Boolean = true;
private function initApp():void {
myID = new Date().getTime() + Math.floor(Math.random());
if (!nc) {
nc = new NetConnection();
// set the encoding to AMF0 - still waiting for AMF3 to be implemented on Red5
nc.objectEncoding = ObjectEncoding.AMF0;
nc.addEventListener(NetStatusEvent.NET_STATUS,onConnectHandler,false,0,true);
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onConnectErrorHandler,false,0,true);
nc.client = this;
nc.connect("rtmp://nightlife.ubixonline.com/SOSample");
}
}
public function onBWDone():void {
// have to have this for an RTMP connection
}
public function onBoardUpdate(gotData:Object):void {
//var imgObj:BitmapAsset;
//var iconClass:Class;
//var imgData:ByteArray;
if (gotData) {
if (!gotData.hasOwnProperty("id"))
return;
if (Number(gotData.id) == myID)
return;
switch (gotData.cmd) {
case 1:
canvas.graphics.clear();
break;
case 2:
canvas.graphics.lineStyle(gotData.bSize, gotData.drawColor);
canvas.graphics.moveTo(gotData.x1,gotData.y1);
canvas.graphics.lineTo(gotData.x2,gotData.y2);/*
if (iN == true)
so.send('onBoardUpdate',{id:myID,cmd:3});*/
break;/*
case 3:
imgData = ImageSnapshot.captureImage(canvas).data;
so.send('onBoardUpdate',{id:myID,cmd:4,imgData:imgData});
imgData = null;
break;
case 4:
if (iN == true) {
var bd: BitmapData = new BitmapData(canvas.width, canvas.height);
var loader:flash.display.Loader = new flash.display.Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBytesLoaded);
imgData = gotData.imgData as ByteArray;
loader.loadBytes(imgData);
function onBytesLoaded(event:Event):void {
var content:DisplayObject = LoaderInfo(event.target).content;
bd.draw( content );
canvas.graphics.beginBitmapFill(bd);
//canvas.graphics.drawRect(0,0, canvas.width, canvas.height);
canvas.graphics.endFill();
}*/
//iconClass = gotData.imgData as Class;
//imgObj = new iconClass() as BitmapAsset;
/*
imgData = gotData.imgData;
var content:DisplayObject = imgData;
bd.draw(content);
canvas.graphics.beginBitmapFill(bd);//imgObj.bitmapData);
//canvas.graphics.drawRect(0,0, canvas.width, canvas.height);
canvas.graphics.endFill();
iconClass = null;
imgObj = null;
*/
/*
iN = false;
}
break;*/
default:
Alert.show("Error");
break;
}
gotData = null;
}
}
private function onConnectErrorHandler(event:SecurityErrorEvent):void {
Alert.show(event.text,"Error on Connect");
}
private function onConnectHandler(event:Event):void {
so = SharedObject.getRemote("tuveWhiteBoard",nc.uri, false);
so.addEventListener(SyncEvent.SYNC,onBoardUpdate,false,0,true);
so.client = this;
so.connect(nc);
}
/* Paint Funcs */
private function doErase():void {
canvas.graphics.clear();
so.send('onBoardUpdate',{id:myID,cmd:1});
}
private function doMouseDown():void {
x1 = canvas.mouseX;
y1 = canvas.mouseY;
isDrawing = true;
}
private function doMouseMove():void {
x2 = canvas.mouseX;
y2 = canvas.mouseY;
if (isDrawing) {
canvas.graphics.lineStyle(bSize, drawColor);
canvas.graphics.moveTo(x1, y1);
canvas.graphics.lineTo(x2, y2);
so.send('onBoardUpdate',{id:myID,cmd:2,x1:x1,y1:y1,x2:x2,y2:y2,drawColor:drawColor,bSize:bSize});
x1 = x2;
y1 = y2;
}
}
private function doMouseUp():void {
isDrawing = false;
}
private function doColor():void {
drawColor = pC.selectedColor;
}
]]>
</mx:Script>
<mx:Panel width="100%" height="100%" headerHeight="0">
<mx:Canvas id="canvas" width="100%" height="100%" horizontalScrollPolicy="off" verticalScrollPolicy="off" mouseDown="doMouseDown()" mouseMove="doMouseMove()" mouseUp="doMouseUp()" />
<mx:ControlBar>
<mx:ColorPicker id="pC" change="doColor()"/>
<mx:ComboBox id="brushSize" change="bSize = brushArray[brushSize.selectedIndex]" dataProvider="{brushArray}" selectedIndex="0"/>
<mx:Button label="Erase" click="doErase()"/>
</mx:ControlBar>
</mx:Panel>
</mx:Application>