private void ProcessFaceDataSearchCallback(uint dwType, IntPtr lpBuffer, uint dwBufLen, IntPtr pUserData) { if (pUserData == null) { return; } if (dwType == (uint)CHCNetSDK.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_STATUS) { uint dwStatus = (uint)Marshal.ReadInt32(lpBuffer); if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_FAILED) { CHCNetSDK.PostMessage(pUserData, 1007, 1, 0); //可以结束了,异常结束 } else if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_EXCEPTION) { CHCNetSDK.PostMessage(pUserData, 1007, 2, 0); //可以结束了,异常结束 } else if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_PROCESSING) { ; } else { CHCNetSDK.PostMessage(pUserData, 1007, 3, 0); //可以结束了,异常结束 } } else if (dwType == (uint)CHCNetSDK.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_DATA) { //输出上一包解析信息, 1009 m_struJsonDataCfg = (CHCNetSDK.NET_DVR_JSON_DATA_CFG)Marshal.PtrToStructure(lpBuffer, typeof(CHCNetSDK.NET_DVR_JSON_DATA_CFG)); string strFaceDataSearchReturn = Marshal.PtrToStringAnsi((IntPtr)m_struJsonDataCfg.lpJsonData, (int)m_struJsonDataCfg.dwJsonDataSize); m_JsonFaceDataSearchReturn = JsonConvert.DeserializeObject <CFaceDataSearchReturn>(strFaceDataSearchReturn); if ((m_JsonFaceDataSearchReturn.responseStatusStrg != "NO MATCH") && (m_JsonFaceDataSearchReturn.statusCode == 1)) { CHCNetSDK.PostMessage(pUserData, 1009, 0, 0); } if (m_iFaceDataRecordIndex >= m_iFaceDataRecordCount) { CHCNetSDK.PostMessage(pUserData, 1007, 4, 0); //可以结束了,正常(异常)结束 return; } CHCNetSDK.PostMessage(pUserData, 1008, 0, 0); //在主线程中发送下一个用户 } return; }
private void ProcessDataSearchCallback(uint dwType, IntPtr lpBuffer, uint dwBufLen, IntPtr pUserData) { try { if (dwType == (uint)CHCNetSDK.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_STATUS) { MessageData msg = new MessageData(); msg.errorcode = 0; uint dwStatus = (uint)Marshal.ReadInt32(lpBuffer); if (dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_FAILED || dwStatus == (uint)CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL.NET_SDK_CALLBACK_STATUS_EXCEPTION) { msg.searchMsg = SearchMsgType.RECV_FAILIURE; msg.errorcode = (int)CHCNetSDK.NET_DVR_GetLastError(); msg.status = (CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL)dwStatus; this.ProcessData(msg); } else { msg.searchMsg = SearchMsgType.RECV_FINISH; msg.status = (CHCNetSDK.NET_SDK_CALLBACK_STATUS_NORMAL)dwStatus; this.ProcessData(msg); } } else if (dwType == (uint)CHCNetSDK.NET_SDK_CALLBACK_TYPE.NET_SDK_CALLBACK_TYPE_DATA) { MessageData msg = new MessageData(); msg.errorcode = 0; msg.searchMsg = SearchMsgType.RECV_DATA; m_struJsonDataCfg = (CHCNetSDK.NET_DVR_JSON_DATA_CFG)Marshal.PtrToStructure(lpBuffer, typeof(CHCNetSDK.NET_DVR_JSON_DATA_CFG)); if (m_struJsonDataCfg.dwJsonDataSize > 3 * 1024 * 1024) { addLog(false, "ProcessData exception json data too long!"); MessageData msgFin = new MessageData(); msgFin.errorcode = 0; msgFin.searchMsg = SearchMsgType.RECV_FINISH; this.ProcessData(msgFin); return; } byte[] byData = new byte[m_struJsonDataCfg.dwJsonDataSize + 1]; Marshal.Copy((IntPtr)m_struJsonDataCfg.lpJsonData, byData, 0, (int)m_struJsonDataCfg.dwJsonDataSize); msg.data = System.Text.Encoding.UTF8.GetString(byData); msg.dataLen = (int)m_struJsonDataCfg.dwJsonDataSize; msg.pictureLen = (int)m_struJsonDataCfg.dwPicDataSize; msg.infraredPicLen = (int)m_struJsonDataCfg.dwInfraredFacePicSize; if (msg.pictureLen != 0 && m_struJsonDataCfg.lpPicData != IntPtr.Zero) { Marshal.Copy((IntPtr)m_struJsonDataCfg.lpPicData, msg.picture, 0, msg.pictureLen); } if (msg.infraredPicLen != 0 && m_struJsonDataCfg.lpInfraredFacePicBuffer != IntPtr.Zero) { Marshal.Copy((IntPtr)m_struJsonDataCfg.lpInfraredFacePicBuffer, msg.infraredPic, 0, msg.infraredPicLen); } // 处理数据并查询下一条数据 this.ProcessData(msg); } } catch // System.InvalidOperationException System.ArgumentException { addLog(false, "ProcessData exception"); return; } return; }
private bool SendFaceModify() { if (-1 == m_lFaceDataRecordHandle) { return(false); } if (m_iFaceDataRecordIndex >= m_iFaceDataRecordCount) { return(false); } CFaceRecordModify JsonFaceRecordModify = new CFaceRecordModify(); JsonFaceRecordModify.faceLibType = listViewFaceRecordManage.Items[m_iFaceDataRecordIndex].SubItems[1].Text; JsonFaceRecordModify.FDID = listViewFaceRecordManage.Items[m_iFaceDataRecordIndex].SubItems[2].Text; JsonFaceRecordModify.FPID = listViewFaceRecordManage.Items[m_iFaceDataRecordIndex].SubItems[3].Text; string strFaceRecordModify = JsonConvert.SerializeObject(JsonFaceRecordModify); IntPtr ptrFaceRecordModify = Marshal.StringToHGlobalAnsi(strFaceRecordModify); CHCNetSDK.NET_DVR_JSON_DATA_CFG struJsonDataCfg = new CHCNetSDK.NET_DVR_JSON_DATA_CFG(); struJsonDataCfg.dwSize = (uint)Marshal.SizeOf(struJsonDataCfg); struJsonDataCfg.lpJsonData = ptrFaceRecordModify; struJsonDataCfg.dwJsonDataSize = (uint)strFaceRecordModify.Length; if (!File.Exists(listViewFaceRecordManage.Items[m_iFaceDataRecordIndex].SubItems[4].Text)) { MessageBox.Show("The picture does not exist!"); Marshal.FreeHGlobal(ptrFaceRecordModify); return(false); } FileStream fs = new FileStream(listViewFaceRecordManage.Items[m_iFaceDataRecordIndex].SubItems[4].Text, FileMode.OpenOrCreate); if (0 == fs.Length) { MessageBox.Show("The picture is 0k,please input another picture!"); Marshal.FreeHGlobal(ptrFaceRecordModify); fs.Close(); return(false); } if (200 * 1024 < fs.Length) { MessageBox.Show("The picture is larger than 200k,please input another picture!"); Marshal.FreeHGlobal(ptrFaceRecordModify); fs.Close(); return(false); } struJsonDataCfg.dwPicDataSize = (uint)fs.Length; int iLen = (int)struJsonDataCfg.dwPicDataSize; byte[] by = new byte[iLen]; struJsonDataCfg.lpPicData = Marshal.AllocHGlobal(iLen); fs.Read(by, 0, iLen); Marshal.Copy(by, 0, struJsonDataCfg.lpPicData, iLen); fs.Close(); IntPtr ptrJsonDataCfg = Marshal.AllocHGlobal(Marshal.SizeOf(struJsonDataCfg)); Marshal.StructureToPtr(struJsonDataCfg, ptrJsonDataCfg, false); if (!CHCNetSDK.NET_DVR_SendRemoteConfig(m_lFaceDataRecordHandle, (int)CHCNetSDK.LONG_CFG_SEND_DATA_TYPE_ENUM.ENUM_SEND_JSON_DATA, ptrJsonDataCfg, (uint)Marshal.SizeOf(struJsonDataCfg))) { ListViewItem listItem = new ListViewItem(); listItem.Text = "Fail"; string strTemp = null; strTemp = string.Format("Send Fail,FPID:{0}", listViewFaceRecordManage.Items[m_iFaceDataRecordIndex].SubItems[3].Text); listItem.SubItems.Add(strTemp); this.AddList(listViewMessage, listItem); Marshal.FreeHGlobal(ptrFaceRecordModify); Marshal.FreeHGlobal(struJsonDataCfg.lpPicData); Marshal.FreeHGlobal(ptrJsonDataCfg); return(false); } ListViewItem listItemSucc = new ListViewItem(); listItemSucc.Text = "Succ"; string strTempSucc = null; strTempSucc = string.Format("Send Processing,FPID:{0}", listViewFaceRecordManage.Items[m_iFaceDataRecordIndex].SubItems[3].Text); listItemSucc.SubItems.Add(strTempSucc); this.AddList(listViewMessage, listItemSucc); Marshal.FreeHGlobal(ptrFaceRecordModify); Marshal.FreeHGlobal(struJsonDataCfg.lpPicData); Marshal.FreeHGlobal(ptrJsonDataCfg); m_iFaceDataRecordIndex++; return(true); }