using System;
using System.Text;
using System.Threading;
using System.Runtime.InteropServices;
//using Microsoft.PointOfService;
using System.ComponentModel;
using Cosmos.BaseFrame;
using Cosmos.UserFrame;
using Cosmos.Common;
using Cosmos.CommonManager;
/*-----------------------------------------------------------------------------------------------*/
// 설 명 : Hand Scanner 제어
// 작 성 자 :
// 변경 이력 :
/*-----------------------------------------------------------------------------------------------*/
namespace Cosmos.OLEDevice
{
public class DeviceScanner : IScannerUs
{
///
/// StateServer Object (StateServer 객체)
///
public StateServer StateObject = (StateServer)StateServer.GetInstance();
///
/// Device 상태 정보 객체
///
public DeviceStatus devStatus = new DeviceStatus();
/////
///// Pos for .Net Scanner 객체
/////
//private Scanner scanner = null;
/////
///// Pos for .Net의 Device 정보를 가져오기 위한 객체
/////
//private PosExplorer posExplorer = null;
private string m_sScanData = string.Empty;
private string m_sScanDataLabel = string.Empty;
private string m_sScanDataType = string.Empty;
private BackgroundWorker bw = null;
private int m_nErrorCount = 0;
///
/// 생성자
///
public DeviceScanner()
{
try
{
//posExplorer = new PosExplorer();
devStatus = (DeviceStatus)StateObject.DEVICE;
DeviceStatusInit();
bw = new BackgroundWorker();
m_nErrorCount = 0;
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
"DevicePosPrinter.Devicescanner()", ex.Message);
}
}
///
/// 디바이스 Open시 처리함수
///
/// 장비종류(ex- "Msr","PosPrinter","Scanner"...)
/// 레지스트리 항목(ex- "DefaultMsr","DefaultPosPrinter","DefaultScanner"...)
///
public bool OpenDevice(string sDeviceType, string sLogicalName)
{
bool bRet = false;
try
{
//DeviceInfo devinfo = null;
//if (sDeviceType == DeviceType.Scanner && sLogicalName == PosConst.OPOS_LDN.SCANNER)
// devinfo = posExplorer.GetDevice(DeviceType.Scanner, PosConst.OPOS_LDN.SCANNER);
//else
//{
// devStatus.Scanner.Open = false;
// devStatus.Scanner.Status = "DEVICE INFO ERROR";
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.OpenDevice()", devStatus.Scanner.Status);
// return bRet;
//}
//if (devinfo == null)
//{
// devStatus.Scanner.Open = false;
// devStatus.Scanner.Status = "DEVICE INFO ERROR";
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.OpenDevice()", devStatus.Scanner.Status);
// return bRet;
//}
//scanner = (Scanner)posExplorer.CreateInstance(devinfo);
//if (scanner != null)
//{
// scanner.DataEvent += new DataEventHandler(Scanner_DataEvent);
// scanner.ErrorEvent += new DeviceErrorEventHandler(Scanner_ErrorEvent);
// try
// {
// scanner.Open();
// }
// catch (Exception ex)
// {
// devStatus.Scanner.Status = "OPEN FAIL";
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.OpenDevice()", devStatus.Scanner.Status + " " + ex.Message);
// //UserLog.WriteAMSLog("DEV", "ERR", "0103", "GunScanner " + devStatus.Scanner.Status);
// return bRet;
// }
// try
// {
// scanner.Claim(1000);
// }
// catch (Exception ex)
// {
// devStatus.Scanner.Status = "CLAIM FAIL";
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "Devicescanner.OpenDevice()", devStatus.Scanner.Status + " " + ex.Message);
// //UserLog.WriteAMSLog("DEV", "ERR", "0203", "GunScanner " + devStatus.Scanner.Status);
// //장비관련 AMS 로그 삭제 요청(2015.07.23)
// return bRet;
// }
// try
// {
// scanner.DeviceEnabled = true;
// }
// catch (Exception ex)
// {
// devStatus.Scanner.Status = "DEVICE ENABLED FAIL";
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.OpenDevice()", devStatus.Scanner.Status + " " + ex.Message);
// return bRet;
// }
// try
// {
// scanner.DataEventEnabled = true;
// }
// catch (Exception ex)
// {
// devStatus.Scanner.Status = "DATAEVENT ENABLED FAIL";
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.OpenDevice()", devStatus.Scanner.Status + " " + ex.Message);
// return bRet;
// }
// scanner.DecodeData = true;
// devStatus.Scanner.Open = true;
// devStatus.Scanner.Status = "Success";
// bw.DoWork += OlePosHandler;
// bRet = true;
//}
//m_nErrorCount = 0;
}
catch (Exception ex)
{
devStatus.Scanner.Open = false;
devStatus.Scanner.Status = "DEVICE OPEN EXCEPTION";
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
"DeviceScanner.OpenDevice()", devStatus.Scanner.Status + " " + ex.Message);
return bRet;
}
return bRet;
}
/////
/////
/////
/////
/////
//private void Scanner_DataEvent(object sender, DataEventArgs e)
//{
// try
// {
// if(!bw.IsBusy)
// {
// ASCIIEncoding encoder = new ASCIIEncoding();
// m_sScanData = encoder.GetString(scanner.ScanData);
// m_sScanDataLabel = encoder.GetString(scanner.ScanDataLabel);
// m_sScanDataType = scanner.ScanDataType.ToString();
// devStatus.Scanner.Data = m_sScanData;
// devStatus.Scanner.DataLabel = "";
// //for (int i = 0; i < m_sScanDataLabel.Length; i++)
// //{
// // if (CmUtil.IsNumber(m_sScanDataLabel.Substring(i, 1)) == true)
// // devStatus.Scanner.DataLabel += m_sScanDataLabel.Substring(i, 1);
// //}
// string sChgDataLabel = "";
// for (int i = 0; i < scanner.ScanDataLabel.Length; i++)
// {
// if (scanner.ScanDataLabel[i] == (byte)29)
// sChgDataLabel += "|";
// else
// sChgDataLabel += Convert.ToChar(scanner.ScanDataLabel[i]).ToString();
// }
// for (int i = 0; i < sChgDataLabel.Length; i++)
// {
// if (CmUtil.IsNumber(sChgDataLabel.Substring(i, 1)) == true)
// {
// devStatus.Scanner.DataLabel = sChgDataLabel.Substring(i, sChgDataLabel.Length - i);
// break;
// }
// //if (sChgDataLabel.Substring(i, 1) != string.Format("{0}", (char)10) && sChgDataLabel.Substring(i, 1) != string.Format("{0}", (char)13))
// //{
// // devStatus.Scanner.DataLabel = devStatus.Scanner.DataLabel + sChgDataLabel.Substring(i, 1);
// //}
// }
// devStatus.Scanner.DataType = m_sScanDataType;
// UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.Scanner_DataEvent()",
// "Data=" + m_sScanData + ", DataLabel=" + m_sScanDataLabel + "=>" + devStatus.Scanner.DataLabel + ", DataType=" + m_sScanDataType);
// bw.RunWorkerAsync();
// }
// else
// {
// UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.Scanner_DataEvent()", "스캐너 이벤트 처리 전 이벤트 발생 불가");
// //Cosmos.CommonManager.WinManager.ErrorMessage("해당 화면에서 스캐너를 입력 할 수 없습니다.", "스캐너 입력 오류", true);
// //MessageStartTimer(100);
// }
// //if (PosOLEDevice.m_delegateOlePos != null)
// // PosOLEDevice.m_delegateOlePos(PosConst.OPOS_DEVICE.SCANNER, m_sScanData, devStatus.Scanner.DataLabel, m_sScanDataType);
// //else
// //{
// // UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// // "DeviceScanner.Scanner_DataEvent()", "이벤트 전송 대상 없음.");
// // Cosmos.CommonManager.WinManager.ErrorMessage("해당 화면에서 스캐너를 입력 할 수 없습니다.", "스캐너 입력 오류", true);
// //}
// }
// catch (Exception ex)
// {
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.Scanner_DataEvent()", ex.Message);
// devStatus.Scanner.Status = "DATAEVENT ERROR";
// }
// finally
// {
// scanner.ClearInput();
// scanner.DataEventEnabled = true;
// }
//}
///
///
///
///
///
private void OlePosHandler(object sender, DoWorkEventArgs e)
{
try
{
if (PosOLEDevice.m_delegateOlePos != null)
PosOLEDevice.m_delegateOlePos(PosConst.OPOS_DEVICE.SCANNER, string.Empty, devStatus.Scanner.DataLabel, string.Empty);
else
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
"DeviceScanner.OlePosHandler()", "이벤트 전송 대상 없음.");
//Cosmos.CommonManager.WinManager.ErrorMessage("해당 화면에서 스캐너를 입력 할 수 없습니다.", "스캐너 입력 오류", true);
//MessageStartTimer(100);
}
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
"DeviceScanner.OlePosHandler()", ex.Message);
}
}
//private void MessageStartTimer(int dueTime)
//{
// try
// {
// Thread thrBeep = new Thread(new ThreadStart(OnBeepSound));
// thrBeep.Start();
// }
// catch (Exception ex)
// {
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.MessageStartTimer()", ex.Message);
// }
//}
//private void OnBeepSound()
//{
// try
// {
// CmMessage m_PosConfig = CmMessage.MakeMessageFromFile(BaseCom.NxIniPath + "PosConfig.INI");
// string sPosUseType = m_PosConfig.GetMessage("olepos").GetMessageValue("PosUseType");
// string sKeyboard = m_PosConfig.GetMessage("control").GetMessageValue("Keyboard");
// for (int i = 0; i < 5; i++)
// {
// WinManager.BuzzSoundOn(sPosUseType, sKeyboard);
// Thread.Sleep(200);
// }
// //CmMessage m_PosConfig = CmMessage.MakeMessageFromFile(BaseCom.NxIniPath + "PosConfig.INI");
// //string sPosUseType = m_PosConfig.GetMessage("olepos").GetMessageValue("PosUseType");
// //string sKeyboard = m_PosConfig.GetMessage("control").GetMessageValue("Keyboard");
// //for (int i = 0; i < 5; i++)
// //{
// // if (sPosUseType == "2" || sPosUseType == "9" || sPosUseType == "4" || sKeyboard == "2")
// // // POS모델 ==> 2:7K, 9.B20(Toshiba) 4.3000XC(분스)
// // // POS키보드 ==> (0:104, 1:40, 2:32)
// // Console.Beep();
// // else
// // BuzzOn(0, 0);
// // Thread.Sleep(200);
// //}
// }
// catch (Exception ex)
// {
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.OnBeepSound()", ex.Message);
// }
//}
//private void MessageStartTimer(int dueTime)
//{
// if (m_nErrorCount < 2)
// {
// Timer t = new Timer(new TimerCallback(MessageTimerProc));
// t.Change(dueTime, 0);
// }
//}
//private void MessageTimerProc(object state)
//{
// m_nErrorCount++;
// // The state object is the Timer object.
// Timer t = (Timer)state;
// t.Dispose();
// Cosmos.CommonManager.WinManager.ErrorMessage("해당 화면에서 스캐너를 입력 할 수 없습니다.", "스캐너 입력 오류", true);
// m_nErrorCount--;
//}
/////
/////
/////
/////
/////
//private void Scanner_ErrorEvent(object sender, DeviceErrorEventArgs e)
//{
// try
// {
// ASCIIEncoding encoder = new ASCIIEncoding();
// m_sScanData = encoder.GetString(scanner.ScanData);
// m_sScanDataLabel = encoder.GetString(scanner.ScanDataLabel);
// m_sScanDataType = scanner.ScanDataType.ToString();
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.Scanner_ErrorEvent()",
// "ErrorEvent 발생 ScanData=[" + m_sScanData + "] ScanDataLabel=[" + m_sScanDataLabel + "] ScanDataType=[" + m_sScanDataType + "]");
// devStatus.Scanner.Data = string.Empty;
// devStatus.Scanner.DataLabel = string.Empty;
// scanner.ClearInput();
// scanner.DataEventEnabled = true;
// devStatus.Scanner.Status = "ERROR EVENT";
// }
// catch (Exception ex)
// {
// UserLog.WriteLogFile(UserCom.LOG_ERROR, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
// "DeviceScanner.Scanner_ErrorEvent()", ex.Message);
// devStatus.Scanner.Status = "ErrorEvent Error 발생";
// }
//}
///
/// Scanner StateServer 정보 초기화
///
private void DeviceStatusInit()
{
devStatus.Scanner.Data = "";
devStatus.Scanner.DataLabel = "";
devStatus.Scanner.DataType = "";
devStatus.Scanner.DeviceName = "";
devStatus.Scanner.Status = "";
devStatus.Scanner.Open = false;
}
///
/// 디바이스 Close시 처리함수
///
///
public bool CloseDevice()
{
bool bRet = false;
try
{
//if (scanner == null)
// return bRet;
//scanner.DataEventEnabled = false;
//scanner.DeviceEnabled = false;
//scanner.Release();
//scanner.Close();
//scanner = null;
bRet = true;
devStatus.Scanner.Status = "CLOSE";
devStatus.Scanner.Open = false;
bw.DoWork -= OlePosHandler;
}
catch (Exception ex)
{
bw.DoWork -= OlePosHandler;
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
"DeviceScanner.CloseDevice()", ex.Message);
devStatus.Scanner.Status = "CLOSE EXCEPTION";
}
return bRet;
}
///
/// 장비의 Event 발생 Enable 상태 설정
/// True:사용가능, False:사용불가능
///
public bool DeviceEnabled
{
get
{
try
{
//if (scanner.DeviceEnabled && scanner.DataEventEnabled)
// return true;
//else
return false;
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
"DeviceScanner.DeviceEnabled()", ex.Message);
return false;
}
}
set
{
try
{
bool bRet = SetDeviceEnabled(value);
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
"DeviceScanner.DeviceEnabled()", ex.Message);
}
}
}
///
/// 장비의 Event 발생 Enable 상태 설정
/// True:사용가능, False:사용불가능
///
///
///
private bool SetDeviceEnabled(bool bEnable)
{
bool bRet = false;
try
{
//scanner.DataEventEnabled = bEnable;
//scanner.DeviceEnabled = bEnable;
devStatus.Scanner.Status = "DEVICE ENABLED " + bEnable.ToString();
bRet = true;
}
catch (Exception ex)
{
UserLog.WriteLogFile(UserCom.LOG_IOS, System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name, // Project Name (프로젝트명)
"DeviceScanner.SetDeviceEnabled()", ex.Message);
devStatus.Scanner.Status = "DEVICE ENABLED FAIL";
}
return bRet;
}
}
}