blob: 47dbed1686cc4160b78e54d20de829d1f6d28b6c [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.
//
////////////////////////////////////////////////////////////////////////////////
package mx.automation.tool
{
public class ApplicationDataToAgent
{
private var m_oAppId:String;
private var m_oCurrentResponseIdString:String;
private var m_oCurrentResponseData:String;
private var m_nRemianingDataLength:int;
private var m_bFreshData:Boolean;
public function get currentResponseIdString():String
{
return m_oCurrentResponseIdString;
}
public function get currentResponseData():String
{
return m_oCurrentResponseData;
}
public function ApplicationDataToAgent( p_oAppId:String,p_oResponseID:String ,p_oResponseData:String)
{
m_oAppId = p_oAppId;
m_oCurrentResponseIdString = p_oResponseID;
m_oCurrentResponseData = p_oResponseData;
m_nRemianingDataLength = m_oCurrentResponseData.length;
m_bFreshData = true;
}
public function init( p_oAppId:String,p_oResponseID:String ,p_oResponseData:String):void
{
m_oAppId = p_oAppId;
m_oCurrentResponseIdString = p_oResponseID;
m_oCurrentResponseData = p_oResponseData;
m_nRemianingDataLength = m_oCurrentResponseData.length;
m_bFreshData = true;
}
public function willDataBePendingAfterNextSend():Boolean
{
// this is the max data length which can be sent
var a_nDataLength:int = getMaxDataLength();
if(m_nRemianingDataLength > a_nDataLength)
return true;
else
return false;
}
public function getNextSet(p_oResponseIdString:String):String
{
var a_oCurrentSet:String;
// the remainining response will be processed only if the request came wit the same reponseID
if(p_oResponseIdString == m_oCurrentResponseIdString)
{
// check whether the data remains to be sent
if(m_nRemianingDataLength)
{
//check whether we need to split the data or we can send it in one shot.
if(getRemainingTotalStringLengthToBeSent() > ClientSocketHandler.toAppDataMaxLength)
{
// get the next set data
var a_nDataLength:int = getMaxDataLength();
var a_oPartData:String = m_oCurrentResponseData.substr((m_oCurrentResponseData.length - m_nRemianingDataLength), a_nDataLength);
// since we are sendnig a_nDataLength, re calculate the m_nRemianingDataLength
m_nRemianingDataLength -= a_nDataLength;
a_oCurrentSet = a_oPartData;
}
else
{
var a_oPartData1:String = m_oCurrentResponseData.substr((m_oCurrentResponseData.length - m_nRemianingDataLength), m_nRemianingDataLength);
// send complete remaining data.
m_nRemianingDataLength = 0;
a_oCurrentSet = a_oPartData1;
}
}
else if(m_bFreshData)
a_oCurrentSet = "";
m_bFreshData = false;
}
return a_oCurrentSet;
}
public function sendNextSet(p_oResponseIdString:String):int
{
// the remainining response will be processed only if the request came wit the same reponseID
if(p_oResponseIdString == m_oCurrentResponseIdString)
{
// check whether the data remains to be sent
if(m_nRemianingDataLength)
{
//check whether we need to split the data or we can send it in one shot.
if(getRemainingTotalStringLengthToBeSent() > ClientSocketHandler.toAppDataMaxLength)
{
// get the next set data
var a_nDataLength:int = getMaxDataLength();
var a_oPartData:String = m_oCurrentResponseData.substr((m_oCurrentResponseData.length - m_nRemianingDataLength), a_nDataLength);
// since we are sendnig a_nDataLength, re calculate the m_nRemianingDataLength
m_nRemianingDataLength -= a_nDataLength;
sendData(a_oPartData, 1);
}
else
{
var a_oPartData1:String = m_oCurrentResponseData.substr((m_oCurrentResponseData.length - m_nRemianingDataLength), m_nRemianingDataLength);
// send complete remaining data.
m_nRemianingDataLength = 0;
sendData(a_oPartData1,0);
}
}
else if(m_bFreshData)
sendData("",0);
m_bFreshData = false;
}
return m_nRemianingDataLength;
}
public function sendForcefulCompletion(p_oResponseIdString:String):int
{
sendData("", 0);
return 0;
}
public function isDataRemaining():Boolean
{
if(m_nRemianingDataLength > 0)
return true;
return false;
}
protected function getRemainingTotalStringLengthToBeSent():int
{
// data will be sent in this format
// AppId|ResponseId|ResponseData|End_Indicator or PartIndicator
// part indicator and end indicator is supposed to have the same length.
var a_nNextSendLength:int = m_oAppId.length + m_oCurrentResponseIdString.length + m_nRemianingDataLength+
(ClientSocketHandler.separator.length)*3+ ClientSocketHandler.dataToAgentEndIndicator.length;
return a_nNextSendLength;
}
protected function getMaxDataLength():int
{
return ( ClientSocketHandler.toAppDataMaxLength - m_oAppId.length - m_oCurrentResponseIdString.length-
((ClientSocketHandler.separator.length)*3) - ClientSocketHandler.dataToAgentEndIndicator.length);
}
public function getNextFormattedData(p_oResponseIdString:String,p_bPartIndicator:Boolean):String
{
var rowData:String = getNextSet(p_oResponseIdString);
var dataToBeSent:String = m_oAppId
+ ClientSocketHandler.separator +
m_oCurrentResponseIdString
+ ClientSocketHandler.separator +
rowData
+ ClientSocketHandler.separator;
if(p_bPartIndicator == true) // it is part
dataToBeSent = dataToBeSent+ClientSocketHandler.dataToAgentPartIndicator;
else
dataToBeSent = dataToBeSent+ClientSocketHandler.dataToAgentEndIndicator;
return dataToBeSent;
}
protected function sendData(p_oDataString:String, p_nPartIndicator:int):void
{
var dataToBeSent:String = m_oAppId
+ ClientSocketHandler.separator +
m_oCurrentResponseIdString
+ ClientSocketHandler.separator +
p_oDataString
+ ClientSocketHandler.separator;
if(p_nPartIndicator == 1) // it is part
dataToBeSent = dataToBeSent+ClientSocketHandler.dataToAgentPartIndicator;
else
dataToBeSent = dataToBeSent+ClientSocketHandler.dataToAgentEndIndicator;
m_bFreshData = false;
/*
if(m_oCurrentResponseIdString == "Record")
{
var integ:int = 0;
trace("Sending Record here");
}
*/
//trace ("sending ... " + m_oCurrentResponseIdString + " : " + String(p_nPartIndicator) );
ClientSocketHandler.sendDataWithoutFormatting(dataToBeSent);
}
}
}