private byte[] TakePicture_bak(int eventIndex) { TakePictureControl takePicture = new TakePictureControl(); takePicture.Data.CameraId = 1; takePicture.Data.GpsType = GPSType.YouWei; takePicture.Data.PictureCount = 1; takePicture.SerialNumber = Guid.NewGuid().ToString(); takePicture.Data.SerialNumberLen = (byte)Encoding.Default.GetBytes(takePicture.SerialNumber).Length; takePicture.GPSCode = txtGpsCode.Text.Trim(); takePicture.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(takePicture.GPSCode).Length; switch (eventIndex) { //实时抓拍 case 5: takePicture.Data.ShootType = SimpleCmdType.RealTimeShoot; takePicture.Data.PictureCount = 1; takePicture.Data.PictureType = TakePictureType.TakePictureForRealTime; break; //正常连拍 case 15: takePicture.Data.ShootType = SimpleCmdType.NormalSeriateShoot; takePicture.Data.PictureCount = 3; takePicture.Data.TimeSpanValue = 60; break; } byte[] dataBuffer = new byte[takePicture.GetLength()]; takePicture.WriteBuffer(0, dataBuffer); CmdData cmdData = new CmdData(); cmdData.Data.Cmd = ControlCmdType.SendTakePicture; cmdData.DataBuffer = dataBuffer; cmdData.Data.DataLen = (ushort)dataBuffer.Length; byte[] destBuffer = new byte[cmdData.GetLenth()]; cmdData.WriteBuffer(0, destBuffer); return destBuffer; }
/// <summary> /// 拍照任务处理 /// </summary> /// <param name="takePicture">拍照参数</param> public void HandleShootInstructionControl(TakePictureControl takePicture) { byte[] sendBuffer; string remortpoint=null; Socket socket=null; try { //取得已建立的套接字 if (GpsDataParser.TransfersType == TransfersType.IsTcp) { socket = TCPConnList.Instance().GetTCPConnection(takePicture.GPSCode); if (socket == null) { Logger.Trace("[拍照]下发指令失败(socket == null) ;GPSCode:" + takePicture.GPSCode); return; } if (socket.Connected == false) { //从集合移除 //TCPConnList.Instance().RemoveTCPConnection(takePicture.GPSCode); Logger.Trace("[拍照]下发指令失败(Connected == false) ;GPSCode:" + takePicture.GPSCode); return; } } else { remortpoint = UDPConnList.Instance().GetUDPConnection(takePicture.GPSCode); if (string.IsNullOrEmpty(remortpoint)) { Logger.Trace("[拍照]下发指令失败(remortpoint == null) ;GPSCode:" + takePicture.GPSCode); return; } } //解析页面下发数据 sendBuffer = GpsDataParser.ParseShootInstructionControl(takePicture); if (sendBuffer == null || sendBuffer.Length <= 0) return; try { if (GpsDataParser.TransfersType == TransfersType.IsTcp) { int send = socket.Send(sendBuffer); if (send > 0) { //发送回复表示执行成功 //SendAnswerToWeb(takePicture.SerialNumber, false, takePicture.GPSCode, ControlCmdType.SimpleInstruction, true, new SimpleCmdType[] { takePicture.Data.ShootType }); OnSendAnswerToWebEvent(takePicture.SerialNumber, false, takePicture.GPSCode, ControlCmdType.SimpleInstruction, true, new SimpleCmdType[] { takePicture.Data.ShootType }); switch (takePicture.Data.ShootType) { //实时拍照 case SimpleCmdType.RealTimeShoot: Logger.Info("[拍照]发送拍照指令(成功):" + takePicture.GPSCode, null); break; } } else { //发送回复表示执行失败 //SendAnswerToWeb(takePicture.SerialNumber, false, takePicture.GPSCode, ControlCmdType.SimpleInstruction, false, new SimpleCmdType[] { takePicture.Data.ShootType }); OnSendAnswerToWebEvent(takePicture.SerialNumber, false, takePicture.GPSCode, ControlCmdType.SimpleInstruction, false, new SimpleCmdType[] { takePicture.Data.ShootType }); switch (takePicture.Data.ShootType) { case SimpleCmdType.RealTimeShoot: Logger.Info("[拍照]发送实时拍照指令(失败):" + takePicture.GPSCode, null); break; } } } else { string[] endpoint = remortpoint.Split(':'); IPEndPoint e = new IPEndPoint(IPAddress.Parse(endpoint[0]), int.Parse(endpoint[1])); //if(GpsDataParser.CodePrefix=="0001") OnSendDataEvent((EndPoint)e, sendBuffer); } } catch (SocketException ex) { //从列表移除此连接 //TCPConnList.Instance().RemoveTCPConnection(takePicture.GPSCode); Logger.Info("[拍照]发送实时拍照指令(错误)" + takePicture.GPSCode + ex.ToString(), null); } } catch (Exception ex) { Logger.Error(ex, null); } finally { sendBuffer = null; } }
/// <summary> /// 解析拍照控制命令 /// </summary> /// <param name="takePicture">拍照实体</param> /// <param name="instructionLen">解析后的命令长度</param> /// <param name="instruction">命令</param> public virtual byte[] ParseShootInstructionControl(TakePictureControl takePicture) { return null; }
/// <summary> /// 选择应用层下发的任务 /// </summary> /// <param name="receivedBuffer">接收缓冲区数据</param> /// <param name="remotePoint">客户端端点</param> public void SwitchEvent(EndPoint remotePoint, byte[] receivedBuffer) { try { //GPSCode string gpsCode = string.Empty; //读取命令 CmdData cmdData = new CmdData(); //读入数据 cmdData.ReadBuffer(0, receivedBuffer); Logger.Trace("收到应用层下发指令,指令类型:" + cmdData.Data.Cmd.ToString()); byte[] sendBuffer = null; switch (cmdData.Data.Cmd) { //调度命令 case ControlCmdType.DispatchControl: DispatchControl DispatchControl = new DispatchControl(); //读入数据 DispatchControl.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + DispatchControl.GPSCode); //将连接加入连接哈希表 GpsDataParser.OnPostAppLayerAddressEvent(DispatchControl.GPSCode, remotePoint); //下发调度命令 HandleDispatchControlInfo(DispatchControl); break; //监听喊话 case ControlCmdType.ListenCall: ListenCallControl CallControl = new ListenCallControl(); //读入数据 CallControl.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + CallControl.GPSCode); //将连接加入连接哈希表 GpsDataParser.OnPostAppLayerAddressEvent(CallControl.GPSCode, remotePoint); //下发调度命令 HandleListenCallInfo(CallControl); break; //简单控制命令 //case ControlCmdType.SimpleInstruction: //下发广告或LED其它命令 case ControlCmdType.LEDControl: SimpleInstructionControl SimpleControl = new SimpleInstructionControl(); SimpleControl.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + SimpleControl.GPSCode); //将连接加入连接哈希表 GpsDataParser.OnPostAppLayerAddressEvent(SimpleControl.GPSCode, remotePoint); HandleSimpleInstructionControl(SimpleControl); break; //下发拍照的动作 case ControlCmdType.SendTakePicture: TakePictureControl takePicture = new TakePictureControl(); takePicture.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + takePicture.GPSCode); //将连接加入哈希表 GpsDataParser.OnPostAppLayerAddressEvent(takePicture.GPSCode, remotePoint); HandleShootInstructionControl(takePicture); break; //下发拍照的动作(多摄像头) case ControlCmdType.SendTakePictureMultiCamera: TakePictureControlMultiCamera takePictureMultiCamera = new TakePictureControlMultiCamera(); takePictureMultiCamera.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + takePictureMultiCamera.GPSCode); //将连接加入哈希表 GpsDataParser.OnPostAppLayerAddressEvent(takePictureMultiCamera.GPSCode, remotePoint); HandleShootInstructionControl(takePictureMultiCamera); break; case ControlCmdType.SupplyOilCircuit: //强制断油断电 case ControlCmdType.BreakOilCircuitByForce: //智能断油断电 case ControlCmdType.BreakOilCircuitBySmart: ControlOilCircuit ControlOil = new ControlOilCircuit(); ControlOil.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + ControlOil.GPSCode); //将连接加入连接哈希表 GpsDataParser.OnPostAppLayerAddressEvent(ControlOil.GPSCode, remotePoint); //油路通断控制 HandleBreakOilCircuit(ControlOil); break; //北京视展LED控制 case ControlCmdType.BJSZLedControl: case ControlCmdType.SendAdvertisement: LEDControl ledControl = new LEDControl(); ledControl.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + ledControl.GPSCode); //将连接加入连接哈希表 GpsDataParser.OnPostAppLayerAddressEvent(ledControl.GPSCode, remotePoint); HandleBJSZLEDContentInfo(ledControl); break; //解除报警 case ControlCmdType.DischargeAlarm: DischangeAlarmControl dischangeAlarm = new DischangeAlarmControl(); dischangeAlarm.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + dischangeAlarm.GPSCode); //将连接加入连接哈希表 GpsDataParser.OnPostAppLayerAddressEvent(dischangeAlarm.GPSCode, remotePoint); DischargeAlarm(dischangeAlarm); break; //超速报警 case ControlCmdType.OverSpeedAlarm: OverSpeedAlarmControl overSpeedAlarm = new OverSpeedAlarmControl(); overSpeedAlarm.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + overSpeedAlarm.GPSCode); GpsDataParser.OnPostAppLayerAddressEvent(overSpeedAlarm.GPSCode, remotePoint); HandleOverSpeed(overSpeedAlarm); break; //获取网关活动信息 case ControlCmdType.GetGatewayActiveInfo: GatewayActiveInfo activeInfo = new GatewayActiveInfo(); activeInfo.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + activeInfo.GPSCode); GpsDataParser.OnPostAppLayerAddressEvent(activeInfo.GPSCode, remotePoint); SendGatewayActiveInfo(activeInfo, remotePoint); break; //更新GPS总里程值 case ControlCmdType.updatemileage: UpdateMileage UpMileage = new UpdateMileage(); UpMileage.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + UpMileage.GPSCode); GpsDataParser.OnPostAppLayerAddressEvent(UpMileage.GPSCode, remotePoint); SendUpdateMileage(UpMileage); break; //设置GPS上传周期 case ControlCmdType.SendGPSPosUploadInterval: GPSPosUploadInterval posUploadInterval = new GPSPosUploadInterval(); posUploadInterval.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + posUploadInterval.GPSCode); GpsDataParser.OnPostAppLayerAddressEvent(posUploadInterval.GPSCode, remotePoint); HandleGPSPosUploadInterval(posUploadInterval); break; //设置移动台初始经参数 case ControlCmdType.SetMobileInitPara: SetMobileInitPara setMobileInitPara = new SetMobileInitPara(); setMobileInitPara.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + setMobileInitPara.GPSCode); SetMobileInitPara(setMobileInitPara); break; //雅迅设备,配置报警器 case ControlCmdType.AllocateAnnounciator: SetAnnounciator setAnnounciator = new SetAnnounciator(); setAnnounciator.ReadBuffer(0, cmdData.DataBuffer); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + setAnnounciator.GPSCode); gpsCode = setAnnounciator.GPSCode; sendBuffer = GpsDataParser.ParseControlInstruction(ControlCmdType.AllocateAnnounciator, setAnnounciator); break; case ControlCmdType.SetCircleRegion: case ControlCmdType.SetRectangleRegion: case ControlCmdType.SetPloygon: case ControlCmdType.SetFixedLine: case ControlCmdType.RemoveCircleRegion: case ControlCmdType.RemoveRectangleRegion: case ControlCmdType.RemovePloygon: case ControlCmdType.RemoveFixedLine: case ControlCmdType.TMLControl: case ControlCmdType.SendTxtToTML: case ControlCmdType.PhoneCallback: case ControlCmdType.CameraShootImmediately: case ControlCmdType.PositionQueryReq: case ControlCmdType.SetStopCarAlarm: case ControlCmdType.SetOverFatigueAlarm: case ControlCmdType.SetOverSpeedAlarm: case ControlCmdType.GetRravelRecord: BuBiaoCommonControl BBControl = new BuBiaoCommonControl(); BBControl.ReadBuffer(0, cmdData.DataBuffer); GpsDataParser.OnPostAppLayerAddressEvent(BBControl.GPSCode, remotePoint); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + BBControl.GPSCode); HandleBuBiaoMessage(BBControl, cmdData.Data.Cmd); break; //部标解除报警 case ControlCmdType.ReleaseAlarm: BuBiaoCommonControl ReleaseControl = new BuBiaoCommonControl(); ReleaseControl.ReadBuffer(0, cmdData.DataBuffer); GpsDataParser.ReleaseAlarm(ReleaseControl); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + ReleaseControl.GPSCode); break; case ControlCmdType.OpenGPS: KKSSimpleControl openGPSControl = new KKSSimpleControl(); openGPSControl.ReadBuffer(0, cmdData.DataBuffer); GpsDataParser.OnPostAppLayerAddressEvent(openGPSControl.GPSCode, remotePoint); HandleKKSSimpleControlInfo(ControlCmdType.OpenGPS, openGPSControl); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + openGPSControl.GPSCode); break; case ControlCmdType.SetFriendNumber: KKSSimpleControl setfriendnumberControl = new KKSSimpleControl(); setfriendnumberControl.ReadBuffer(0, cmdData.DataBuffer); GpsDataParser.OnPostAppLayerAddressEvent(setfriendnumberControl.GPSCode, remotePoint); HandleKKSSimpleControlInfo(ControlCmdType.SetFriendNumber,setfriendnumberControl); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + setfriendnumberControl.GPSCode); break; case ControlCmdType.GetFriendNumber: KKSSimpleControl getfriendnumberControl = new KKSSimpleControl(); getfriendnumberControl.ReadBuffer(0, cmdData.DataBuffer); GpsDataParser.OnPostAppLayerAddressEvent(getfriendnumberControl.GPSCode, remotePoint); HandleKKSSimpleControlInfo(ControlCmdType.GetFriendNumber,getfriendnumberControl); Logger.Trace("应用层下发指令类型:" + cmdData.Data.Cmd.ToString() + ";GPSCode:" + getfriendnumberControl.GPSCode); break; default: break; } //GpsDataParser.OnPostSendHandlerEvent(gpsCode, string.Empty, sendBuffer); } catch (Exception ex) { Logger.Error(ex, null); } }
/// <summary> 发送应答信息给应用 /// 发送应答信息给应用 /// </summary> /// <param name="serialNumber">流水号</param> /// <param name="isGpsAckMsg">是否是GPS应答消息</param> /// <param name="gpscode"></param> /// <param name="cmdType">下发的命令类型</param> /// <param name="result">GPS终端对命令的执行结果:成功或失败</param> //private void SendAnswerToWeb(string serialNumber, bool isGpsAckMsg, string gpscode, ControlCmdType cmdType, bool result, params SimpleCmdType[] simplecmd) //{ // //获取WEB列表 // EndPoint adress = (EndPoint)WebTable[gpscode]; // if (adress != null) // { // byte[] answerBytes = SetAnswerByte(serialNumber, isGpsAckMsg, gpscode, cmdType, result, simplecmd); // CmdServer.SendTo((IPEndPoint)adress, answerBytes); // } //} /// <summary> 构造应答数据 /// 构造应答数据 /// </summary> /// <param name="serialNumber">流水号</param> /// <param name="isGpsAckMsg">是否是GPS应答信息</param> /// <param name="gpsCode">GPSG带前缀编码</param> /// <param name="cmd">下发的命令类型</param> /// <param name="result">GPS终端对命令的执行结果:成功或失败</param> /// <param name="simpleCmd">简单控制命令类型</param> /// <returns></returns> private byte[] SetAnswerByte(string serialNumber,bool isGpsAckMsg, string gpsCode, ControlCmdType cmd, bool result, params SimpleCmdType[] simpleCmd) { try { byte[] sendBuffer = null; byte[] dataBuffer = null; CmdData cmddata = new CmdData(); cmddata.Data.Cmd = cmd; byte gpsCodeLen = (byte)Encoding.Default.GetBytes(gpsCode).Length; byte serialLen = (byte)Encoding.Default.GetBytes(serialNumber).Length; switch (cmd) { case ControlCmdType.DeviceCircuitresAndOil://控制油路应答 ControlOilCircuit structOil = new ControlOilCircuit(); structOil.Data.IsGpsAckMsg = isGpsAckMsg; structOil.GPSCode = gpsCode; structOil.Data.Result = result; structOil.Data.GPSCodeLen = gpsCodeLen; structOil.SerialNumber = serialNumber; structOil.Data.SerialNumberLen = serialLen; byte[] bytsOil = new byte[structOil.GetLength()]; structOil.WriteBuffer(0, bytsOil); cmddata.DataBuffer = bytsOil; cmddata.Data.DataLen = (ushort)bytsOil.Length; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; //解除报警应答 case ControlCmdType.DischargeAlarm: DischangeAlarmControl structAlarm = new DischangeAlarmControl(); structAlarm.GPSCode = gpsCode; structAlarm.Data.Result = result; structAlarm.Data.GPSCodeLen = gpsCodeLen; structAlarm.SerialNumber = serialNumber; structAlarm.Data.SerialNumberLen = serialLen; byte[] bytsAlarm = new byte[structAlarm.GetLength()]; structAlarm.WriteBuffer(0, bytsAlarm); cmddata.DataBuffer = bytsAlarm; cmddata.Data.DataLen = (ushort)bytsAlarm.Length; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; //调度控制(下发文本) case ControlCmdType.DispatchControl: DispatchControl structDispatch = new DispatchControl(); structDispatch.Data.IsGpsAckMsg = isGpsAckMsg; structDispatch.GPSCode = gpsCode; structDispatch.Data.Result = result; structDispatch.Data.GPSCodeLen = gpsCodeLen; structDispatch.SerialNumber = serialNumber; byte[] bytsDispatch = new byte[structDispatch.GetLength()]; structDispatch.WriteBuffer(0, bytsDispatch); cmddata.DataBuffer = bytsDispatch; cmddata.Data.DataLen = (ushort)bytsDispatch.Length; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; //监听喊话 case ControlCmdType.ListenCall: ListenCallControl structListenCall = new ListenCallControl(); structListenCall.Data.IsGpsAckMsg = isGpsAckMsg; structListenCall.GPSCode = gpsCode; structListenCall.Data.GPSCodeLen = gpsCodeLen; structListenCall.Data.Result = result; structListenCall.Data.SerialNumberLen = serialLen; structListenCall.SerialNumber = serialNumber; byte[] bytsListenCall = new byte[structListenCall.GetLength()]; structListenCall.WriteBuffer(0, bytsListenCall); cmddata.DataBuffer = bytsListenCall; cmddata.Data.DataLen = (ushort)bytsListenCall.Length; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; case ControlCmdType.BJSZLedControl://透传数据应答(BJSZ LED) BJSZLEDContentControl structBJSZLED = new BJSZLEDContentControl(); structBJSZLED.Data.IsGpsAckMsg = isGpsAckMsg; structBJSZLED.GPSCode = gpsCode; structBJSZLED.Data.Result = result; structBJSZLED.Data.SerialNumberLen = serialLen; structBJSZLED.SerialNumber = serialNumber; structBJSZLED.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(gpsCode).Length; byte[] bytsBJSZLED = new byte[structBJSZLED.GetLength()]; structBJSZLED.WriteBuffer(0, bytsBJSZLED); cmddata.DataBuffer = bytsBJSZLED; cmddata.Data.DataLen = (ushort)bytsBJSZLED.Length; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; case ControlCmdType.LongHanAnswered://龙汗数据应答 break; case ControlCmdType.SimpleInstruction://简单控制命令 SimpleInstructionControl structSimple = new SimpleInstructionControl(); structSimple.Data.InstructionType = simpleCmd[0]; structSimple.Data.IsGpsAckMsg = isGpsAckMsg; structSimple.GPSCode = gpsCode; structSimple.Data.Result = result; structSimple.Data.SerialNumberLen = serialLen; structSimple.SerialNumber = serialNumber; structSimple.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(gpsCode).Length; byte[] bytsSimple = new byte[structSimple.GetLength()]; structSimple.WriteBuffer(0, bytsSimple); cmddata.DataBuffer = bytsSimple; cmddata.Data.DataLen = (ushort)bytsSimple.Length; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; case ControlCmdType.SendTakePicture://拍照应答 TakePictureControl structPicture = new TakePictureControl(); structPicture.Data.IsGpsAckMsg = isGpsAckMsg; structPicture.GPSCode = gpsCode; structPicture.Data.Result = result; structPicture.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(gpsCode).Length; structPicture.SerialNumber = serialNumber; structPicture.Data.SerialNumberLen = (byte)Encoding.Default.GetBytes(serialNumber).Length; byte[] bytsPicture = new byte[structPicture.GetLength()]; structPicture.WriteBuffer(0, bytsPicture); cmddata.DataBuffer = bytsPicture; cmddata.Data.DataLen = (ushort)bytsPicture.Length; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; //对下发广告的回复 case ControlCmdType.SendAdvertisement: LEDControl ledControl = new LEDControl(); ledControl.GPSCode = gpsCode; ledControl.SerialNumber = serialNumber; ledControl.Data.SerialNumberLen = serialLen; ledControl.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(gpsCode).Length; ledControl.Data.IsGpsAckMsg = false; ledControl.Data.Result = result; dataBuffer = new byte[ledControl.GetLength()]; ledControl.WriteBuffer(0, dataBuffer); cmddata.DataBuffer = dataBuffer; cmddata.Data.DataLen = (ushort)dataBuffer.Length; cmddata.Data.Cmd = ControlCmdType.SendAdvertisement; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; //超速报警 case ControlCmdType.OverSpeedAlarm: OverSpeedAlarmControl overSpeedCrl = new OverSpeedAlarmControl(); overSpeedCrl.GPSCode = gpsCode; overSpeedCrl.Data.GPSCodeLen = gpsCodeLen; overSpeedCrl.SerialNumber = serialNumber; overSpeedCrl.Data.SerialNumberLen = serialLen; overSpeedCrl.Data.IsGpsAckMsg = isGpsAckMsg; overSpeedCrl.Data.Result = result; dataBuffer = new byte[overSpeedCrl.GetLength()]; overSpeedCrl.WriteBuffer(0, dataBuffer); cmddata.DataBuffer = dataBuffer; cmddata.Data.DataLen = (ushort)dataBuffer.Length; cmddata.Data.Cmd = ControlCmdType.OverSpeedAlarm; sendBuffer = new byte[cmddata.GetLenth()]; cmddata.WriteBuffer(0, sendBuffer); break; } return sendBuffer; } catch (Exception ex) { Logger.Error(ex, null); return new byte[0]; } }
public string GetGpsCodeFromBuffer(byte[] receivedBuffer) { string gpsCode = string.Empty; try { CmdData cmdData = new CmdData(); cmdData.ReadBuffer(0, receivedBuffer); switch (cmdData.Data.Cmd) { //调度命令 case ControlCmdType.DispatchControl: DispatchControl DispatchControl = new DispatchControl(); DispatchControl.ReadBuffer(0, cmdData.DataBuffer); gpsCode = DispatchControl.GPSCode; break; //监听喊话 case ControlCmdType.ListenCall: ListenCallControl CallControl = new ListenCallControl(); CallControl.ReadBuffer(0, cmdData.DataBuffer); gpsCode = CallControl.GPSCode; break; case ControlCmdType.LEDControl: SimpleInstructionControl SimpleControl = new SimpleInstructionControl(); SimpleControl.ReadBuffer(0, cmdData.DataBuffer); gpsCode = SimpleControl.GPSCode; break; //下发拍照的动作 case ControlCmdType.SendTakePicture: TakePictureControl takePicture = new TakePictureControl(); takePicture.ReadBuffer(0, cmdData.DataBuffer); gpsCode = takePicture.GPSCode; break; //下发拍照的动作(多摄像头) case ControlCmdType.SendTakePictureMultiCamera: TakePictureControlMultiCamera takePictureMultiCamera = new TakePictureControlMultiCamera(); takePictureMultiCamera.ReadBuffer(0, cmdData.DataBuffer); gpsCode = takePictureMultiCamera.GPSCode; break; case ControlCmdType.SupplyOilCircuit: //强制断油断电 case ControlCmdType.BreakOilCircuitByForce: //智能断油断电 case ControlCmdType.BreakOilCircuitBySmart: ControlOilCircuit ControlOil = new ControlOilCircuit(); ControlOil.ReadBuffer(0, cmdData.DataBuffer); gpsCode = ControlOil.GPSCode; break; //北京视展LED控制 case ControlCmdType.BJSZLedControl: case ControlCmdType.SendAdvertisement: LEDControl ledControl = new LEDControl(); ledControl.ReadBuffer(0, cmdData.DataBuffer); gpsCode = ledControl.GPSCode; break; //解除报警 case ControlCmdType.DischargeAlarm: DischangeAlarmControl dischangeAlarm = new DischangeAlarmControl(); dischangeAlarm.ReadBuffer(0, cmdData.DataBuffer); gpsCode = dischangeAlarm.GPSCode; break; //超速报警 case ControlCmdType.OverSpeedAlarm: OverSpeedAlarmControl overSpeedAlarm = new OverSpeedAlarmControl(); overSpeedAlarm.ReadBuffer(0, cmdData.DataBuffer); gpsCode = overSpeedAlarm.GPSCode; break; //获取网关活动信息 case ControlCmdType.GetGatewayActiveInfo: GatewayActiveInfo activeInfo = new GatewayActiveInfo(); activeInfo.ReadBuffer(0, cmdData.DataBuffer); gpsCode = activeInfo.GPSCode; break; //更新GPS总里程值 case ControlCmdType.updatemileage: UpdateMileage UpMileage = new UpdateMileage(); UpMileage.ReadBuffer(0, cmdData.DataBuffer); gpsCode = UpMileage.GPSCode; break; //设置GPS上传周期 case ControlCmdType.SendGPSPosUploadInterval: GPSPosUploadInterval posUploadInterval = new GPSPosUploadInterval(); posUploadInterval.ReadBuffer(0, cmdData.DataBuffer); gpsCode = posUploadInterval.GPSCode; break; //设置移动台初始经参数 case ControlCmdType.SetMobileInitPara: SetMobileInitPara setMobileInitPara = new SetMobileInitPara(); setMobileInitPara.ReadBuffer(0, cmdData.DataBuffer); gpsCode = setMobileInitPara.GPSCode; break; //雅迅设备,配置报警器 case ControlCmdType.AllocateAnnounciator: SetAnnounciator setAnnounciator = new SetAnnounciator(); setAnnounciator.ReadBuffer(0, cmdData.DataBuffer); gpsCode = setAnnounciator.GPSCode; break; case ControlCmdType.SetCircleRegion: case ControlCmdType.SetRectangleRegion: case ControlCmdType.SetPloygon: case ControlCmdType.SetFixedLine: case ControlCmdType.RemoveCircleRegion: case ControlCmdType.RemoveRectangleRegion: case ControlCmdType.RemovePloygon: case ControlCmdType.RemoveFixedLine: case ControlCmdType.TMLControl: case ControlCmdType.SendTxtToTML: case ControlCmdType.PhoneCallback: case ControlCmdType.CameraShootImmediately: case ControlCmdType.PositionQueryReq: case ControlCmdType.SetStopCarAlarm: case ControlCmdType.SetOverFatigueAlarm: case ControlCmdType.SetOverSpeedAlarm: case ControlCmdType.GetRravelRecord: //case ControlCmdType.MediaInfoSetting: //case ControlCmdType.MediaInfoService: //case ControlCmdType.EventSetting: //case ControlCmdType.PublishQuestion: //case ControlCmdType.TempLocationTrace: //case ControlCmdType.VehicleControl: BuBiaoCommonControl BBControl = new BuBiaoCommonControl(); BBControl.ReadBuffer(0, cmdData.DataBuffer); gpsCode = BBControl.GPSCode; break; //部标解除报警 case ControlCmdType.ReleaseAlarm: BuBiaoCommonControl ReleaseControl = new BuBiaoCommonControl(); ReleaseControl.ReadBuffer(0, cmdData.DataBuffer); gpsCode = ReleaseControl.GPSCode; break; default: break; } } catch (Exception ex) { Logger.Error(ex, null); } return gpsCode; }
/// <summary> /// 应用层拍照确认方法 /// </summary> /// <param name="pictureData">拍照数据</param> /// <param name="isGpsAckMsg">是否是GPS终端的确认消息</param> /// <param name="bResult">执行结果:成功或失败</param> public void TakePictureAckMsg(ref YouWeiGPSData pictureData, bool isGpsAckMsg, bool bResult) { TakePictureControl takePicture = new TakePictureControl(); takePicture.FilePath = pictureData.BaseData.PhotoPath; takePicture.GPSCode = pictureData.FullGpsCode; takePicture.Data.FilePathLen = Encoding.Default.GetBytes(takePicture.FilePath).Length; takePicture.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(takePicture.GPSCode).Length; takePicture.Data.PictureType = (TakePictureType)pictureData.BaseData.RealTimePhotoType; takePicture.Data.Result = bResult; takePicture.Data.IsGpsAckMsg = isGpsAckMsg; byte[] dataBuffer = new byte[takePicture.GetLength()]; takePicture.WriteBuffer(0, dataBuffer); CmdData data = new CmdData(); data.Data.Cmd = ControlCmdType.SendTakePicture; data.DataBuffer = dataBuffer; data.Data.DataLen = (ushort)dataBuffer.Length; byte[] sendBuffer = new byte[data.GetLenth()]; data.WriteBuffer(0, sendBuffer); OnPostAckMsgHandlerEvent(takePicture.GPSCode, sendBuffer); }
/// <summary> /// 解析拍照控制命令 /// </summary> /// <param name="takePicture">拍照实体</param> /// <param name="instructionLen">解析后的命令长度</param> /// <param name="instruction">命令</param> public override byte[] ParseShootInstructionControl(TakePictureControl takePicture) { YaXunShootPara shootPara = new YaXunShootPara(); //亮度使用默认值 shootPara.Brightness = 0x08; //对比度使用默认值 shootPara.Contract = 0x08; //色调使用默认值 shootPara.Tone = 0x08; //蓝色饱和度使用默认值 shootPara.BlueSaturation = 0x08; //红色饱和度 shootPara.RedSaturation = 0x08; //图片分辨率使用最小 shootPara.PicResolution = 0x02; //图片质量,默认为0x02,为中等 shootPara.PicQuality = 0x02; //单次抓拍张数 shootPara.PicCount = (byte)takePicture.Data.PictureCount; //摄相头编号 shootPara.PicCameraId = takePicture.Data.CameraId; //终端号 string terminalNum = takePicture.GPSCode.Substring(4); //构建发送数据 return RealTimeShootPicture(terminalNum, shootPara); }