using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace AwInitilizer.DLL { public class SajetConnect { public enum CMD { Signin = 1, SnCheck = 15, WoCheck = 14, Report = 16, Log = 4, HeaderRegister = 8, ValueReport = 5 } [DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern bool SajetTransStart(); [DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern bool SajetTransClose(); //[DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] //public static extern bool SajetTransData(int command, IntPtr data, IntPtr length); [DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern bool SajetTransData(int command, IntPtr data, IntPtr length); [DllImport("SajetConnect.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)] public static extern bool SajetTransData_C(int command, out string data); private static string userId = ""; public static bool SajetTransSignIn(ref string data) { var attemptId = data; if(SajetTransData(CMD.Signin, ref data)) { if(string.IsNullOrEmpty(data) || data.StartsWith("NG")) { userId = ""; return false; } else { userId = attemptId; return true; } } userId = ""; return false; } private static string WorkOrder = ""; public static bool SajetTransWoCheck(ref string workOrder) { if (string.IsNullOrEmpty(userId)) return false; if (workOrder == null) workOrder = ""; var msg = userId + "," + workOrder + ","; if (SajetTransData(CMD.WoCheck, ref msg)) { if (string.IsNullOrEmpty(msg) || msg.StartsWith("NG")) { WorkOrder = ""; return false; } else { WorkOrder = workOrder; return true; } } WorkOrder = ""; return false; } private static string SN; public static bool SajetTransSnCheck(ref string serialNumber) { var attemptSN = serialNumber; if (string.IsNullOrEmpty(userId)) return false; if (WorkOrder == null) WorkOrder = ""; var msg = userId + "," + WorkOrder + "," + serialNumber + ","; if (SajetTransData(CMD.SnCheck, ref msg)) { if (string.IsNullOrEmpty(msg) || msg.StartsWith("NG")) { SN = ""; return false; } else { SN = attemptSN; return true; } } SN = ""; return false; } public static bool SajetTranFinish(bool Result) { if (string.IsNullOrEmpty(userId)) return false; if (string.IsNullOrEmpty(WorkOrder)) return false; if (string.IsNullOrEmpty(SN)) return false; string msg = userId +"," + WorkOrder + "," + SN + ","; if (string.IsNullOrEmpty(msg)) return false; Result = false; if (!Result) return true; if (Result) { msg += "OK,"; } else { msg += "NG,"; } return SajetTransData(CMD.Report, ref msg); } public static string SajetTransRegisterHeader(string model, string header) { if (string.IsNullOrEmpty(userId)) return ""; var msg = userId + ","; msg += model + "," + header; if (SajetTransData(CMD.HeaderRegister,ref msg)) { if(msg.StartsWith("OK")) { //get codename msg = msg.Substring(3); var spaceIndex = msg.IndexOf(","); if (spaceIndex > 0) { msg = msg.Substring(0, spaceIndex); } return msg; } return null; } return null; } public static bool SajetTransReport(Dictionary resultPair,Dictionary codePair) { if (string.IsNullOrEmpty(userId)) return false; if (string.IsNullOrEmpty(SN)) return false; string msg = userId + "," + SN + ","; foreach(var result in resultPair) { if(codePair.Keys.Contains(result.Key)) { msg += string.Format("{0}:{1},", codePair[result.Key],string.Format("{0}.00", result.Value) ); } } return SajetTransData(CMD.ValueReport,ref msg); } public static bool SajetTransLog (string data,bool isError) { if (string.IsNullOrEmpty(userId)) return false; if (string.IsNullOrEmpty(SN)) return false; string prefix = userId + "," + SN + ","; while (data.Length > 0) { var msg = prefix; int sendLength = Math.Min(250 - msg.Length, data.Length); var sendString = data.Substring(0, sendLength); msg += sendString; if (!SajetTransData(CMD.Log, ref msg)) { break; } data = data.Substring(sendLength); } return data.Length == 0; } private static bool SajetTransData(CMD command, ref string data) { return SajetTransData((int)command,ref data); } private static string GetSendPrefix() { string msg = ""; if (string.IsNullOrEmpty(userId)) { return null; } msg = userId + ","; if (string.IsNullOrEmpty(WorkOrder)) { return null; } msg += WorkOrder + ","; return msg; } private static bool SajetTransData(int command,ref string data) { //return true; if(!data.EndsWith(",")) { data = data + ","; } var idByte = Encoding.ASCII.GetBytes(data); var length = idByte.Length; var dataArrayLength = Math.Max(length, 100); var dataArray = new byte[dataArrayLength]; Array.Copy(idByte, 0, dataArray, 0, length); IntPtr dataIntPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(dataArrayLength); System.Runtime.InteropServices.Marshal.Copy(dataArray, 0, dataIntPtr, dataArray.Length); IntPtr lengthIntPtr = System.Runtime.InteropServices.Marshal.AllocCoTaskMem(10); System.Runtime.InteropServices.Marshal.WriteInt32(lengthIntPtr, length); var sendResult = SajetConnect.SajetTransData(command, dataIntPtr, lengthIntPtr); var resultString1 = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(dataIntPtr); System.Runtime.InteropServices.Marshal.Copy(dataIntPtr, dataArray, 0, dataArrayLength); System.Runtime.InteropServices.Marshal.Release(dataIntPtr); var readLength = System.Runtime.InteropServices.Marshal.ReadInt32(lengthIntPtr); System.Runtime.InteropServices.Marshal.Release(lengthIntPtr); var resultString = Encoding.ASCII.GetString(dataArray); data = resultString1.Substring(0, Math.Min(readLength, resultString1.Length)); return sendResult; } } }