引き続いてFMSネタです。

FMSアプリは.ascというファイルで記述します。
main.ascはキメうちのアプリケーションファイルなので、かならず必要ですが、ほかのファイルに分散して書くことも可能です。

だいたいmain.ascには、つないだときにすることとかをApplicationクラスのイベントハンドラに記述するのがメインになりますが、カスタムクラスをつくったりSharedObjectを編集したりすると結構煩雑になります。
ですので、それを分割したい場合はグローバル関数のload()を使います。

  • main.asc
  • inc/setting.asc
  • inc/app.asc

// main.ascにはload処理のみ load("inc/setting.asc"); load("inc/app.asc");

実際に処理は分割したファイルのほうに書くと、パッケージ的に役割ごとにファイルを分割して、すっきりかけるようになります。(そういう風にうまく分割しないといけませんが)

今回は複数のアプリケーションの開発と、いくつかカスタムクラスもあったので、実際には以下のように分けました。
なお、ApplicationクラスとClientクラスは実際にはビルトインクラスで、かつ自動的に生成されるので拡張する部分のみ記述しています。
またクラス名と.ascファイル名は関係なくても大丈夫。

ライブラリクラス群

  • libs/Client.asc //Clientクラス共通の拡張部分のみ記述
  • libs/Log.asc // Logクラス
  • libs/Response.asc // クライアントとの通信の返却用オブジェクト
  • libs/Delegate.asc // Delegateクラス

このアプリ用のクラス群

  • classes/settings.asc // Applicationクラスの拡張
  • classes/MyApp.asc // Applicationクラスの拡張
  • classes/MyClient.asc // Clientクラスの拡張
  • classes/Counter.asc // 数をカウントしておくクラス

以上を読み込むloadしか書いてないmain.asc

  • main.asc

各ファイルの具体例は以下

こうして、カスタムクラスごとに記述して使いまわしたり、みやすくしたりしました。
コメントとインデントでクラスチックにあしらったりしてますがこの辺は好みで。

libs/Client.asc Client.log = new Log("Client"); /** * 自分以外のClientのメソッドへメッセージ送信 * @param methodName * @param data */ Client.prototype.sendMethod = function( methodName, data ) { var clients = application.clients; var l = clients.length; for( var i=0; i<l; ++i ) { if( clients[i] != this ) clients[i].call( methodName, null, data ); } }

libs/Log.asc ///////////////////////////////////// // // Log Class // ///////////////////////////////////// /* class Log extends Object{*/ trace("[import Log Class]") function Log( appName ) { if( appName ) this.app = appName; } Log.prototype = new Object(); Log.prototype.app = null; /** * trace文を出力する * @param ...rest */ Log.prototype.trace = function(){ var results = []; if(this.app) results.push( "["+this.app.split("/")[0]+"]" ); var l = arguments.length; for( var i=0; i<l; ++i ) { results.push(arguments[i]); } trace( results.join(" / ") ); } application.registerClass("Log", Log); /* }*/

HTML5飯