using System;
using System.Text;
using System.Runtime.InteropServices;

using Cosmos.UserFrame;

/*-----------------------------------------------------------------------------------------------*/
// 설      명 : POS 주변장치 입력 이벤트 관련클래스
// 작  성  자 : 
// 변경  이력 : 
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.Common
{
    /// <summary>
    /// POS 주변장치 입력 이벤트 관련클래스
    /// </summary>
    public class PosOLEDevice
    {
        /// <summary>
        /// IC READER 입력 델리게이트
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void DelegateIcReader(int a, StringBuilder b);

        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void CallbackIc(int returnValue, StringBuilder returnData);

        //#20171016 IC리더기 펌웨어 업데이트 Start, srlee
        /// <summary>
        /// IC 리더기 펌웨어 다운로드 상태 확인
        /// </summary>
        /// <param name="progress"></param>
        /// <param name="total"></param>
        /// <returns></returns>
        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        public delegate void CallbackRegFunc(int progress, int total);
        //#20171016 IC리더기 펌웨어 업데이트 End, srlee

        /// <summary>
        /// 주변장치 입력 델리게이트
        /// </summary>
        /// <param name="sDevice">주변장치형태</param>
        /// <param name="sData1">데이터1</param>
        /// <param name="sData2">데이터2</param>
        /// <param name="sData3">데이터3</param>
        public delegate void DelegateOlePos(string sDevice, string sData1, string sData2, string sData3);

        /// <summary>
        /// 델리게이트 선언 변수
        /// </summary>
        public static DelegateOlePos m_delegateOlePos = null;

        /// <summary>
        /// 델리게이트 이벤트 핸들 설정
        /// </summary>
        /// <param name="delegateOPOS"></param>
        public static void SetEventHandle(DelegateOlePos delegateOPOS)
        {
            try
            {
                m_delegateOlePos = delegateOPOS;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                    "PosOleDevice.SetEventHandle()", "Exception." + ex.Message);
            }
        }

        /// <summary>
        /// 델리게이트 이벤트 핸들 해제
        /// </summary>
        public static void ReleaseEventHandle()
        {
            try
            {
                m_delegateOlePos = null;
            }
            catch (Exception ex)
            {
                UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name,
                                    "PosOleDevice.ReleaseEventHandle()", "Exception." + ex.Message);
            }
        }
    }
}
