/* Copyright 2004 Macromedia, Inc. All rights reserved.
The following is Sample Code and is subject to all restrictions
on such code as contained in the Macromedia Flash Communication
Server MX 1.5 End User License Agreement .
*/

application.onConnect = function(p_client, p_autoSenseBW)
{
	trace("onConnect");
	//Add security here

	this.acceptConnection(p_client);

	if (p_autoSenseBW)
		this.calculateClientBw(p_client);
	else
		p_client.call("onBWDone");
}

Client.prototype.getStreamLength = function(p_streamName) {
	trace("getStreamLength:"+p_streamName);
	return Stream.length(p_streamName);
}

application.calculateClientBw = function(p_client)
{
	p_client.payload = "";
	for (var i=0; i<1024; i++)
		p_client.payload += "1";	//2K

	var res = new Object();
	res.latency = 0;
	res.bwTime = 0;
	res.count = 0;
	res.sent = 0;
	res.client = p_client;
	var stats = p_client.getStats();
	res.beginningValues = {b_down:stats.bytes_out, b_up:stats.bytes_in, time:(new Date()).getTime()};
	res.onResult = function(p_val) {
		this.count++;
		var timePassed = ( (new Date()).getTime() - this.beginningValues.time );

		if ( this.count == 1 )
		{
			this.latency = timePassed;
		}

		// If we have a hi-speed network with low latency send more to determine
		// better bandwidth numbers, send no more than 6 packets
		if (( this.count >= 4 && this.count < 6)&&(timePassed < 2000))
		{
			this.sent++;
			this.client.payload += this.client.payload;
			this.client.call("onBWCheck", this, this.client.payload);
		}
		else if ( this.sent == this.count )
		{	delete this.client.payload;
			// Got back responses for all the packets compute the bandwidth.
			var stats = this.client.getStats();
			var deltaDown = (stats.bytes_out - this.beginningValues.b_down)*8/1024;
			var deltaTime = (((new Date()).getTime() - this.beginningValues.time) -
							(this.count - 3) * this.latency)/1000;
			var kbitDown = Math.round(deltaDown/deltaTime);
			trace("(d) down:"+kbitDown+" kilobits/s " );

			this.client.call("onBWDone", null, kbitDown );
		}
	}
	// First payload is empty to check latency
	res.sent++;
	p_client.call("onBWCheck", res, "");
	for ( var k = 0; k < 3; k++ )
	{
		res.sent++;
		p_client.call("onBWCheck", res, p_client.payload);
		p_client.payload += p_client.payload;
	}
}
