package jbCAP;

import jVARIANT.VARIANT;
import jVARIANT.VARENUM;
import java.util.Arrays;

/** @file bCapCommand.java
 *
 *  @brief b-CAP client library
 *
 *  @version	1.2
 *	@date		2014/5/26
 *	@author		DENSO WAVE (m)
 *
 */
public class bCapCommand extends bCapObjectTmpl{

	protected bCapCommand(int iHandle, bCapSocket sock)
	{
		m_hr = 0;
		m_iHandle = iHandle;
		m_iOffset = 120;
		
		m_bCapSock = sock;
	}
	
	@Override
	protected void Disconnect()
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 127; // Command_Release
		
		VARIANT vnt = new VARIANT(VARENUM.VT_I4, m_iHandle);
		msg.m_vntArray.add(vnt);
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
	}
	
	public int get_Timeout()
	{
		int iReturn = 0;
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 114; // Command_GetTimeout
		
		VARIANT vnt = new VARIANT(VARENUM.VT_I4, m_iHandle);
		msg.m_vntArray.add(vnt);
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
		
		if(msg.m_vntArray.size() == 1 && msg.m_vntArray.get(0).VariantGetType() == VARENUM.VT_I4)
		{
			iReturn = (Integer)msg.m_vntArray.get(0).VariantGetObject();
		}
		
		return iReturn;
	}
	
	public void put_Timeout(int newVal)
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 115; // Command_PutTimeout
		
		VARIANT vnt[] = new VARIANT[2];
		vnt[0] = new VARIANT(VARENUM.VT_I4, m_iHandle);
		vnt[1] = new VARIANT(VARENUM.VT_I4, newVal);
		msg.m_vntArray.addAll(Arrays.asList(vnt));

		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
	}
	
	public VARIANT get_Parameters()
	{
		VARIANT vntReturn = new VARIANT();
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 117; // Command_GetParameters
		
		VARIANT vnt = new VARIANT(VARENUM.VT_I4, m_iHandle);
		msg.m_vntArray.add(vnt);
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
		
		if(msg.m_vntArray.size() == 1)
		{
			vntReturn = msg.m_vntArray.get(0);
		}
		
		return vntReturn;
	}
	
	public void put_Parameters(VARIANT newVal)
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 118; // Command_PutParameters
		
		VARIANT vnt[] = new VARIANT[2];
		vnt[0] = new VARIANT(VARENUM.VT_I4, m_iHandle);
		vnt[1] = newVal != null ? newVal : new VARIANT();
		msg.m_vntArray.addAll(Arrays.asList(vnt));
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
	}
	
	public VARIANT get_Result()
	{
		VARIANT vntReturn = new VARIANT();
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 119; // Command_GetResult
		
		VARIANT vnt = new VARIANT(VARENUM.VT_I4, m_iHandle);
		msg.m_vntArray.add(vnt);
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
		
		if(msg.m_vntArray.size() == 1)
		{
			vntReturn = msg.m_vntArray.get(0);
		}
		
		return vntReturn;
	}
	
	public int get_State()
	{
		int iReturn = 0;
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 116; // Command_GetState
		
		VARIANT vnt = new VARIANT(VARENUM.VT_I4, m_iHandle);
		msg.m_vntArray.add(vnt);
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
		
		if(msg.m_vntArray.size() == 1 && msg.m_vntArray.get(0).VariantGetType() == VARENUM.VT_I4)
		{
			iReturn = (Integer)msg.m_vntArray.get(0).VariantGetObject();
		}
		
		return iReturn;		
	}
	
	public void Cancel()
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 113; // Command_Cancel
		
		VARIANT vnt = new VARIANT(VARENUM.VT_I4, m_iHandle);
		msg.m_vntArray.add(vnt);
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
	}
	
	public void Execute(int iMode)
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 112; // Command_Execute
		
		VARIANT[] vnt = new VARIANT[2];
		vnt[0] = new VARIANT(VARENUM.VT_I4, m_iHandle);	
		vnt[1] = new VARIANT(VARENUM.VT_I4, iMode);
		msg.m_vntArray.addAll(Arrays.asList(vnt));
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID; 
	}
}
