Newer
Older
tuveWhiteboard / src / tuveWhiteboard.mxml
@reddawg reddawg on 16 Sep 2008 5 KB Sync Out
<?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>