package jbCAP;

import jVARIANT.VARIANT;
import jVARIANT.VARENUM;
import java.util.Arrays;

/** @file bCapMessage.java
 *
 *  @brief b-CAP client library
 *
 *  @version	1.2
 *	@date		2014/5/26
 *	@author		DENSO WAVE (m)
 *
 */
public class bCapMessage {
	private int m_hr;
	private int m_iHandle;
	private bCapSocket m_bCapSock;
	
	protected bCapMessage(int iHandle, bCapSocket sock)
	{
		m_hr = 0;
		m_iHandle = iHandle;
		m_bCapSock = sock;
	}
	
	public void Release()
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 137; // Message_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;
		
		m_bCapSock = null;
	}
	
	public VARIANT get_DateTime()
	{
		VARIANT vntReturn = new VARIANT();
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 130; // Message_GetDateTime
		
		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 String get_Description()
	{
		String strReturn = "";
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 131; // Message_GetDescription
		
		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_BSTR)
		{
			strReturn = (String)msg.m_vntArray.get(0).VariantGetObject();
		}
		
		return strReturn;
	}
	
	public String get_Destination()
	{
		String strReturn = "";
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 132; // Message_GetDestination
		
		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_BSTR)
		{
			strReturn = (String)msg.m_vntArray.get(0).VariantGetObject();
		}
		
		return strReturn;
	}
	
	public int get_Number()
	{
		int iReturn = 0;
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 133; // Message_GetNumber
		
		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 int get_SerialNumber()
	{
		int iReturn = 0;
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 134; // Message_GetSerialNumber
		
		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 String get_Source()
	{
		String strReturn = "";
		
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 135; // Message_GetSource
		
		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_BSTR)
		{
			strReturn = (String)msg.m_vntArray.get(0).VariantGetObject();
		}
		
		return strReturn;
	}
	
	public VARIANT get_Value()
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 136; // Message_GetValue
		
		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)
		{
			return msg.m_vntArray.get(0);
		}
		else
		{
			return null;
		}
	}
	
	public void Clear()
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 129; // Message_Clear
		
		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 Reply(VARIANT vntData)
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 128; // Message_Reply
		
		VARIANT vnt[] = new VARIANT[2];
		vnt[0] = new VARIANT(VARENUM.VT_I4, m_iHandle);
		vnt[1] = vntData;
		msg.m_vntArray.addAll(Arrays.asList(vnt));
		
		msg = m_bCapSock.SendMessage(msg);
		
		m_hr = msg.m_ID;
	}
	
	public int HRESULT()
	{
		return m_hr;
	}
}
