LocalConnectionを介して相互接続された個別の.swfで構成されるFlashプロジェクトの成長に伴い、送信されるデータのサイズの必要性が増加する可能性があります。 たとえば、ゲームと別のメッセージアプリケーション間で送信されたメッセージからのデータ交換があります。
送信データが40 Kbを超えると問題が始まり、エラーが表示され、アプリケーションが正常に動作しなくなります。
sendメソッドでパラメーターとして送信できるデータの量は40キロバイトに制限されていることを思い出させてください。
この状況から抜け出す方法はいくつかあります。
- ローカル共有オブジェクトを使用します。
- JavaScriptを使用してデータを転送します。
- LocalConnectionを介してデータをパーツに分割して転送します。
最初の2つのポイントには、最後のポイントよりも大きな変更が必要です。 したがって、最小限のコストで、40 Kb未満の部品でのデータ転送を実現します。
送信されるデータの構造:
- unsigned int-メッセージ全体のデータ長。
- unsigned int-オブジェクトのデータ長。
- シリアル化されたオブジェクトデータ。
すべてのデータを正しく収集するために、LocalConnectionクライアントのラッパーを作成します。
public class ExtendedClient { private var receivedData:ByteArray = new ByteArray(); private var length:int = -1; private var client:Object; public function ExtendedClient(client:Object) { this.client = client; } public function reciverLocalConnection(packet:ByteArray):void {
次に、標準のLocalConnectionクラスを展開し、sendメソッドに渡されるすべての引数のサイズを考慮してデータを転送します。
public class ExtendedLocalConnect extends LocalConnection { private static const METHOD_NAME:String = "reciverLocalConnection"; private var _blockWeight:int; private var _complete:Boolean = true; public function ExtendedLocalConnect() { super(); } public function write(localConnectionName:String, ... args):void {
完全なプロパティが必要な理由を説明しましょう。データを送信するたびに、sendメソッドはStatusEvent.STATUSイベントを発生させます。 この場合、1つのメッセージでこのようなイベントを多数作成できるため、メッセージが送信されたことを判断するために、完了状態を書き込みます。
使用例:
var extendedLocalConnection:ExtendedLocalConnect = new ExtendedLocalConnect(); var client:ExtendedClient = new ExtendedClient(this); extendedLocalConnection.target = client;

受信者の結果

オブジェクトを送信した結果
したがって、標準のLocalConnectionを簡単に置き換えて、データ転送の制限を回避できます。 また、データ転送の標準メソッドを使用する必要がある場合は、ExtendedClientクラスを拡張して、追加の呼び出しメソッドを記述することができます。
UPD:接続の名前と呼び出されたメソッドの名前に応じて、使用可能なブロックサイズの自動検出を追加しました。