Forked from: felicacontest2010's FeliCa Flash Contest - FeliCa Search sample diff:399 FeliCa Flash Contest - Edy Viewer felicacontes.. forked:3favorite:1lines:195license : see code comments modified : 2010-01-22 21:44:32 Embed Tweet <?xml version="1.0" encoding="utf-8"?> <!-- forked from self_oriented's flash on 2010-1-22 --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="465" height="465" creationComplete="init()" horizontalScrollPolicy="off" verticalScrollPolicy="off"> <mx:SWFLoader x="1" y="1" id="loader"/> <mx:Button x="10" y="10" label="Edyを置いてボタンを押してください" click="onStart()" id="button" enabled="false" width="298" height="40" fontSize="16"/> <mx:TextArea id="txtMsg" x="10" y="314" text="" width="445" height="141" fontSize="14" editable="false"/> <mx:DataGrid x="10" y="90" width="445" height="216" dataProvider="{tableData}" resizableColumns="false" styleName="columnStyles" borderThickness="6" borderColor="0x888888"> <mx:columns> <mx:DataGridColumn headerText="取引日時" dataField="date" width="170" textAlign="left"/> <mx:DataGridColumn headerText="チャージ" dataField="charge" textAlign="right" fontSize="18"/> <mx:DataGridColumn headerText="支払い" dataField="payment" textAlign="right" fontSize="18"/> <mx:DataGridColumn headerText="残高" dataField="balance" textAlign="right"/> </mx:columns> </mx:DataGrid> <mx:TextArea x="175" y="58" width="280" id="edyNumber" fontSize="12" editable="false" height="24"/> <mx:TextArea x="10" y="58" width="157" id="balance" fontSize="12" editable="false" height="24"/> <mx:Style> .dataGridStyles { fontFamily:"_ゴシック"; fontSize:"16"; fontAntiAliasType:"Advanced"; } .columnStyles { fontSize:"16"; fontFamily:"_ゴシック"; fontStyle:"bold"; paddingRight:"5"; borderColor:"0x888888"; verticalGridLineColor:"0x888888"; } </mx:Style> <mx:Script> <![CDATA[ // イベント概要,エントリー規約をご確認ください // http://wonderfl.net/event/felica // see http://wonderfl.net/event/felica for contest regulation, only in Japanese for now, sorry // copyright sony corp. all rights reserved. // copied from http://www.felicalauncher.com/sdk4air/#menu_02 with permission :-) import flash.accessibility.Accessibility; import flash.display.Loader; import flash.display.Sprite; import flash.events.*; import flash.net.LocalConnection; import flash.net.URLRequest; import flash.utils.setTimeout; import mx.collections.ArrayCollection; import mx.formatters.NumberFormatter; import flash.system.Security; private var sendConnection:LocalConnection = new LocalConnection(); private var recvConnection:LocalConnection = new LocalConnection(); [Bindable] private var tableData:ArrayCollection = new ArrayCollection(); // 外部サーバーにあるEdyCCL_for_wonderfl.swfをロードします。 public function init():void { loader.visible = false; loader.addEventListener(Event.COMPLETE, this.onLoadComplete); loader.source = "http://www.felicalauncher.com/sdk4air/wonderfl/EdyCCL_for_wonderfl.swf?localconnection=true&pollingtimeout=10&licensekey=ff2a9b72-8878-40a4-9202-57834cdd898c"; } // ロード完了時に呼ばれるリスナー private function onLoadComplete(e:Event):void { flash.utils.setTimeout(init2, 1000); // EdyCCLがLocalConnction可能になるまで少し待つ } // ロードしたSWFファイルとローカルコネクションを張ります private function init2(): void { this.sendConnection.addEventListener(StatusEvent.STATUS, this.onLocalconnectionStatus); this.sendConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.onSecurityError); this.recvConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.onSecurityError); this.recvConnection.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError); this.recvConnection.client = this; this.recvConnection.allowDomain("*"); button.enabled = true; } // ローカルコネクション接続後に呼ばれるリスナー private function onLocalconnectionStatus(e:StatusEvent): void { if (e.level == "status") { } else if (e.level == "warning") { } else if (e.level == "error") { endConnection(); } } // セキュリティーエラー時のリスナー private function onSecurityError(e:SecurityErrorEvent): void { endConnection(); } // 非同期エラーのリスナー private function onAsyncError(e:AsyncErrorEvent): void { endConnection(); } // 終了処理 private function endConnection():void { this.recvConnection.close(); button.enabled = true; } // ボタンが押されたときに呼ばれるリスナー private function onStart(): void { button.enabled = false; try { this.recvConnection.connect("_edyOfflineBalanceResponse"); // 上位Flashへ結果を返信する。 } catch(e:TypeError) { } catch(e:ArgumentError) { } var params:Object = new Object(); params.action = "start"; // EdyCCL_for_wonderfl.swfにEdy読み取りを要求する this.sendConnection.send("_edyOfflineBalanceRequest", "onEdyOfflineBalanceReceive", params); } private static const MSG_EDY_SET:uint = 1000; // Edyをセットしてください。 private static const MSG_AUTH_FAILURE:uint = 1001; // FeliCaProxyとの認証に失敗しました。 private static const MSG_POLLING_FAILURE:uint = 1002; // ワンショットポーリングの実行に失敗しました。 private static const MSG_EDY_READ:uint = 1003; // Edyを読み込んでいます。(Edyがセットされた直後) private static const MSG_POLLING_TIMEOUT:uint = 1004; // Edyがセットされませんでした。 private static const MSG_FELICA_PROXY_ERROR:uint = 1005; // FeliCaProxyでエラーが発生しました。 private static const MSG_PASORI_LOCK_START:uint = 1006; // パソリを占有しました。 private static const MSG_PASORI_LOCK_END:uint = 1007; // パソリの占有を解除しました。 private static const MSG_PASORI_OPEN:uint = 1008; // パソリをオープンしました。 private static const MSG_EDY_FIND:uint = 1009; // Edyにポーリングしました。 private static const MSG_PASORI_CLOSE:uint = 1010; // パソリをクローズしました。 private static const MSG_FELICA_ACCESS_FAILURE:uint = 1011; // Edy履歴読み込み中でFeliCaアクセスエラーが発生しました。 private static const MSG_private_ERROR:uint = 1012; // 内部処理エラーが発生しました。(内部パラメータエラー等) private static const MSG_EDY_BALANCE_SUCCESS:uint = 1013; // Edy履歴表示完了 private static const MSG_SET_TIMEOUT:uint = 1014; // SetTimetoutに成功しました。 private static const MSG_EDY_BALANCE_TERMINATE:uint = 1015; // Edyオフライン残高確認が終了しました。 // EdyCCL_for_wonderfl.swfから返されたメッセージを処理する public function onEdyOfflineBalanceReceive(param:Object): void { var msgNumber:uint = param.no; var msg:String = ""; switch(msgNumber) { case MSG_EDY_SET : msg = "Edyをセットしてください。"; break; case MSG_AUTH_FAILURE : msg = "FeliCaProxyとの認証に失敗しました。"; break; case MSG_POLLING_FAILURE : msg = "ワンショットポーリングの実行に失敗しました。"; break; case MSG_EDY_READ : msg = "Edyを読み込んでいます。(Edyがセットされた直後)"; break; case MSG_POLLING_TIMEOUT : msg = "Edyがセットされませんでした。"; break; case MSG_FELICA_PROXY_ERROR : msg = "FeliCaProxyでエラーが発生しました。 "; break; case MSG_PASORI_LOCK_START : msg = "パソリを占有しました。"; break; case MSG_PASORI_LOCK_END : msg = "パソリの占有を解除しました。"; break; case MSG_PASORI_OPEN : msg = "パソリをオープンしました。"; break; case MSG_EDY_FIND : msg = "Edyにポーリングしました。"; break; case MSG_PASORI_CLOSE : msg = "パソリをクローズしました。 "; break; case MSG_FELICA_ACCESS_FAILURE : msg = "Edy履歴読み込み中にFeliCaアクセスエラーが発生しました。"; break; case MSG_private_ERROR : msg = "内部処理エラーが発生しました。(内部パラメータエラー等)"; break; case MSG_EDY_BALANCE_SUCCESS : msg = "Edy履歴表示完了"; this.showEdyBalance(param); break; case MSG_SET_TIMEOUT : msg = "SetTimeoutに成功しました。"; break; case MSG_EDY_BALANCE_TERMINATE : msg = "Edyオフライン残高確認が終了しました。"; this.endConnection(); break; default : msg = "不正なメッセージを受信しました。"; break; } if (msg.length != 0) { this.txtMsg.text += msg + "\n"; } } // 読み取り結果を出力する private function showEdyBalance(param:Object): void { edyNumber.text = "Edy番号: " + param.edyNo as String; balance.text = "残高: " + param.edyAmount as String; var amount:uint = param.edyAmount as uint; var history:Array = param.history as Array; for (var i:uint = 0; i < history.length; i++) { var value:uint = param.history[i].value as uint; var msg:String; var charge:String = ""; var payment:String = ""; var balance:String = ""; var action:uint = param.history[i].action as uint; var numberbase:NumberFormatter = new NumberFormatter(); if (action == 0x02) { charge = param.history[i].value; charge = "\\" + numberbase.format(charge); } else if (action == 0x20) { payment = param.history[i].value; payment = "\\" + numberbase.format(payment); } balance = "\\" + numberbase.format((param.history[i].amount as uint).toString()); this.tableData.addItem({ date:param.history[i].dealTime as String, action:(param.history[i].action as uint).toString(), charge:charge, payment:payment, balance:balance }); } this.button.enabled = true; } ]]> </mx:Script> </mx:Application> Code Fullscreen Preview Fullscreen keiso Edy FeliCa contest level SecurityErrorEvent.SECURITY_ERROR TypeError AsyncErrorEvent.ASYNC_ERROR AsyncErrorEvent Object StatusEvent StatusEvent.STATUS ArgumentError toString SecurityErrorEvent Security.allowDomain String date addEventListener uint text length Event Array sort new page view favorite forked pv0 forked from: FeliCa Flash Cont.. hiraybb forked:0 favorite:0lines:196 (diff:1) pv0 forked from: FeliCa Flash Cont.. hiraybb forked:0 favorite:0lines:196 (diff:1) pv381 forked from: FeliCa Flash Cont.. Pikoro forked:0 favorite:0lines:196 (diff:9)