/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.eas.opc.da.dcom;
import java.util.Date;
import java.util.logging.Logger;
import org.jinterop.dcom.common.JIException;
import org.jinterop.dcom.core.JIArray;
import org.jinterop.dcom.core.JIFlags;
import org.jinterop.dcom.core.JILocalCoClass;
import org.jinterop.dcom.core.JILocalInterfaceDefinition;
import org.jinterop.dcom.core.JILocalMethodDescriptor;
import org.jinterop.dcom.core.JILocalParamsDescriptor;
import org.jinterop.dcom.core.JIStruct;
import org.jinterop.dcom.core.JIVariant;
/**
*
* @author pk
*/
public class OPCDataCallbackImpl
{
final static String IID_IOPCDataCallback = "39c13a70-011e-11d0-9675-0020afd8adb3";
private OPCDataListener listener;
private JILocalCoClass localClass;
OPCDataCallbackImpl(OPCDataListener listener) throws JIException
{
this.listener = listener;
createCoClass();
}
JILocalCoClass getLocalClass()
{
return localClass;
}
private void createCoClass() throws JIException
{
localClass = new JILocalCoClass(new JILocalInterfaceDefinition(IID_IOPCDataCallback, false), this, false);
JILocalParamsDescriptor onDataChangeParams = new JILocalParamsDescriptor();
onDataChangeParams.addInParamAsType(Integer.class, JIFlags.FLAG_REPRESENTATION_UNSIGNED_INT); //dwTransid
onDataChangeParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hGroup
onDataChangeParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hrMasterquality
onDataChangeParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hrMastererror
onDataChangeParams.addInParamAsType(Integer.class, JIFlags.FLAG_REPRESENTATION_UNSIGNED_INT); //dwCount
onDataChangeParams.addInParamAsObject(new JIArray(Integer.class, null, 1, true), JIFlags.FLAG_NULL); //phClientItems
onDataChangeParams.addInParamAsObject(new JIArray(JIVariant.class, null, 1, true), JIFlags.FLAG_NULL); //pvValues
onDataChangeParams.addInParamAsObject(new JIArray(Short.class, null, 1, true), JIFlags.FLAG_NULL); //pwQualities
onDataChangeParams.addInParamAsObject(new JIArray(new FileTime().getStruct(), null, 1, true), JIFlags.FLAG_NULL); //pftTimeStamps
onDataChangeParams.addInParamAsObject(new JIArray(Integer.class, null, 1, true), JIFlags.FLAG_NULL); //pErrors
JILocalMethodDescriptor onDataChangeDesc = new JILocalMethodDescriptor("OnDataChange", 0, onDataChangeParams);
localClass.getInterfaceDefinition().addMethodDescriptor(onDataChangeDesc);
JILocalParamsDescriptor onReadCompleteParams = new JILocalParamsDescriptor();
onReadCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_REPRESENTATION_UNSIGNED_INT); //dwTransid
onReadCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hGroup
onReadCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hrMasterquality
onReadCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hrMastererror
onReadCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_REPRESENTATION_UNSIGNED_INT); //dwCount
onReadCompleteParams.addInParamAsObject(new JIArray(Integer.class, null, 1, true), JIFlags.FLAG_NULL); //phClientItems
onReadCompleteParams.addInParamAsObject(new JIArray(JIVariant.class, null, 1, true), JIFlags.FLAG_NULL); //pvValues
onReadCompleteParams.addInParamAsObject(new JIArray(Short.class, null, 1, true), JIFlags.FLAG_NULL); //pwQualities
onReadCompleteParams.addInParamAsObject(new JIArray(new FileTime().getStruct(), null, 1, true), JIFlags.FLAG_NULL); //pftTimeStamps
onReadCompleteParams.addInParamAsObject(new JIArray(Integer.class, null, 1, true), JIFlags.FLAG_NULL); //pErrors
JILocalMethodDescriptor onReadCompleteDesc = new JILocalMethodDescriptor("OnReadComplete", 1, onReadCompleteParams);
localClass.getInterfaceDefinition().addMethodDescriptor(onReadCompleteDesc);
JILocalParamsDescriptor onWriteCompleteParams = new JILocalParamsDescriptor();
onWriteCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_REPRESENTATION_UNSIGNED_INT); //dwTransid
onWriteCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hGroup
onWriteCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hrMastererror
onWriteCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_REPRESENTATION_UNSIGNED_INT); //dwCount
onWriteCompleteParams.addInParamAsObject(new JIArray(Integer.class, null, 1, true), JIFlags.FLAG_NULL); //pClientHandles
onWriteCompleteParams.addInParamAsObject(new JIArray(Integer.class, null, 1, true), JIFlags.FLAG_NULL); //pErrors
JILocalMethodDescriptor onWriteCompleteDesc = new JILocalMethodDescriptor("OnWriteComplete", 2, onWriteCompleteParams);
localClass.getInterfaceDefinition().addMethodDescriptor(onWriteCompleteDesc);
JILocalParamsDescriptor onCancelCompleteParams = new JILocalParamsDescriptor();
onCancelCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_REPRESENTATION_UNSIGNED_INT); //dwTransid
onCancelCompleteParams.addInParamAsType(Integer.class, JIFlags.FLAG_NULL); //hGroup
JILocalMethodDescriptor onCancelCompleteDesc = new JILocalMethodDescriptor("OnCancelComplete", 3, onCancelCompleteParams);
localClass.getInterfaceDefinition().addMethodDescriptor(onCancelCompleteDesc);
}
public void OnDataChange(int dwTransid, int hGroup, int hrMasterQuality, int hrMasterError, int dwCount,
JIArray phClientItems, JIArray pvValues, JIArray pwQualities, JIArray pftTimeStamps, JIArray pErrors) throws JIException
{
Logger.getLogger(OPCDataCallbackImpl.class.getName()).finest("OnDataChange, transid="+dwTransid);
Integer[] clientHandles = (Integer[]) phClientItems.getArrayInstance();
Object[] values = new Object[dwCount];
Short[] qualities = (Short[]) pwQualities.getArrayInstance();
Date[] timeStamps = new Date[dwCount];
Integer[] errors = (Integer[]) pErrors.getArrayInstance();
JIStruct[] fileTimeStructs = (JIStruct[]) pftTimeStamps.getArrayInstance();
for (int i = 0; i < fileTimeStructs.length; i++)
timeStamps[i] = new FileTime(fileTimeStructs[i]).getTime();
JIVariant[] valueVariants = (JIVariant[]) pvValues.getArrayInstance();
for (int i = 0; i < valueVariants.length; i++)
values[i] = valueVariants[i].getObject();
listener.dataChanged(dwTransid, hGroup, hrMasterQuality, hrMasterError, clientHandles, values, qualities, timeStamps, errors);
}
public void OnReadComplete(int dwTransid, int hGroup, int hrMasterQuality, int hrMasterError, int dwCount,
JIArray phClientItems, JIArray pvValues, JIArray pwQualities, JIArray pftTimeStamps, JIArray pErrors) throws JIException
{
Logger.getLogger(OPCDataCallbackImpl.class.getName()).finest("OnReadComplete, transid="+dwTransid);
Integer[] clientHandles = (Integer[]) phClientItems.getArrayInstance();
Object[] values = new Object[dwCount];
Short[] qualities = (Short[]) pwQualities.getArrayInstance();
Date[] timeStamps = new Date[dwCount];
Integer[] errors = (Integer[]) pErrors.getArrayInstance();
JIStruct[] fileTimeStructs = (JIStruct[]) pftTimeStamps.getArrayInstance();
for (int i = 0; i < fileTimeStructs.length; i++)
timeStamps[i] = new FileTime(fileTimeStructs[i]).getTime();
JIVariant[] valueVariants = (JIVariant[]) pvValues.getArrayInstance();
for (int i = 0; i < valueVariants.length; i++)
values[i] = valueVariants[i].getObject();
listener.readCompleted(dwTransid, hGroup, hrMasterQuality, hrMasterError, clientHandles, values, qualities, timeStamps, errors);
}
public void OnWriteComplete(int dwTransid, int hGroup, int hrMasterError, int dwCount,
JIArray pClientHandles, JIArray pErrors)
{
Logger.getLogger(OPCDataCallbackImpl.class.getName()).finest("OnWriteComplete, transid="+dwTransid);
Integer[] clientHandles = (Integer[]) pClientHandles.getArrayInstance();
Integer[] errors = (Integer[]) pErrors.getArrayInstance();
listener.writeCompleted(dwTransid, hGroup, hrMasterError, clientHandles, errors);
}
public void OnCancelComplete(int dwTransid, int hGroup)
{
Logger.getLogger(OPCDataCallbackImpl.class.getName()).finest("OnCancelComplete, transid="+dwTransid);
listener.cancelCompleted(dwTransid, hGroup);
}
}