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までメイルをお送りください。