からくりブログ

株式会社からくり社員のブログです

【FlashAir 初心者部屋】Luaスクリプト その2

■Flash Air で Lua を動かしてみる

前回の更新から間が空いてしまい申し訳ありません。
今後は月1回は更新していく予定ですのでよろしくお願いします。

さて前回は以下3つの方法のうち「起動時に実行する」を勉強しました。
・起動時に実行する
・書き込みイベントで実行する
・HTTPリクエストで実行する

今回は「HTTPリクエストで実行する」を勉強したいと思います。
「書き込みイベントで実行する」を飛ばして「HTTPリクエストで実行する」を先にやるのかというと
ブラウザ上に結果が出力される為、Luaが正しく動作しているのかが、わかりやすいのが理由です。
また、文法エラーや実行時エラーが発生しても結果が出力されず原因がわかりません。
そこで以下の方法を紹介します。この方法は他のサイトで紹介されています。
この方法を使えばLuaのデバッグができます。

ではさっそく始めたいと思います。

はじめに、デバッグ用のLuaを用意します。
ファイル名は flashair_debug.lua としておきます。

-- HTTPリクエスト用Luaのファイルからチャンクを取得する
f = loadfile("HttpRequest.lua")
-- 保護モードでHTTPリクエスト用LuaをCallする
-- 内部で何らかのエラーが発生しても伝搬されず、 代わりに pcall がエラーをキャッチし、ステータスコードを返します。
local statcode, errormsg = pcall(f)
if statcode then
-- 成功
   print("")
   print("Server: FlashAir")
else
-- 失敗
   print("HTTP/1.1 500 Internal Server Error\n\n")
   print("<pre>")
   print("Server: FlashAir")
   print(" Faild!\n")
   print("------------\n")
   print(errormsg)
   print("\n------------\n")
   print("</pre>")
end

次にHTTPリクエスト用Luaを用意します。
ファイル名は HttpRequest.lua とします。
あえてバグを仕込みます。

print("HttpRequest.Lua!!")
print("

Start HttpRequest.lua

") 文法エラー error("実行中エラー") print("Success!") print("")

では以下順番でデバッグを行います。
・文法エラー(Luaが実行されない)
・実行中エラー
・成功

・文法エラー(Luaが実行されない)

ブラウザよりデバッグ用のLuaを実行します。
http://flashair/flashair_debug.lua

以下結果がブラウザに出力されました。
Luaが実行されていないことがわかります。
HTTPリクエスト用Luaから “文法エラー” を削除します。


Faild!!
————
attempt to call a nil value
————


・実行中エラー

ブラウザよりデバッグ用のLuaを実行します。
以下結果がブラウザに出力されました。
Luaが実行されてエラーが発生したことが分かります。
HTTPリクエスト用Luaから “error(“実行中エラー”) を削除します。


Start HttpRequest.lua
HTTP/1.1 500 Internal Server Error

Faild!!

————

body.lua:4: 実行中エラー

————


・成功

ブラウザよりデバッグ用のLuaを実行します。
http://flashair/flashair_debug.lua

以下結果がブラウザに出力されました。
Luaが正しく実行されました。


Start HttpRequest.lua
Success!


これでデバッグは終わりました。
直接、HTTPリクエスト用Luaを実行できます。

今回はここまでにしたいと思います。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>