SlideShare une entreprise Scribd logo
1  sur  23
くるくる研究室 フィジカルコンピューティングを はじめよう。
くるくる研究室 ,[object Object],http://labs.kuru2jam.com/ 原 央樹 尾崎俊介 http://labs.kuru2jam.com/ @hara3  @biscuitjam
作品紹介 http://labs.kuru2jam.com/ くるくる研究室
【 事例 】 お化け屋敷
フィジカルコンピューティング
と言っても、いきなり難しいと思うので、 できるところから、やってみる。
体験しよう 【 ポチっとレンジ 】
体験したい人!
動作の仕組み ③ ソケット通信 電気信号 ④ 電子回路 Data ② 一定間隔でデータを確認 ① HTML から POST
HTML から POST PHP
ケータイからアクセスする PHP <?php // HTML 文字のエスケープ $text =  htmlspecialchars(  $_POST[&quot;push&quot; ] ); if($text){ $fp  = fopen( &quot;./status.dat&quot; ,  &quot;w&quot; ); fwrite($fp, 1); fclose($fp); $url  =  &quot;http://www.yourserver.com/complete.html&quot; ; header( &quot;Location: $url&quot; ) ; ?> <html> <head> …
ケータイからアクセスする HTML … <html> <head> <meta  http-equiv = &quot;Content-Type&quot;  content = &quot;text/html; charset=utf-8&quot; > </head> <body> <img  src = &quot;logo.gif&quot; > <br /> <form  action = &quot;<?php echo $_SERVER['SCRIPT_NAME']; ?>&quot;  method = &quot;post&quot; > <input  type = &quot;submit&quot;   name = &quot;push&quot;   id = &quot;push&quot;   value = &quot; ボタンを押す &quot; > </form> <br /> <hr /> 2010 kurukuru labs. </body> </html>
一定間隔でデータを確認 ActionScript 3.0
package  { import flash.display.MovieClip; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.utils.Timer; import flash.events.TimerEvent; import funnel.*; public class  Pochitto  extends MovieClip { private var  _timer: Timer ; private var  _gio:Gainer; private const  _D_OUT_1: int  = 12; public function  Pochitto()  { _gio = new Gainer(); _gio. addEventListener (FunnelEvent. READY ,  trace ); _gio. addEventListener (FunnelEvent. READY , _gioReadyHandler); _gio. addEventListener (FunnelErrorEvent.REBOOT_ERROR,  trace ); _gio. addEventListener (FunnelErrorEvent.CONFIGURATION_ERROR,  trace ); _gio. addEventListener (FunnelErrorEvent. ERROR ,  trace ); } private function  _gioReadyHandler(e:FunnelEvent): void   { _gio.digitalOutput(0). value  = 0; _timer =  new Timer (1000, 0); _timer. addEventListener ( TimerEvent.TIMER ,_timerHandler); _timer. start (); } private function  _timerHandler(e: TimerEvent ): void   { var  urlLoader: URLLoader  =  new URLLoader (); urlLoader. addEventListener ( Event.COMPLETE , _completeHandler); urlLoader. load ( new   URLRequest ( &quot;http://www.yourserver.com/getStatus.php?&quot;  +  Math.random ())); } private function  _completeHandler(e: Event ): void  { var  status: Number  =  Number (URLLoader(e. target ).data); trace ( &quot;status : &quot;  + status); if  (status == 1) { _gio.digitalOutput(0). value  = 1; } } } }
Flash から PHP にアクセス ActionScript 3.0
public class  Pochitto  extends MovieClip { private var  _timer: Timer ; public function  Pochitto()  { _gio = new Gainer();  _gio. addEventListener (FunnelEvent. READY , _gioReadyHandler); } private function  _gioReadyHandler(e:FunnelEvent): void   { _gio.digitalOutput(0). value  = 0; _timer =  new Timer (1000, 0); _timer. addEventListener ( TimerEvent.TIMER ,_timerHandler); _timer. start (); } private function  _timerHandler(e: TimerEvent ): void   { var  urlLoader: URLLoader  =  new URLLoader (); urlLoader. addEventListener ( Event.COMPLETE , _completeHandler); // キャッシュ対策のため、パラメタにランダムな値を入れる urlLoader. load ( new   URLRequest ( &quot;http://www.yourserver.com/getStatus.php?&quot;  +  Math.random ())); } private function  _completeHandler(e: Event ): void  { var  status: Number  =  Number (URLLoader(e. target ).data); if  (status == 1) { _gio.digitalOutput(0). value  = 1; } } }
Flash からアクセスする PHP <?php // 読み込み $status  = 0; $fp  = fopen( &quot;status.dat&quot; ,  &quot;r&quot; ); while ( $line  = fgets( $fp )) {   $status  =  $line ; } fclose( $fp ); // ファイルをリセット $fp  = fopen( &quot;status.dat&quot; ,  &quot;w&quot; ); fwrite( $fp ,  &quot;0&quot; ); fclose( $fp ); echo  $status ; ?>
Gainer と接続
package  { import funnel.*; public class  Pochitto  extends MovieClip { private const  _DT: Number  = 1000;//1 秒 (1000 ミリ秒毎 ) private const  STATUS_URL: String  =  &quot;http://www.yourserver.com/getStatus.php&quot; ; private var  _timer: Timer ; private var  _gio:Gainer; private const  _D_OUT_1: int  = 12; // コンストラクター public function  Pochitto()  { // インスタンス化 _gio = new Gainer(); _gio. addEventListener (FunnelEvent. READY ,  trace ); _gio. addEventListener (FunnelEvent. READY , _gioReadyHandler); _gio. addEventListener (FunnelErrorEvent.REBOOT_ERROR,  trace ); _gio. addEventListener (FunnelErrorEvent.CONFIGURATION_ERROR,  trace ); _gio. addEventListener (FunnelErrorEvent. ERROR ,  trace ); } // 準備ができたら実行 private function  _gioReadyHandler(e:FunnelEvent): void   { _gio.digitalOutput(0). value  = 0; _timer =  new Timer (_DT, 0); _timer. addEventListener ( TimerEvent.TIMER ,_timerHandler); _timer. start (); } } }
Gainer に命令
Gainer に命令 // 読み込みコンプリートハンドラー private function  _completeHandler(e: Event ): void  { var  status: Number  =  Number (URLLoader(e. target ).data); trace ( &quot;status : &quot;  + status); if  (status == 1) { _gio.digitalOutput(0). value  = 1; } }
ありがとうございました。
あっ!本買ってください。

Contenu connexe

Tendances

Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jp
Hiroki Shimizu
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
Gosuke Miyashita
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
Nobuhiro Sue
 

Tendances (20)

traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
FuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみたFuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみた
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
Cakephpstudy5 hacks jp
Cakephpstudy5 hacks jpCakephpstudy5 hacks jp
Cakephpstudy5 hacks jp
 
test
testtest
test
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
 
Continuation with Boost.Context
Continuation with Boost.ContextContinuation with Boost.Context
Continuation with Boost.Context
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
Roslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドインRoslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドイン
 
Hack/HHVM 入門
Hack/HHVM 入門Hack/HHVM 入門
Hack/HHVM 入門
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
0x300
0x3000x300
0x300
 

En vedette

Asynchronous Io Programming
Asynchronous Io ProgrammingAsynchronous Io Programming
Asynchronous Io Programming
l xf
 
PHP Presentation
PHP PresentationPHP Presentation
PHP Presentation
Nikhil Jain
 
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
tutorialsruby
 

En vedette (14)

Groovy - Grails as a modern scripting language for Web applications
Groovy - Grails as a modern scripting language for Web applicationsGroovy - Grails as a modern scripting language for Web applications
Groovy - Grails as a modern scripting language for Web applications
 
Feed the Masses
Feed the MassesFeed the Masses
Feed the Masses
 
XSS filter on Server side
XSS filter on Server sideXSS filter on Server side
XSS filter on Server side
 
Center for Food safety files to fight against Hawaii's small farmers Freedom ...
Center for Food safety files to fight against Hawaii's small farmers Freedom ...Center for Food safety files to fight against Hawaii's small farmers Freedom ...
Center for Food safety files to fight against Hawaii's small farmers Freedom ...
 
Tropo eComm 2009 Tutorial
Tropo eComm 2009 TutorialTropo eComm 2009 Tutorial
Tropo eComm 2009 Tutorial
 
Mojolicious on Steroids
Mojolicious on SteroidsMojolicious on Steroids
Mojolicious on Steroids
 
Finding information on the Web - methodology
Finding information on the Web - methodologyFinding information on the Web - methodology
Finding information on the Web - methodology
 
Abs guide
Abs guideAbs guide
Abs guide
 
Asynchronous Io Programming
Asynchronous Io ProgrammingAsynchronous Io Programming
Asynchronous Io Programming
 
sMash at May NYPHP UG
sMash at May NYPHP UGsMash at May NYPHP UG
sMash at May NYPHP UG
 
Internet Tools
Internet ToolsInternet Tools
Internet Tools
 
PHP Presentation
PHP PresentationPHP Presentation
PHP Presentation
 
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
&lt;b>PHP&lt;/b> Reference: Beginner to Intermediate &lt;b>PHP5&lt;/b>
 
1 java servlets and jsp
1   java servlets and jsp1   java servlets and jsp
1 java servlets and jsp
 

Similaire à Lightweight Language Tiger 2010

Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread ProgrammingNode.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programming
takesako
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
Yosuke Furukawa
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
 

Similaire à Lightweight Language Tiger 2010 (20)

Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread ProgrammingNode.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programming
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
 
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
 
WordPressと外部APIとの連携
WordPressと外部APIとの連携WordPressと外部APIとの連携
WordPressと外部APIとの連携
 
jQuery勉強会#4
jQuery勉強会#4jQuery勉強会#4
jQuery勉強会#4
 
Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1Google Apps Scirpt勉強会 #1
Google Apps Scirpt勉強会 #1
 
Ecmascript2015とその周辺について
Ecmascript2015とその周辺についてEcmascript2015とその周辺について
Ecmascript2015とその周辺について
 
ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方ヒカルのGo 資料 Webアプリケーションの作り方
ヒカルのGo 資料 Webアプリケーションの作り方
 
Twitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hackTwitter sphere of #twitter4j #twtr_hack
Twitter sphere of #twitter4j #twtr_hack
 
Try Jetpack
Try JetpackTry Jetpack
Try Jetpack
 
ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用ソーシャルアプリ勉強会(第一回資料)配布用
ソーシャルアプリ勉強会(第一回資料)配布用
 
JavaScript 実践講座 Framework, Tool, Performance
JavaScript 実践講座 Framework, Tool, PerformanceJavaScript 実践講座 Framework, Tool, Performance
JavaScript 実践講座 Framework, Tool, Performance
 
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQLハンズオン勉強会 はじめてのJavaScriptとSPARQL
ハンズオン勉強会 はじめてのJavaScriptとSPARQL
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
 
KanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたしKanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたし
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.Android Lecture #03 @PRO&BSC Inc.
Android Lecture #03 @PRO&BSC Inc.
 
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」までNeo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
 
Quarkus による超音速な Spring アプリケーション開発
Quarkus による超音速な Spring アプリケーション開発Quarkus による超音速な Spring アプリケーション開発
Quarkus による超音速な Spring アプリケーション開発
 

Plus de biscuitjam (6)

第1回XPF(クロスプラットフォーム)ゲーム開発ツール勉強会
第1回XPF(クロスプラットフォーム)ゲーム開発ツール勉強会第1回XPF(クロスプラットフォーム)ゲーム開発ツール勉強会
第1回XPF(クロスプラットフォーム)ゲーム開発ツール勉強会
 
ADC MEETUP ROUND01 SESSION4
ADC MEETUP ROUND01 SESSION4ADC MEETUP ROUND01 SESSION4
ADC MEETUP ROUND01 SESSION4
 
ADC MEETUP 01
ADC MEETUP 01ADC MEETUP 01
ADC MEETUP 01
 
AIR For Android 勉強会 第1回
AIR For Android 勉強会 第1回AIR For Android 勉強会 第1回
AIR For Android 勉強会 第1回
 
Lightweight Language Tiger 2010
Lightweight Language Tiger 2010Lightweight Language Tiger 2010
Lightweight Language Tiger 2010
 
寺子屋クスール @STATION5
寺子屋クスール @STATION5寺子屋クスール @STATION5
寺子屋クスール @STATION5
 

Dernier

Dernier (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Lightweight Language Tiger 2010

  • 2.
  • 4. 【 事例 】 お化け屋敷
  • 9. 動作の仕組み ③ ソケット通信 電気信号 ④ 電子回路 Data ② 一定間隔でデータを確認 ① HTML から POST
  • 11. ケータイからアクセスする PHP <?php // HTML 文字のエスケープ $text = htmlspecialchars( $_POST[&quot;push&quot; ] ); if($text){ $fp = fopen( &quot;./status.dat&quot; , &quot;w&quot; ); fwrite($fp, 1); fclose($fp); $url = &quot;http://www.yourserver.com/complete.html&quot; ; header( &quot;Location: $url&quot; ) ; ?> <html> <head> …
  • 12. ケータイからアクセスする HTML … <html> <head> <meta http-equiv = &quot;Content-Type&quot; content = &quot;text/html; charset=utf-8&quot; > </head> <body> <img src = &quot;logo.gif&quot; > <br /> <form action = &quot;<?php echo $_SERVER['SCRIPT_NAME']; ?>&quot; method = &quot;post&quot; > <input type = &quot;submit&quot; name = &quot;push&quot; id = &quot;push&quot; value = &quot; ボタンを押す &quot; > </form> <br /> <hr /> 2010 kurukuru labs. </body> </html>
  • 14. package { import flash.display.MovieClip; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.utils.Timer; import flash.events.TimerEvent; import funnel.*; public class Pochitto extends MovieClip { private var _timer: Timer ; private var _gio:Gainer; private const _D_OUT_1: int = 12; public function Pochitto() { _gio = new Gainer(); _gio. addEventListener (FunnelEvent. READY , trace ); _gio. addEventListener (FunnelEvent. READY , _gioReadyHandler); _gio. addEventListener (FunnelErrorEvent.REBOOT_ERROR, trace ); _gio. addEventListener (FunnelErrorEvent.CONFIGURATION_ERROR, trace ); _gio. addEventListener (FunnelErrorEvent. ERROR , trace ); } private function _gioReadyHandler(e:FunnelEvent): void { _gio.digitalOutput(0). value = 0; _timer = new Timer (1000, 0); _timer. addEventListener ( TimerEvent.TIMER ,_timerHandler); _timer. start (); } private function _timerHandler(e: TimerEvent ): void { var urlLoader: URLLoader = new URLLoader (); urlLoader. addEventListener ( Event.COMPLETE , _completeHandler); urlLoader. load ( new URLRequest ( &quot;http://www.yourserver.com/getStatus.php?&quot; + Math.random ())); } private function _completeHandler(e: Event ): void { var status: Number = Number (URLLoader(e. target ).data); trace ( &quot;status : &quot; + status); if (status == 1) { _gio.digitalOutput(0). value = 1; } } } }
  • 15. Flash から PHP にアクセス ActionScript 3.0
  • 16. public class Pochitto extends MovieClip { private var _timer: Timer ; public function Pochitto() { _gio = new Gainer(); _gio. addEventListener (FunnelEvent. READY , _gioReadyHandler); } private function _gioReadyHandler(e:FunnelEvent): void { _gio.digitalOutput(0). value = 0; _timer = new Timer (1000, 0); _timer. addEventListener ( TimerEvent.TIMER ,_timerHandler); _timer. start (); } private function _timerHandler(e: TimerEvent ): void { var urlLoader: URLLoader = new URLLoader (); urlLoader. addEventListener ( Event.COMPLETE , _completeHandler); // キャッシュ対策のため、パラメタにランダムな値を入れる urlLoader. load ( new URLRequest ( &quot;http://www.yourserver.com/getStatus.php?&quot; + Math.random ())); } private function _completeHandler(e: Event ): void { var status: Number = Number (URLLoader(e. target ).data); if (status == 1) { _gio.digitalOutput(0). value = 1; } } }
  • 17. Flash からアクセスする PHP <?php // 読み込み $status = 0; $fp = fopen( &quot;status.dat&quot; , &quot;r&quot; ); while ( $line = fgets( $fp )) { $status = $line ; } fclose( $fp ); // ファイルをリセット $fp = fopen( &quot;status.dat&quot; , &quot;w&quot; ); fwrite( $fp , &quot;0&quot; ); fclose( $fp ); echo $status ; ?>
  • 19. package { import funnel.*; public class Pochitto extends MovieClip { private const _DT: Number = 1000;//1 秒 (1000 ミリ秒毎 ) private const STATUS_URL: String = &quot;http://www.yourserver.com/getStatus.php&quot; ; private var _timer: Timer ; private var _gio:Gainer; private const _D_OUT_1: int = 12; // コンストラクター public function Pochitto() { // インスタンス化 _gio = new Gainer(); _gio. addEventListener (FunnelEvent. READY , trace ); _gio. addEventListener (FunnelEvent. READY , _gioReadyHandler); _gio. addEventListener (FunnelErrorEvent.REBOOT_ERROR, trace ); _gio. addEventListener (FunnelErrorEvent.CONFIGURATION_ERROR, trace ); _gio. addEventListener (FunnelErrorEvent. ERROR , trace ); } // 準備ができたら実行 private function _gioReadyHandler(e:FunnelEvent): void { _gio.digitalOutput(0). value = 0; _timer = new Timer (_DT, 0); _timer. addEventListener ( TimerEvent.TIMER ,_timerHandler); _timer. start (); } } }
  • 21. Gainer に命令 // 読み込みコンプリートハンドラー private function _completeHandler(e: Event ): void { var status: Number = Number (URLLoader(e. target ).data); trace ( &quot;status : &quot; + status); if (status == 1) { _gio.digitalOutput(0). value = 1; } }