/*** SwfConnectorLib.cs SetVariable,fscommandを使って、Flash.ocxとデータをやりとりする為のライブラリ for C#2.0(VisualStudio2005) Date: 2006/9/5 Author: Sho Hashimoto WebSite: http://shokai.org ***/ using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace SwfConnectorLib { delegate void FSCommandDelegate(AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e); delegate void ArrayListDelegate(System.Collections.ArrayList array); /// /// Flash.ocxとの通信のラッパークラス /// class SwfConnector { private AxShockwaveFlashObjects.AxShockwaveFlash swf; // 操作するFlash.ocx Object private string targetPath; // Flashの中のOcxConnectorへのパス public FSCommandDelegate onRecvDataFunc;// FSCommandでデータを受信した時にコールバックする関数のフック public ArrayListDelegate onRecvArrayFunc; // FSCommandで配列受信した時にコールバックする関数のフック /// /// コンストラクタ /// /// 操作するActiveX Flash Object /// Flashの中のOcxConnectorへのパス public SwfConnector(AxShockwaveFlashObjects.AxShockwaveFlash swf, string targetPath) { this.swf = swf; this.targetPath = targetPath; // FlashからのFSCommand受信イベントを登録 swf.FSCommand += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEventHandler(this.recvFSCommand); } /// /// データをFlashに送信する /// /// /// 送信したデータ public string SendData(string data) { swf.SetVariable(targetPath+".recvData", data); return data; } /// /// fscommandを受信した時 /// /// /// private void recvFSCommand(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e) { Console.WriteLine("recvData - args:" + e.args + " command:" + e.command); switch (e.command) { case "connector.senddata": // データ送信してきた時 onRecvDataFunc.Invoke(e); // コールバック break; case "connector.sendarray": // 配列送信してきた時 ArrayList ar = new ArrayList(e.args.Split(',')); onRecvArrayFunc.Invoke(ar); break; } } /// /// 配列をFlashに送信する /// /// /// 送信したデータ public string SendArray(System.Collections.IList array) { String str = ""; // 配列を文字列に変換 for(int i = 0; i < array.Count; i++){ str += array[i].ToString(); if (i < array.Count - 1) str += ","; // 最後はカンマ付けない } swf.SetVariable(targetPath + ".recvArray", str); return str; } } }