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); }