Beispiel #1
0
        public static void DHLibriary_EqualsKeys_ReturnTrue()
        {
            DHServer server = new DHServer();
            DHClient client = new DHClient(server.PublicKey, server.Divider, server.Generator);

            server.CalculateKey(client.PublicKey);
            Assert.AreEqual(server.CommonKey, client.CommonKey);
        }
        private static int AnalyzerDataCallBack(IntPtr lAnalyzerHandle, uint dwEventType, IntPtr pEventInfo, IntPtr pBuffer, uint dwBufSize, IntPtr dwUser, int nSequence, IntPtr reserved)
        //, ICapPublisher publisher)
        {
            DHServer dhs = new DHServer();

            dhs.nDVRType      = device.nDVRType;
            dhs.sSerialNumber = device.sSerialNumber;
            switch (dwEventType)
            {
            // 警戒线事件
            case (uint)EM_EVENT_IVS_TYPE.CROSSLINEDETECTION:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.CROSSLINEDETECTION;
                NET_DEV_EVENT_CROSSLINE_INFO info = (NET_DEV_EVENT_CROSSLINE_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_CROSSLINE_INFO));
                dhs.nChannelID   = info.nChannelID;
                dhs.szName       = info.szName;
                dhs.UTC          = info.UTC.ToShortString();
                dhs.nEventID     = info.nEventID;
                dhs.byImageIndex = info.byImageIndex;
                List <string> imgs = new List <string>();
                //保存全景图
                if (info.stuSceneImage.nLength > 0)
                {
                    string pic_name = String.Format("./image/{0}_", info.nEventID);
                    pic_name = pic_name + "全景图.jpg";
                    byte[] bytes = new byte[info.stuSceneImage.nLength];
                    Marshal.Copy(new IntPtr(pBuffer.ToInt32() + info.stuSceneImage.nOffSet), bytes, 0, (int)info.stuSceneImage.nLength);
                    WriteFile(bytes, pic_name, (int)info.stuSceneImage.nLength);
                    imgs.Add(pic_name);
                }
                dhs.szFilePath = imgs;
            }
            break;

            // 警戒区事件
            case (uint)EM_EVENT_IVS_TYPE.CROSSREGIONDETECTION:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.CROSSREGIONDETECTION;
                NET_DEV_EVENT_CROSSREGION_INFO info = (NET_DEV_EVENT_CROSSREGION_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_CROSSREGION_INFO));
                dhs.nChannelID   = info.nChannelID;
                dhs.szName       = info.szName;
                dhs.UTC          = info.UTC.ToShortString();
                dhs.nEventID     = info.nEventID;
                dhs.byImageIndex = info.byImageIndex;
                List <string> imgs = new List <string>();
                //保存全景图
                if (info.stuSceneImage.nLength > 0)
                {
                    string pic_name = String.Format("./image/{0}_", info.nEventID);
                    pic_name = pic_name + "全景图.jpg";
                    byte[] bytes = new byte[info.stuSceneImage.nLength];
                    Marshal.Copy(new IntPtr(pBuffer.ToInt32() + info.stuSceneImage.nOffSet), bytes, 0, (int)info.stuSceneImage.nLength);
                    WriteFile(bytes, pic_name, (int)info.stuSceneImage.nLength);
                    imgs.Add(pic_name);
                }
                dhs.szFilePath = imgs;
            }
            break;

            // 物品遗留事件
            case (uint)EM_EVENT_IVS_TYPE.LEFTDETECTION:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.LEFTDETECTION;
                NET_DEV_EVENT_LEFT_INFO info = (NET_DEV_EVENT_LEFT_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_LEFT_INFO));
                dhs.nChannelID   = info.nChannelID;
                dhs.szName       = info.szName;
                dhs.UTC          = info.UTC.ToShortString();
                dhs.nEventID     = info.nEventID;
                dhs.byImageIndex = info.byImageIndex;
            }
            break;

            //物品搬移事件
            case (uint)EM_EVENT_IVS_TYPE.TAKENAWAYDETECTION:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.TAKENAWAYDETECTION;
                NET_DEV_EVENT_TAKENAWAYDETECTION_INFO info = (NET_DEV_EVENT_TAKENAWAYDETECTION_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_TAKENAWAYDETECTION_INFO));
                dhs.nChannelID   = info.nChannelID;
                dhs.szName       = info.szName;
                dhs.UTC          = info.UTC.ToShortString();
                dhs.nEventID     = info.nEventID;
                dhs.byImageIndex = info.byImageIndex;
            }
            break;

            // 徘徊事件
            case (uint)EM_EVENT_IVS_TYPE.WANDERDETECTION:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.WANDERDETECTION;
                NET_DEV_EVENT_WANDER_INFO info = (NET_DEV_EVENT_WANDER_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_WANDER_INFO));
                dhs.nChannelID   = info.nChannelID;
                dhs.szName       = info.szName;
                dhs.UTC          = info.UTC.ToShortString();
                dhs.nEventID     = info.nEventID;
                dhs.byImageIndex = info.byImageIndex;
            }
            break;

            // 翻越围栏事件
            case (uint)EM_EVENT_IVS_TYPE.CROSSFENCEDETECTION:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.CROSSFENCEDETECTION;
                NET_DEV_EVENT_CROSSFENCEDETECTION_INFO info = (NET_DEV_EVENT_CROSSFENCEDETECTION_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_CROSSFENCEDETECTION_INFO));
                dhs.nChannelID   = info.nChannelID;
                dhs.szName       = info.szName;
                dhs.UTC          = info.UTC.ToShortString();
                dhs.nEventID     = info.nEventID;
                dhs.byImageIndex = info.byImageIndex;
            }
            break;

            // 攀高检测事件
            case (uint)EM_EVENT_IVS_TYPE.TRAFFIC_RUNYELLOWLIGHT:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.TRAFFIC_RUNYELLOWLIGHT;
                NET_DEV_EVENT_IVS_CLIMB_INFO info = (NET_DEV_EVENT_IVS_CLIMB_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_IVS_CLIMB_INFO));
                dhs.nChannelID   = info.nChannelID;
                dhs.szName       = info.szName;
                dhs.UTC          = info.UTC.ToShortString();
                dhs.nEventID     = info.nEventID;
                dhs.byImageIndex = info.byImageIndex;
            }
            break;

            //人体特征事件
            case (uint)EM_EVENT_IVS_TYPE.HUMANTRAIT:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.HUMANTRAIT;
                NET_DEV_EVENT_HUMANTRAIT_INFO info = (NET_DEV_EVENT_HUMANTRAIT_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_HUMANTRAIT_INFO));
                dhs.nChannelID = info.nChannelID;
                dhs.szName     = info.szName;
                dhs.UTC        = info.UTC.ToShortString();
                dhs.nEventID   = info.nEventID;
                List <string> imgs     = new List <string>();
                string        pic_name = String.Format("./image/{0}_", info.nGroupID);
                // 保存全景图片
                if (info.stuSceneImage.nLength > 0)
                {
                    byte[] bytes = new byte[info.stuSceneImage.nLength];
                    Marshal.Copy(new IntPtr(pBuffer.ToInt32() + info.stuSceneImage.nOffSet), bytes, 0, (int)info.stuSceneImage.nLength);
                    pic_name = pic_name + "全景图.jpg";
                    WriteFile(bytes, pic_name, (int)info.stuSceneImage.nLength);
                    imgs.Add(pic_name);
                }
                // 保存人脸图
                if (info.stuFaceImage.nLength > 0)
                {
                    pic_name = pic_name + "人脸图.jpg";
                    byte[] bytes = new byte[info.stuHumanImage.nLength];
                    Marshal.Copy(new IntPtr(pBuffer.ToInt32() + info.stuHumanImage.nOffSet), bytes, 0, (int)info.stuHumanImage.nLength);
                    WriteFile(bytes, pic_name, (int)info.stuHumanImage.nLength);
                    imgs.Add(pic_name);
                }
                // 保存人脸全景图
                if (info.stuFaceSceneImage.nLength > 0)
                {
                    pic_name = pic_name + "人脸全景图.jpg";
                    byte[] bytes = new byte[info.stuFaceSceneImage.nLength];
                    Marshal.Copy(new IntPtr(pBuffer.ToInt32() + info.stuFaceSceneImage.nOffSet), bytes, 0, (int)info.stuFaceSceneImage.nLength);
                    WriteFile(bytes, pic_name, (int)info.stuFaceSceneImage.nLength);
                    imgs.Add(pic_name);
                }
                //保存人体图
                if (info.stuHumanImage.nLength > 0)
                {
                    pic_name = pic_name + "人体图.jpg";
                    byte[] bytes = new byte[info.stuHumanImage.nLength];
                    Marshal.Copy(new IntPtr(pBuffer.ToInt32() + info.stuHumanImage.nOffSet), bytes, 0, (int)info.stuHumanImage.nLength);
                    WriteFile(bytes, pic_name, (int)info.stuHumanImage.nLength);
                    imgs.Add(pic_name);
                }
                dhs.szFilePath = imgs;
            }
            break;

            //交通路口事件
            case (uint)EM_EVENT_IVS_TYPE.TRAFFICJUNCTION:
            {
                dhs.dwEventType = EM_EVENT_IVS_TYPE.TRAFFICJUNCTION;
                NET_DEV_EVENT_TRAFFICJUNCTION_INFO info = (NET_DEV_EVENT_TRAFFICJUNCTION_INFO)Marshal.PtrToStructure(pEventInfo, typeof(NET_DEV_EVENT_TRAFFICJUNCTION_INFO));
                dhs.nChannelID   = info.nChannelID;
                dhs.szName       = info.szName.ToString();
                dhs.UTC          = info.UTC.ToShortString();
                dhs.nEventID     = info.nEventID;
                dhs.byImageIndex = info.byImageIndex;
                List <string> imgs = new List <string>();
                //车牌号、车牌颜色、车牌类型
                string pic_name;
                //车辆图
                if (info.stuVehicle.bPicEnble != 0)
                {
                    byte[] bytes = new byte[info.stuVehicle.stPicInfo.dwFileLenth];
                    Marshal.Copy(new IntPtr(pBuffer.ToInt32() + info.stuVehicle.stPicInfo.dwOffSet), bytes, 0, (int)info.stuVehicle.stPicInfo.dwFileLenth);
                    pic_name = String.Format("./image/{0}车辆图.jpg", info.stuFileInfo.nGroupId);
                    WriteFile(bytes, pic_name, (int)info.stuVehicle.stPicInfo.dwFileLenth);
                    imgs.Add(pic_name);
                }
                //车牌图
                if (info.stuObject.bPicEnble != 0 && info.stuObject.stPicInfo.dwFileLenth != 0)
                {
                    byte[] bytes = new byte[info.stuObject.stPicInfo.dwFileLenth];
                    Marshal.Copy(new IntPtr(pBuffer.ToInt32() + info.stuObject.stPicInfo.dwOffSet), bytes, 0, (int)info.stuObject.stPicInfo.dwFileLenth);
                    pic_name = String.Format("./image/{0}_{1}车牌图.jpg", info.stuFileInfo.nGroupId, info.stuFileInfo.bIndex);
                    WriteFile(bytes, pic_name, (int)info.stuObject.stPicInfo.dwFileLenth);
                    imgs.Add(pic_name);
                }
                //保存驾驶室人脸图,副驾驶室有人的话,有图片。
                int i = 0;
                for (; i < info.stCommInfo.nDriversNum; i++)
                {
                    if (i == 0)
                    {
                        pic_name = String.Format("./image/{0}_{1}主驾驶室.jpg", info.stuFileInfo.nGroupId, i);
                    }
                    else
                    {
                        pic_name = String.Format("./image/{0}_{1}副驾驶室.jpg", info.stuFileInfo.nGroupId, i);
                    }
                    NET_MSG_OBJECT_EX[] obj = new NET_MSG_OBJECT_EX[info.stCommInfo.nDriversNum];
                    for (i = 0; i < info.stCommInfo.nDriversNum; ++i)
                    {
                        obj[i] = (NET_MSG_OBJECT_EX)Marshal.PtrToStructure(IntPtr.Add(info.stCommInfo.pstDriversInfo, i * Marshal.SizeOf(typeof(NET_MSG_OBJECT_EX))), typeof(NET_MSG_OBJECT_EX));
                        if (obj[i].bPicEnble != 0)
                        {
                            byte[] bytes = new byte[obj[i].stPicInfo.dwFileLenth];
                            Marshal.Copy(new IntPtr(pBuffer.ToInt32() + obj[i].stPicInfo.dwOffSet), bytes, 0, (int)obj[i].stPicInfo.dwFileLenth);
                            WriteFile(bytes, pic_name, (int)obj[i].stPicInfo.dwFileLenth);
                            imgs.Add(pic_name);
                        }
                    }
                }
                dhs.szFilePath = imgs;
            }
            break;

            default:
                break;
            }
            // publisher.PublishAsync("DHServer", dhs);
            return(1);
        }