package jbCAP;

import java.io.IOException;
import java.net.SocketTimeoutException;

import jVARIANT.VARIANT;

/** @file bCapSocket.java
 *
 *  @brief b-CAP client library
 *
 *  @version	1.2
 *	@date		2014/5/26
 *	@author		DENSO WAVE (m)
 *
 */
abstract class bCapSocket {
	protected static final int S_EXECUTING = 0x00000900;
	protected static final int E_NOT_CONNECTED = 0x80000902;
	protected static final int E_TIMEOUT = 0x80000900;
	protected static final int E_OUTOFMEMORY = 0x8007000E;
	protected static final int E_UNEXPECTED = 0x8000FFFF;
	
	protected bCapPacket ReturnErrorPacket(Throwable e){
		bCapPacket msg = new bCapPacket();
		
		// Return FAILED
		if(e instanceof IOException || e instanceof SocketTimeoutException){
			msg.m_ID = E_TIMEOUT;
		}
		else if(e instanceof OutOfMemoryError){
			msg.m_ID = E_OUTOFMEMORY;
		}
		else{
			msg.m_ID = E_UNEXPECTED;
		}
		
		return msg;
	}
	
	protected void WaitThread(Thread th)
	{
		while(th.isAlive()){
			try{
				Thread.sleep(100);
			}catch(InterruptedException e){}
		}
	}
	
	protected void bCapStart(VARIANT vntParam)
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 1; // Service_Start
		
		if(vntParam != null){
			msg.m_vntArray.add(vntParam);
		}
		
		SendMessage(msg);
	}
	
	protected void bCapStop()
	{
		bCapPacket msg = new bCapPacket();
		msg.m_ID = 2; // Service_Stop
		
		SendMessage(msg);
	}

	abstract protected void Release();
	abstract protected int IsConnected();
	abstract protected bCapPacket SendMessage(bCapPacket msg);
}
