//RemoOpenTime:遠端開門攜回延遲時間 DelayTime:刷退進入保全延遲時間 , LoopErrorAlarmTime:刷退回路異常(沒有關門)告警時間, AlarmTime:外力入侵告警時間 private void Server_OnRead(Socket soc) { byte[] SRbuf = ServerScoket.ReceivedBytes; if (SRbuf != null) { if (SRbuf.Length != 25) return; string SRhexstr = BitConverter.ToString(SRbuf); CardReaderEventReport rpt = new CardReaderEventReport(SRbuf); if (!dictIp_CardReader.ContainsKey(rpt.IP)) { Console.WriteLine(rpt.IP + " Not in dictionary!"); return; } ICardReader ireader = dictIp_CardReader[rpt.IP]; Console.WriteLine(rpt); if (rpt.Status == (int)CardReaderStatusEnum.門開啟) ireader.IsDoorOpen = true; if (rpt.Status == (int)CardReaderStatusEnum.門關閉) ireader.IsDoorOpen = false; ireader.InvokeStatusChange(rpt); } }
public void InvokeStatusChange(CardReaderEventReport rpt) { if (this.OnStatusChanged != null) this.OnStatusChanged(this, rpt); }
void cardreader_OnStatusChanged(ICardReader reader, CardReaderEventReport rpt) { try { if (rpt.Status == (int)CardReaderStatusEnum.卡號連續錯誤 && this.EventInvalidCardAlarm || rpt.Status == (int)CardReaderStatusEnum.外力破壞 && this.EventExternalForceAlarm || rpt.Status == (int)CardReaderStatusEnum.異常入侵 && this.EventIntrusionAlarm || rpt.Status == (int)CardReaderStatusEnum.開門超時 && this.EventDoorOpenOverTimeAlarm || rpt.Status == (int)CardReaderStatusEnum.開鎖 && this.EventDoorOpenAlarm || rpt.Status == (int)CardReaderStatusEnum.號碼錯誤 && this.R23InvalidCardAlarm ) { if (this.OnAlarmEvent != null) { ICCTV cctv = (ICCTV)SecureService.cctv_mgr[reader.TriggerCCTVID]; AlarmData data = new AlarmData() { TimeStamp = DateTime.Now, AlarmType = AlarmType.Secure, ColorString = "Red", Description = reader.ControllerID + "," + rpt.StatusString, PlaneID = reader.PlaneID, IsForkCCTVEvent = true, PlaneName = Global.GetPlaneNameByPlaneID(reader.PlaneID), CCTVBindingData = cctv!=null?cctv.ToBindingData():null }; this.OnAlarmEvent(reader, data); } } if (rpt.Status == (int)CardReaderStatusEnum.開鎖 || rpt.Status == (int)CardReaderStatusEnum.按鈕開門 || rpt.Status == (int)CardReaderStatusEnum.密碼開門 || rpt.Status == (int)CardReaderStatusEnum.系統開門 || rpt.Status == (int)CardReaderStatusEnum.異常入侵 || rpt.Status == (int)CardReaderStatusEnum.開門超時) { SecureDBEntities1 db = new SecureDBEntities1(); tblEngineRoomLog log = new tblEngineRoomLog() { ControlID = reader.ControllerID, ABA = rpt.CardNo.ToString(), StartTime = DateTime.Now, TypeID = 8, Memo = rpt.StatusString, TypeCode = (short)rpt.Status, ERNo = reader.PlaneID.ToString() }; db.tblEngineRoomLog.Add( log ); db.SaveChanges(); //開門錄影 if (rpt.Status == (int)CardReaderStatusEnum.開鎖 || rpt.Status == (int)CardReaderStatusEnum.按鈕開門 || rpt.Status == (int)CardReaderStatusEnum.密碼開門 || rpt.Status == (int)CardReaderStatusEnum.系統開門) { if (reader.NVRID == -1) return; #region 擷取錄影 #if R23 #else Task task = Task.Factory.StartNew(() => { DateTime dt = DateTime.Now; System.Threading.Thread.Sleep(1000 * 20); long flowid = log.FlowID; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("nvrid:" + reader.NVRID); try { NVR.INVR nvr = SecureService.nvr_mgr[reader.NVRID]; if (nvr == null) { Console.WriteLine(reader.NVRID + " is null"); return; } bool success = nvr.SaveRecord( // reader.NVRChNo, dt.AddSeconds(-10), dt.AddSeconds(10), @"C:\web\Secure\ClientBin\VideoRecord\" + flowid + ".avi"); reader.NVRChNo, dt.AddSeconds(-10), dt.AddSeconds(10), @"E:\web\Secure\ClientBin\VideoRecord\" + flowid + ".avi"); //bool success = nvr.SaveRecord( //reader.NVRChNo, dt.AddSeconds(-10), dt.AddSeconds(10), @"D:\" + flowid + ".avi"); log.NVRFile = flowid + ".wmv"; db.SaveChanges(); Console.WriteLine(success); } catch (Exception ex) { Console.WriteLine(ex.Message + "," + ex.StackTrace); } finally { Console.ResetColor(); } }); #endif #endregion } if (this.serivce != null && reader.TriggerCCTVID != 0) { if (InOperationCCTV.Where(n => n == reader.TriggerCCTVID).Count() > 0) { Task.Factory.StartNew(() => { try { Console.WriteLine("Trigger " + reader.TriggerCCTVID); SecureService.cctv_mgr[reader.TriggerCCTVID].Preset(2); System.Threading.Thread.Sleep(1000 * 10); SecureService.cctv_mgr[reader.TriggerCCTVID].Preset(1); } catch (Exception ex) { Console.WriteLine("May be trigger cctv not found" + ex.Message + "," + ex.StackTrace); } InOperationCCTV.Remove(reader.TriggerCCTVID); }); } } } if (rpt.Status == (int)CardReaderStatusEnum.號碼錯誤 || rpt.Status == (int)CardReaderStatusEnum.卡號連續錯誤 || rpt.Status == (int)CardReaderStatusEnum.外力破壞 ) { SecureDBEntities1 db = new SecureDBEntities1(); db.tblEngineRoomLog.Add( new tblEngineRoomLog() { ControlID = reader.ControllerID, ABA = rpt.CardNo.ToString(), StartTime = DateTime.Now, TypeID = 8, Memo = rpt.StatusString, TypeCode = (short)rpt.Status, ERNo = reader.PlaneID.ToString() } ); db.SaveChanges(); } } catch (Exception ex) { Console.WriteLine("CardManager OnStatus Change:" + ex.Message + "," + ex.StackTrace); } }
public static CardReaderEventReport MakeReaderEventReport(byte status) { byte[] data = new byte[25]; data[1] = (byte)((DateTime.Now.Year - 2000) / 10 * 16 + (DateTime.Now.Year - 2000) % 10); data[3] = (byte)((DateTime.Now.Month) / 10 * 16 + (DateTime.Now.Month) % 10); data[5] = (byte)((DateTime.Now.Day) / 10 * 16 + (DateTime.Now.Day) % 10); data[9] = (byte)((DateTime.Now.Hour) / 10 * 16 + (DateTime.Now.Hour) % 10); data[11] = (byte)((DateTime.Now.Minute) / 10 * 16 + (DateTime.Now.Minute) % 10); data[13] = (byte)((DateTime.Now.Second) / 10 * 16 + (DateTime.Now.Second) % 10); data[19] = status; CardReaderEventReport rpt = new CardReaderEventReport(data); return rpt; }