| //////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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 |
| { |
| import flash.utils.Timer; |
| |
| public class RecordingHandler |
| { |
| /* |
| private static var requestsQueue:Array; // array of request data to be processed one after the other. |
| // this is to ensure that data will be sent synchronously one after the other. |
| // please note that in such cases we should not expect request back from the client. (other than |
| // for the incomplete processing. |
| // if we expect so, we need to figure out some other methods. // like we can indicate proceed to next only |
| // after recieveing an x data request from app. |
| |
| private static var currentDataFromAppToAgent:ApplicationDataToAgent; |
| private static var responseRecieved:Boolean = false; |
| private static var currentSocketEvent:SocketResponseEvent; |
| private static var isInPartDataProcessing:Boolean = false; |
| |
| public function RecordingHandler() |
| { |
| |
| } |
| |
| public static function addToRecordRequestQueue1(requestObject:RequestData):int |
| { |
| // this is to handle the multiple requests which needs to be |
| // processed for the record operation. |
| if( !requestsQueue) |
| requestsQueue = new Array(); |
| |
| return requestsQueue.push(requestObject); |
| } |
| |
| |
| public static function processQueuedRecordRequestsFromRecordHandler(socket:CustomSocket ,currentApplicationId:String,fromAgent:Boolean = false):Boolean |
| { |
| var processed:Boolean = false; |
| |
| // we will be getting this request only from the agent,]. |
| // we should only only process the current request and return the fucntion thread |
| // back to the agent. |
| // socket transfer is asynchronous. |
| // by the logic here, we are trying to make it synchronous. |
| if(requestsQueue) |
| { |
| while(requestsQueue.length) |
| { |
| // get the current request |
| var currentRequest:RequestData = requestsQueue.shift(); |
| sendData(socket,currentApplicationId,currentRequest.requestID, currentRequest.requestData); |
| } |
| } |
| |
| |
| return processed; |
| } |
| |
| |
| private static function sendRecordData(socket:CustomSocket,currentApplicationId:String, requestIdentifier:String,dataString:String):void |
| { |
| |
| if(!dataString) |
| dataString = ClientSocketHandler.nullValueIndicator; |
| |
| |
| if(!currentDataFromAppToAgent) |
| currentDataFromAppToAgent = new ApplicationDataToAgent(currentApplicationId,requestIdentifier,dataString); |
| else |
| currentDataFromAppToAgent.init(currentApplicationId,requestIdentifier,dataString); |
| |
| |
| do |
| { |
| if(currentDataFromAppToAgent.willDataBePendingAfterNextSend()) |
| isInPartDataProcessing = true; |
| else |
| isInPartDataProcessing = false; |
| |
| |
| var currentDataToBeSent:String = currentDataFromAppToAgent.getNextFormattedData(requestIdentifier, isInPartDataProcessing); |
| |
| socket.sendRequestString(currentDataToBeSent, true); |
| socket.flush(); |
| var responseString:String = socket.getResponse(); |
| |
| var tempTimer:Timer = new Timer(1000, 0); |
| tempTimer.start(); |
| |
| responseString = socket.getResponse(); |
| |
| // we will only send the data to the socket and wait for the feedback |
| //responseRecieved = false; |
| //while(responseRecieved == false) |
| //{ |
| // var tempTimer:Timer = new Timer(500, 0); |
| // tempTimer.start(); |
| //} |
| |
| |
| }while(isInPartDataProcessing) |
| |
| } |
| |
| // public static function checkTimer |
| |
| public static function handleResponse(event:SocketResponseEvent):void |
| { |
| // we need to process here only if the current response is from recording |
| if(event.isInRecordProcessing) |
| { |
| responseRecieved = true; |
| currentSocketEvent =SocketResponseEvent( event.clone()); |
| } |
| |
| } |
| */ |
| |
| } |
| } |