private void UpdateViewControls(ref CSearchTaskResponse cSearchTaskResponse)
        {
            ListViewItem listItem = new ListViewItem();

            listViewDataDisplay.BeginUpdate();
            int iItemCount = listViewDataDisplay.Items.Count;

            listItem.Text = (iItemCount + 1).ToString();

            listItem.SubItems.Add(cSearchTaskResponse.SearchTaskResponse.DataCollections[0].captureNo.ToString());
            listItem.SubItems.Add(cSearchTaskResponse.SearchTaskResponse.DataCollections[0].lastCaptureNo.ToString());
            listItem.SubItems.Add(cSearchTaskResponse.SearchTaskResponse.DataCollections[0].name);
            listItem.SubItems.Add(cSearchTaskResponse.SearchTaskResponse.DataCollections[0].employeeNo);
            listItem.SubItems.Add(cSearchTaskResponse.SearchTaskResponse.DataCollections[0].IDCardNo);

            string CardNos = null;
            string FpIDs   = null;

            if (cSearchTaskResponse.SearchTaskResponse.DataCollections[0].CardNoList != null)
            {
                foreach (string cardNo in cSearchTaskResponse.SearchTaskResponse.DataCollections[0].CardNoList)
                {
                    string tmp = string.Format("{0};", cardNo);
                    CardNos += tmp;
                }
                listItem.SubItems.Add(CardNos);
            }
            else
            {
                listItem.SubItems.Add(CardNos);
            }

            if (cSearchTaskResponse.SearchTaskResponse.DataCollections[0].FingerprintList != null)
            {
                foreach (CFingerprintList fp in cSearchTaskResponse.SearchTaskResponse.DataCollections[0].FingerprintList)
                {
                    string tmp = string.Format("{0};", fp.fingerprintID);
                    FpIDs += tmp;
                }
                listItem.SubItems.Add(FpIDs);
            }
            else
            {
                listItem.SubItems.Add(FpIDs);
            }

            listItem.SubItems.Add(cSearchTaskResponse.SearchTaskResponse.DataCollections[0].dataType);
            listItem.SubItems.Add(cSearchTaskResponse.SearchTaskResponse.DataCollections[0].riskDataMark.ToString());

            this.listViewDataDisplay.Items.Add(listItem);
            listViewDataDisplay.EndUpdate();
        }
        private void SavePcituresAndFP(ref CSearchTaskResponse cSearchTaskResponse, ref MessageData m)
        {
            foreach (CDataCollections data in cSearchTaskResponse.SearchTaskResponse.DataCollections)
            {
                if (data.FingerprintList != null)
                {
                    foreach (CFingerprintList fp in data.FingerprintList)
                    {
                        byte[] bytes   = Convert.FromBase64String(fp.fingerprint);
                        string strPath = string.Format("{0}\\{1}_{2}_{3} fingerprint{4}.dat", Environment.CurrentDirectory, data.captureNo, data.name, data.employeeNo, fp.fingerprintID);
                        AcsDemoPublic.WriteBytesToFile(bytes, bytes.Length, strPath);
                    }
                }

                if (m.pictureLen > 0)
                {
                    string strPicPath = string.Format("{0}\\{1}_{2}_{3} facePicture.jpg", Environment.CurrentDirectory, data.captureNo, data.name, data.employeeNo);
                    AcsDemoPublic.WriteBytesToFile(m.picture, m.pictureLen, strPicPath);
                    if (!picDic.ContainsKey(data.captureNo))
                    {
                        picDic.Add(data.captureNo, strPicPath);
                    }
                }

                if (m.infraredPicLen > 0)
                {
                    string strInfraedPicPath = string.Format("{0}\\{1}_{2}_{3} infraredFacePicture.jpg", Environment.CurrentDirectory, data.captureNo, data.name, data.employeeNo);
                    AcsDemoPublic.WriteBytesToFile(m.infraredPic, m.infraredPicLen, strInfraedPicPath);
                    if (!infraredPicDic.ContainsKey(data.captureNo))
                    {
                        infraredPicDic.Add(data.captureNo, strInfraedPicPath);
                    }
                }

                if (data.FaceFeature != null)
                {
                    CFaceFeatureSingle cSingle = new CFaceFeatureSingle();
                    cSingle.FaceFeature = data.FaceFeature;
                    string strSigle = JsonConvert.SerializeObject(cSingle);
                    if (!featureDic.ContainsKey(data.captureNo))
                    {
                        featureDic.Add(data.captureNo, strSigle);
                    }
                }
            }
        }
        public void ProcessResult(MessageData m)
        {
            if (m.searchMsg == SearchMsgType.RECV_DATA)
            {
                Debug.Assert(m.data != null);

                // 包含节点\"errorCode\",则按照responsestatus状态解析
                if (m.data.Contains("\"errorCode\""))
                {
                    CResponseStatus status  = JsonConvert.DeserializeObject <CResponseStatus>(m.data);
                    string          strTemp = string.Format("Search data device return failure status.errorcode[{0}] errormsg[{1}]", status.errorCode, status.errorMsg);
                    addLog(false, strTemp);
                    rConfig.stop();
                    return;
                }

                // 按照查询结果解析
                CSearchTaskResponse cSearchTaskResponse = null;
                try
                {
                    cSearchTaskResponse = JsonConvert.DeserializeObject <CSearchTaskResponse>(m.data);
                }
                catch (Exception e)
                {
                    addLog(false, "Data DeserializeObject failed " + e.Message);
                }

                if (cSearchTaskResponse == null)
                {
                    addLog(false, "Data return invalid");
                    // 查询下一条数据
                    SearchNextData();
                    return;
                }

                if (cSearchTaskResponse.SearchTaskResponse.responseStatusStrg.Equals("NO MATCH"))
                {
                    addLog(true, "Response NO MATCH data, search over");
                    rConfig.stop();
                    return;
                }

                if (cSearchTaskResponse.SearchTaskResponse.numOfMatches != 1)
                {
                    addLog(true, "Warning: numOfMatches!=1!!! carptureNo: " + cSearchTaskResponse.SearchTaskResponse.DataCollections[0].captureNo);
                }

                if (bFirst)
                {
                    totalMaches = cSearchTaskResponse.SearchTaskResponse.totalMatches;
                    bFirst      = false;
                }

                // 保存数据并且在UI上展现
                UpdateViewControls(ref cSearchTaskResponse);
                SavePcituresAndFP(ref cSearchTaskResponse, ref m);

                if (cSearchTaskResponse.SearchTaskResponse.responseStatusStrg.Equals("OK"))
                {
                    addLog(true, "Response OK data, search over");
                    rConfig.stop();
                    return;
                }

                if (iSearchPos >= totalMaches - 1)
                {
                    addLog(true, "search over");
                    rConfig.stop();
                    return;
                }

                // 查询下一条数据
                SearchNextData();
            }
            else if (m.searchMsg == SearchMsgType.RECV_FAILIURE)
            {
                addLog(false, "Receive failed status runtime error: " + m.errorcode);
                // 查询下一条数据
                SearchNextData();
            }
            else if (m.searchMsg == SearchMsgType.RECV_FINISH)
            {
                addLog(true, "Receive with long config status: " + m.status + " " + m.searchMsg);
                rConfig.stop();
            }

            return;
        }