blob: b34358c1037da0e0a17e9b71253800d8e76b109a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
function FDMSLibrary() {}
// matches with mx.messaging.ChannelSet
function ChannelSet()
{
this.fb_instance_id = FDMSLibrary.create(this.typeName).value;
}
// matches with mx.messaging.Consumer
function Consumer()
{
this.fb_instance_id = FDMSLibrary.create(this.typeName).value;
}
// matches with mx.messaging.Producer
function Producer()
{
this.fb_instance_id = FDMSLibrary.create(this.typeName).value;
}
// matches with mx.messaging.channels.AMFChannel
function AMFChannel(id, uri)
{
this.fb_instance_id = FDMSLibrary.create(this.typeName, id, uri).value;
}
// matches with mx.messaging.channels.HTTPChannel
function HTTPChannel(id, uri)
{
this.fb_instance_id = FDMSLibrary.create(this.typeName, id, uri).value;
}
// matches with mx.messaging.channels.SecureAMFChannel
function SecureAMFChannel(id, uri)
{
this.fb_instance_id = FDMSLibrary.create(this.typeName, id, uri).value;
}
// matches with mx.messaging.channels.SecureHTTPChannel
function SecureHTTPChannel(id, uri)
{
this.fb_instance_id = FDMSLibrary.create(this.typeName, id, uri).value;
}
// matches with mx.messaging.channels.SecureStreamingAMFChannel
function SecureStreamingAMFChannel(id, uri)
{
this.fb_instance_id = FDMSLibrary.create(this.typeName, id, uri).value;
}
// matches with mx.messaging.channels.SecureStreamingHTTPChannel
function SecureStreamingHTTPChannel(id, uri)
{
this.fb_instance_id = FDMSLibrary.create(this.typeName, id, uri).value;
}
// matches with mx.messaging.channels.StreamingAMFChannel
function StreamingAMFChannel(id, uri)
{
this.fb_instance_id = FDMSLibrary.create(this.typeName, id, uri).value;
}
// matches with mx.messaging.channels.StreamingHTTPChannel
function StreamingHTTPChannel(id, uri)
{
this.fb_instance_id = FDMSLibrary.create(this.typeName, id, uri).value;
}
// matches with mx.messaging.messages.AsyncMessage
function AsyncMessage()
{
this.fb_instance_id = FDMSLibrary.create(this.typeName).value;
}
// matches with mx.collections.ArrayCollection
function ArrayCollection()
{
if (arguments.length > 0)
{
this.fb_instance_id = arguments[0];
}
else
{
this.fb_instance_id = FDMSLibrary.create(this.typeName).value;
}
}
// matches with mx.collections.Sort
function Sort()
{
this.fb_instance_id = FDMSLibrary.create(this.typeName).value;
}
// matches with mx.collections.SortField
function SortField(name, caseInsensitive, descending, numeric)
{
name = name || null;
caseInsensitive = caseInsensitive || false;
descending = descending || false;
numeric = numeric || false;
this.fb_instance_id = FDMSLibrary.create(this.typeName, name, caseInsensitive, descending, numeric).value;
}
// matches with mx.rpc.AsyncResponder
function AsyncResponder(result, fault, token)
{
token = token || null;
this.fb_instance_id = FDMSLibrary.create(this.typeName, result, fault, token).value;
}
function FDMSLibrary_initialized(typeData, bridgeName)
{
this.fdsBridge = FABridge[bridgeName];
for (var i = 0; i < typeData.length; i++)
{
fdsBridge.addTypeDataToCache(typeData[i]);
}
FDMSLibrary["bridge"] = fdsBridge;
// setup ArrayCollection, and other types that will be used natively from JS
// e.g. var cs = new Consumer()
AsyncResponder.prototype = fdsBridge.getTypeFromName("mx.rpc::AsyncResponder");
ChannelSet.prototype = fdsBridge.getTypeFromName("mx.messaging::ChannelSet");
Producer.prototype = fdsBridge.getTypeFromName("mx.messaging::Producer");
Consumer.prototype = fdsBridge.getTypeFromName("mx.messaging::Consumer");
AMFChannel.prototype = fdsBridge.getTypeFromName("mx.messaging.channels::AMFChannel");
HTTPChannel.prototype = fdsBridge.getTypeFromName("mx.messaging.channels::HTTPChannel");
SecureAMFChannel.prototype = fdsBridge.getTypeFromName("mx.messaging.channels::SecureAMFChannel");
SecureHTTPChannel.prototype = fdsBridge.getTypeFromName("mx.messaging.channels::SecureHTTPChannel");
SecureStreamingAMFChannel.prototype = fdsBridge.getTypeFromName("mx.messaging.channels::SecureStreamingAMFChannel");
SecureStreamingHTTPChannel.prototype = fdsBridge.getTypeFromName("mx.messaging.channels::SecureStreamingHTTPChannel");
StreamingAMFChannel.prototype = fdsBridge.getTypeFromName("mx.messaging.channels::StreamingAMFChannel");
StreamingHTTPChannel.prototype = fdsBridge.getTypeFromName("mx.messaging.channels::StreamingHTTPChannel");
AsyncMessage.prototype = fdsBridge.getTypeFromName("mx.messaging.messages::AsyncMessage");
ArrayCollection.prototype = fdsBridge.getTypeFromName("mx.collections::ArrayCollection");
Sort.prototype = fdsBridge.getTypeFromName("mx.collections::Sort");
SortField.prototype = fdsBridge.getTypeFromName("mx.collections::SortField");
// notify the page that the FDMSLibrary has completed initializations and can be used
// if you do not wait for this call in your page it is possible to encounter errors
FDMSLibrary_ready = true;
FDMSLibrary.notifyFDMSLibraryReady("flash");
}
// create an instance of the specified class
FDMSLibrary.create = function(className)
{
var args = FABridge.argsToArray(arguments);
args.shift(); // remove className
if (FABridge.refCount > 0)
{
throw new Error("You are trying to call recursively into the Flash Player which is not allowed. In most cases the JavaScript setTimeout function, can be used as a workaround.");
}
else
{
FABridge.refCount++;
retVal = FDMSLibrary["bridge"].target.createObject(className, FDMSLibrary["bridge"].serialize(args));
FABridge.refCount--;
return retVal;
}
}
// destroy an existing AS object by removing all references to it from the cache maps
FDMSLibrary.destroyObject = function(value)
{
var retVal = fdsBridge.releaseNamedASObject(value);
}
// decrement the reference count for the object passed as parameter
FDMSLibrary.release = function(value)
{
FDMSLibrary["bridge"].release(value);
}
// increment the reference count for the object passed as parameter
FDMSLibrary.addRef = function(value)
{
FDMSLibrary["bridge"].addRef(value);
}
// load the swf with the fdmsbridge.as class and create the code to add it to the page.
FDMSLibrary.load = function(path, callback)
{
var result = "<object id='_fesLib' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' \
codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,5,0,0' \
height='1' width='1'> \
<param name='flashvars' value='bridgeName=flash'/> \
<param name='AllowScriptAccess' value='always'/> \
<param name='src' value='"+ (path != undefined ? path : "") + "'/> \
<param name='wmode' value='transparent' /> \
<embed name='_fesLib' pluginspage='http://www.macromedia.com/go/getflashplayer' allowScriptAccess='always'\
src='" + (path != undefined ? path : "") + "' height='1' width='1' flashvars='bridgeName=flash'/> \
</object>";
document.write(result);
// todo:need a callback and variable here so you can keep track that both the fabridge and the fdmsbridge are available
FDMSLibrary.addInitializationCallback("flash", callback);
// register for call back when the FABridge has completed initialization
FABridge.addInitializationCallback("flash", FABridge_ready);
}
/**
* Indicates to the FDMSLibrary that the FABridge is now connected.
* The FDSMLibrary will notify the client when the other required initialization is complete.
*/
function FABridge_ready()
{
FABridge_ready = true;
FDMSLibrary.notifyFDMSLibraryReady("flash");
}
var FABridge_ready;
var FDMSLibrary_ready;
FDMSLibrary.initCallbacks = {}
/**
* Attach a callback to the underlying FABridge to get notified when the initialization is done
*/
FDMSLibrary.addInitializationCallback = function(bridgeName, callback)
{
if (FABridge_ready != undefined && FDMSLibrary_ready != undefined)
{
callback.call(inst);
return;
}
var callbackList = FDMSLibrary.initCallbacks[bridgeName];
if(callbackList == null)
FDMSLibrary.initCallbacks[bridgeName] = callbackList = [];
callbackList.push(callback);
}
/**
* Call the JS functions attached as callbacks on the library initialization and clear them from the list
* once their are done executing
*/
FDMSLibrary.notifyFDMSLibraryReady = function(bridgeName)
{
if (FABridge_ready != undefined && FDMSLibrary_ready != undefined)
{
var callbacks = FDMSLibrary.initCallbacks[bridgeName];
if(callbacks == null)
return;
for(var i=0;i<callbacks.length;i++)
callbacks[i].call();
delete FDMSLibrary.initCallbacks[bridgeName]
}
}