flexでネットタンサーを遠隔操作する。(airアプリ)

mxmlファイル

 

カメラとレンジセンサを表示して、コマンドを送信する基本的なアプリです。

 

 <?xml version="1.0" encoding="utf-8"?>

<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"

 creationComplete="init()" height="268" width="848">

 <mx:Script>

<![CDATA[

 import mx.core.UIComponent;

 import flash.text.TextField;

  private var socket:Socket = new Socket();

  private var mysprite:UIComponent = new UIComponent();

  private var counter:int;

  private var counter2:int;

  private function debug(a:String):void{

   statusText.text=a;

  }

  private function debug2(a:String):void{

   recvText.text=a;

  }

  private function init():void{

   buttonConnect.addEventListener(MouseEvent.CLICK, buttonConnect_click);

   sendBtn.addEventListener(MouseEvent.CLICK, sendText);

   socket.addEventListener(IOErrorEvent.IO_ERROR,ioerr);

   socket.addEventListener(ProgressEvent.SOCKET_DATA,onRcvData);

   socket.addEventListener(Event.CONNECT,function():void{

    debug("Connect");

   });

   debug("2");

   mycanvas.addChild(mysprite);

   display_img.addEventListener(Event.ENTER_FRAME, onEnterFrame );   

      

  }

  private function ioerr(e:Event):void{

   debug("ERR");

  }

  private function buttonConnect_click(e:Event):void{

     if(!socket.connected){

      socket.connect(hostInput.text, new int(PortInput.text));

    buttonConnect.label="Disconnect";

     }else{

      socket.close();

    buttonConnect.label="connect";

    debug("Disconnect");

      

     }

    }

    private function onRcvData(e:Event):void{

     if(!socket.connected){

      return;

     }

     var size:int;

     if((size = socket.bytesAvailable) > 20){

    var bytes:ByteArray = new ByteArray();

      socket.readBytes(bytes,0,(size/21)*21);

      var recvStr:String=bytes.toString();

    if(bytes[0]-48 != 1){

       if(recvStr.length >= 12){

        //if(counter++ %3 == 0)

        debug2("受信エラー"+recvStr.substr(0,20));

       }

       return ;

    }else{

     counter++;

     if(counter % 2 == 0){

      return;

     }

       mysprite.graphics.clear();

     mysprite.graphics.beginFill(0xffff00);

     var l1:int,l2:int,l3:int;

     l1 = 20*(54-bytes[3]);

     l2 = 20*(54-bytes[2]);

     l3 = 20*(54-bytes[1]);

     

       mysprite.graphics.drawRect(10, 150-l1,40,l1);

       mysprite.graphics.drawRect(60, 150-l2,40,l2);

       mysprite.graphics.drawRect(110,150-l3,40,l3);

       if(recvStr.length >= 12){

        //if(counter++ %3 == 0)

        //debug2("受信 "+recvStr.substr(0,20));

       }

        }

     }

    }

    private function sendText(e:Event):void{

     if(!socket.connected){

      return;

     }

     var bytes:ByteArray = new ByteArray();

  // for(var i:int=0; i<CommandInputs.textField;i++);

     bytes.writeUTFBytes(CommandInput.text);

     socket.writeBytes(bytes);

     socket.writeByte(13);

     socket.flush();

     debug("送信"+bytes.toString());

    }

    private function onEnterFrame(e:Event):void{

     counter2++;

     if(counter2 % 15 == 0){

      display_img.load("http://"+hostInput.text+"/goform/video2/aaa.jpg");

      display_img.width=200;

      display_img.height=150;

     }

    }

    

]]>

    

 </mx:Script>

 <mx:Label x="63" y="19" text="NetTansa Monitor" width="114"/>

 <mx:Label x="33" y="43" text="server"/>

 <mx:Label x="202" y="45" text="Port"/>

 <mx:TextInput x="31" y="69" id="hostInput" text="192.168.1.115"/>

 <mx:TextInput x="199" y="69" width="58" id="PortInput" text="8081"/>

 <mx:TextInput x="31" y="99" id="CommandInput"/>

 <mx:Button x="269" y="69" label="connect" id="buttonConnect"/>

 <mx:Button x="277" y="99" label="send" id="sendBtn"/>

 <mx:TextArea x="31" y="147" id="statusText"/>

 <mx:TextArea x="199" y="147" height="44" width="211" id="recvText"/>

 <mx:Canvas x="424" y="45" width="160" height="174" id="mycanvas" backgroundColor="#F8BDBD">

 </mx:Canvas>

 <mx:Label x="424" y="19" text="range sensor" width="85"/>

 <mx:Label x="31" y="129" text="debug"/>

 <mx:Image x="614" y="45" scaleContent="true" width="200" height="150" id="display_img"/>

 

</mx:WindowedApplication>

 

 

作ってみてわかったのですが、ネットタンサーのカメラ像を取る時に必要なコードは1行です。

 

イメージオブジェクト.load("http://アドレス/goform/video2/aaa.jpg");

 

だけです。うそみたいですが、本当です。認証もありません?!説明書にはベーシック認証と書いてあるのですが。このURLには不要です。

 

バイナリのairファイルが必要な人は oitlab511@gmail.comまでメイルをお送りください。