/***
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;
}
}
}