// Copyright 2012 Citrix Systems, Inc. Licensed under the
// Apache License, Version 2.0 (the "License"); you may not use this
// file except in compliance with the License. Citrix Systems, Inc.
// reserves all rights not expressly granted by 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.
//
// Automatically generated by addcopyright.py at 04/03/2012
package com.cloud.agent;
import com.cloud.agent.api.AgentControlAnswer;
import com.cloud.agent.api.AgentControlCommand;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.StartupCommand;
import com.cloud.exception.ConnectionException;
import com.cloud.host.HostVO;
import com.cloud.host.Status;
/**
* There are several types of events that the AgentManager forwards
*
* 1. Agent Connect & Disconnect
* 2. Commands sent by the agent.
* 3. Answers sent by the agent.
*/
public interface Listener {
/**
*
* @param agentId id of the agent
* @param seq sequence number return by the send() method.
* @param answers answers to the commands.
* @return true if processed. false if not.
*/
boolean processAnswers(long agentId, long seq, Answer[] answers);
/**
* This method is called by the AgentManager when an agent sent
* a command to the server. In order to process these commands,
* the Listener must be registered for host commands.
*
* @param agentId id of the agent.
* @param seq sequence number of the command sent.
* @param commands commands that were sent.
* @return true if you processed the commands. false if not.
*/
boolean processCommands(long agentId, long seq, Command[] commands);
/**
* process control command sent from agent under its management
* @param agentId
* @param cmd
* @return
*/
AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd);
/**
* This method is called by AgentManager when an agent made a
* connection to this server if the listener has
* been registered for host events.
* @param cmd command sent by the agent to the server on startup.
* @param forRebalance TODO
* @param agentId id of the agent
* @throws ConnectionException if host has problems and needs to put into maintenance state.
*/
void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException;
/**
* This method is called by AgentManager when an agent disconnects
* from this server if the listener has been registered for host events.
*
* If the Listener is passed to the send() method, this method is
* also called by AgentManager if the agent disconnected.
*
* @param agentId id of the agent
* @param state the current state of the agent.
*/
boolean processDisconnect(long agentId, Status state);
/**
* If this Listener is passed to the send() method, this method
* is called by AgentManager after processing an answer
* from the agent. Returning true means you're expecting more
* answers from the agent using the same sequence number.
*
* @return true if expecting more answers using the same sequence number.
*/
boolean isRecurring();
/**
* If the Listener is passed to the send() method, this method is
* called to determine how long to wait for the reply. The value
* is in seconds. -1 indicates to wait forever. 0 indicates to
* use the default timeout. If the timeout is
* reached, processTimeout on this same Listener is called.
*
* @return timeout in seconds before processTimeout is called.
*/
int getTimeout();
/**
* If the Listener is passed to the send() method, this method is
* called by the AgentManager to process a command timeout.
* @param agentId id of the agent
* @param seq sequence number returned by the send().
* @return true if processed; false if not.
*/
boolean processTimeout(long agentId, long seq);
}