コード例 #1
0
ファイル: Form1.cs プロジェクト: hhahh2011/CH.Gps
        private byte[] SetFriendNumber()
        {
            KKSSimpleControl control = new KKSSimpleControl();
            control.GPSCode = txtGpsCode.Text.Trim();
            control.SendContent = txtParam1.Text.Trim();
            control.Data.GpsType = GPSType.KangKaiSi;
            control.SerialNumber = Guid.NewGuid().ToString();
            control.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(control.GPSCode).Length;
            control.Data.ContentLen = (byte)Encoding.Default.GetBytes(control.SendContent).Length;
            control.Data.SerialNumberLen = (byte)Encoding.Default.GetBytes(control.SerialNumber).Length;
            control.Data.IsGpsAckMsg = true;
            control.Data.SimpleControlType = KKSSimpleControlType.SetFriendNumber;

            byte[] dataBuffer = new byte[control.GetLength()];
            control.WriteBuffer(0, dataBuffer);


            CmdData cmdData = new CmdData();
            cmdData.Data.Cmd = ControlCmdType.SetFriendNumber;
            cmdData.DataBuffer = dataBuffer;
            cmdData.Data.DataLen = (ushort)dataBuffer.Length;

            byte[] destBuffer = new byte[cmdData.GetLenth()];
            cmdData.WriteBuffer(0, destBuffer);

            return destBuffer;
        }
コード例 #2
0
ファイル: CommandService.cs プロジェクト: hhahh2011/CH.Gps
        private void ReceiveDataEvent(EndPoint remotePoint, byte[] receivedBuffer)
        {
            //读取命令
            CmdData cmdData = new CmdData();

            //读入数据
            cmdData.ReadBuffer(0, receivedBuffer);

            ReceiveCount++;
            Logger.Info("收到指令反馈次数:" + ReceiveCount);
            switch (cmdData.Data.Cmd)
            {
                ////调度命令
                //case ControlCmdType.DispatchControl:

                //    DispatchControl dispatchControl = new DispatchControl();
                //    //读入数据
                //    dispatchControl.ReadBuffer(0, cmdData.DataBuffer);
                //    Log.Info(string.Format("收到调度指令回复。次数:{0},结果:{1},硬件反馈:{2}", ReceiveCount, dispatchControl.Data.Result, dispatchControl.Data.IsGpsAckMsg));

                //    IDispatchManager dispatchManager = new DispatchManager();
                //    PES.GPS.Entity.Dispatch.EnumSendState dispatchState = dispatchControl.Data.Result ? PES.GPS.Entity.Dispatch.EnumSendState.SendSuccess : PES.GPS.Entity.Dispatch.EnumSendState.SendFailed;
                //    if (!dispatchControl.Data.IsGpsAckMsg)
                //        dispatchManager.UpdateState(new Guid(dispatchControl.SerialNumber), dispatchState);
                //    break;

                ////监听喊话
                //case ControlCmdType.ListenCall:
                //    ListenCallControl CallControl = new ListenCallControl();

                //    //读入数据
                //    CallControl.ReadBuffer(0, cmdData.DataBuffer);
                //    Log.Info(string.Format("收到监听指令回复。次数:{0}", ReceiveCount));
                //    break;

                ////下发广告或LED其它命令
                //case ControlCmdType.SendAdvertisement:
                //    LEDControl advertiseControl = new LEDControl();
                //    //读入数据
                //    advertiseControl.ReadBuffer(0, cmdData.DataBuffer);

                //    IHistoryAdvertInfoManager db = new HistoryAdvertInfoManager();
                //    if (!advertiseControl.Data.IsGpsAckMsg)//网关反馈
                //    {
                //        if (advertiseControl.Data.Result)
                //        {
                //            db.Update<EAdvertSendHistory>(advertiseControl.GPSCode, EnumSendState.Sended);
                //            Log.Info(string.Format("收到[{1}]发送广告指令回复。结果:{0}", advertiseControl.Data.Result, advertiseControl.GPSCode));
                //        }
                //        else
                //        {
                //            db.Update<EAdvertSendHistory>(advertiseControl.GPSCode, EnumSendState.SendFailed);
                //            Log.Info(string.Format("收到[{1}]发送广告指令回复。结果:{0}", advertiseControl.Data.Result, advertiseControl.GPSCode));
                //        }
                //    }
                //    Log.Info(string.Format("收到发送广告指令回复。次数:{0}", ReceiveCount));
                //    break;

                ////简单控制命令
                //case ControlCmdType.SimpleInstruction:
                //    SimpleInstructionControl simpleControl = new SimpleInstructionControl();
                //    simpleControl.ReadBuffer(0, cmdData.DataBuffer);

                //    Log.Info(string.Format("收到简单控制指令回复。次数:{0},结果:{1},硬件反馈:{2}", ReceiveCount, simpleControl.Data.Result, simpleControl.Data.IsGpsAckMsg));
                //    break;
                ////下发拍照动作
                //case ControlCmdType.SendTakePicture:
                //    SimpleInstructionControl takePicture = new SimpleInstructionControl();
                //    takePicture.ReadBuffer(0, cmdData.DataBuffer);

                //    Log.Info(string.Format("收到拍照指令回复。次数:{0},结果:{1},硬件反馈:{2}", ReceiveCount, takePicture.Data.Result, takePicture.Data.IsGpsAckMsg));
                //    break;

                //控制油路通断
                case ControlCmdType.BreakOilCircuitByForce:
                case ControlCmdType.BreakOilCircuitBySmart:
                case ControlCmdType.SupplyOilCircuit:
                    ControlOilCircuit ControlOil = new ControlOilCircuit();
                    ControlOil.ReadBuffer(0, cmdData.DataBuffer);
                    Logger.Info(string.Format("收到油路指令回复。次数:{0},结果:{1},硬件反馈:{2}", ReceiveCount, ControlOil.Data.Result, ControlOil.Data.IsGpsAckMsg));
                    EnumOilCommandState breakOilState = EnumOilCommandState.All;
                    //有为油路通断控制
                    if (!ControlOil.Data.IsGpsAckMsg)
                    {
                        breakOilState = ControlOil.Data.Result ? EnumOilCommandState.SendSuccess : EnumOilCommandState.SendFail;
                        //IBreakOilHistoryManager breakOil = new BreakOilHistoryManager();
                        DACFacade.Gps.BreakOilHistoryRecordDAC.UpdateState(new Guid(ControlOil.SerialNumber), breakOilState);
                    }
                    break;
                case ControlCmdType.DeviceCircuitresAndOil:
                    ControlOilCircuit ControlOil2 = new ControlOilCircuit();
                    ControlOil2.ReadBuffer(0, cmdData.DataBuffer);
                    EnumOilCommandState breakOilState2 = ControlOil2.Data.Result ? EnumOilCommandState.RunSuccess : EnumOilCommandState.RunFail;
                    //IBreakOilHistoryManager breakOil2 = new BreakOilHistoryManager();
                    DACFacade.Gps.BreakOilHistoryRecordDAC.UpdateState(ControlOil2.GPSCode, breakOilState2);
                    break;
                case ControlCmdType.OpenGPS:
                    KKSSimpleControl openGPSControl = new KKSSimpleControl();
                    openGPSControl.ReadBuffer(0, cmdData.DataBuffer);
                    UpdateOpenGPSInfo(openGPSControl.GPSCode,1,openGPSControl.SendContent);
                    break;
                case ControlCmdType.SetFriendNumber:
                    KKSSimpleControl setfriendnumberControl = new KKSSimpleControl();
                    setfriendnumberControl.ReadBuffer(0, cmdData.DataBuffer);
                    UpdateOpenGPSInfo(setfriendnumberControl.GPSCode, 2, setfriendnumberControl.SendContent);
                    break;
                case ControlCmdType.GetFriendNumber:
                    KKSSimpleControl getfriendnumberControl = new KKSSimpleControl();
                    getfriendnumberControl.ReadBuffer(0, cmdData.DataBuffer);
                    UpdateOpenGPSInfo(getfriendnumberControl.GPSCode, 3, getfriendnumberControl.SendContent);
                    break;
                default:
                    break;
            }
        }
コード例 #3
0
ファイル: CommandService.cs プロジェクト: hhahh2011/CH.Gps
        public bool SetFriendNumber(string gpsCode, string SMSStr, int type)
        {
            SettingEMOpenGPSInfo(gpsCode, type);
            KKSSimpleControl control = new KKSSimpleControl();
            control.GPSCode = gpsCode;
            control.SendContent = SMSStr;
            control.Data.GpsType = GPSType.KangKaiSi;
            control.SerialNumber = Guid.NewGuid().ToString();
            control.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(control.GPSCode).Length;
            control.Data.ContentLen = (byte)Encoding.Default.GetBytes(control.SendContent).Length;
            control.Data.SerialNumberLen = (byte)Encoding.Default.GetBytes(control.SerialNumber).Length;
            control.Data.IsGpsAckMsg = true;
            control.Data.SimpleControlType = KKSSimpleControlType.SetFriendNumber;

            byte[] dataBuffer = new byte[control.GetLength()];
            control.WriteBuffer(0, dataBuffer);


            CmdData cmdData = new CmdData();
            cmdData.Data.Cmd = ControlCmdType.SetFriendNumber;
            cmdData.DataBuffer = dataBuffer;
            cmdData.Data.DataLen = (ushort)dataBuffer.Length;

            byte[] destBuffer = new byte[cmdData.GetLenth()];
            cmdData.WriteBuffer(0, destBuffer);

            IPEndPoint endPoint = GetEndPoint(gpsCode);
            return SendData(destBuffer, endPoint);
            
        }
コード例 #4
0
        /// <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);
            }
        }
コード例 #5
0
        public override byte[] ParseControlInstruction(ControlCmdType cmdType, object entity)
        {
            KKSSimpleControl simpleControl = new KKSSimpleControl();

            byte[] sendData = null;

            switch (cmdType)
            {
                //断油断电(智能)
                case ControlCmdType.BreakOilCircuitBySmart:
                //断油断电(强制)
                case ControlCmdType.BreakOilCircuitByForce:
                    sendData = GetOilPowerInstruction(true);
                    break;

                //恢复供油供电
                case ControlCmdType.SupplyOilCircuit:
                    sendData = GetOilPowerInstruction(false);
                    break;
            }

            return sendData;
        }
コード例 #6
0
        public void HandleKKSSimpleControlInfo(ControlCmdType controlType, KKSSimpleControl simpleControl)
        {
            //发送缓冲区
            byte[] sendBuffer = null;

            string gpsCode = simpleControl.GPSCode;

            try
            {
                Logger.Trace("下发指令到GPSCode:" + gpsCode);
                //取得已建立的套接字
                Socket socket = TCPConnList.Instance().GetTCPConnection(gpsCode);
                if (socket == null)
                {
                    Logger.Trace("下发指令到GPSCode:" + gpsCode + "失败,原因是socket=null");
                    return;
                }
                //已断开连接,将其从连接列表移除
                if (socket.Connected == false)
                {
                    Logger.Trace("下发指令到GPSCode:" + gpsCode + "失败,原因是socket.connected==null");
                    //TCPConnList.Instance().RemoveTCPConnection(gpsCode);
                    return;
                }

                //解析页面下发命令
                sendBuffer = GpsDataParser.ParseControlInstruction(controlType, simpleControl);

                if (sendBuffer == null || sendBuffer.Length <= 0)
                {
                    return;
                }

                try
                {
                    //向GPS发送控制命令
                    int send = socket.Send(sendBuffer);

                    if (send > 0)
                    {
                        //向应用层确认发送成功
                        //SendAnswerToWeb(dispatchControl.SerialNumber,false, gpsCode, ControlCmdType.DispatchControl, true);
                        OnSendAnswerToWebEvent(simpleControl.SerialNumber, false, gpsCode, ControlCmdType.DispatchControl, true);
                        Logger.Trace("GPSYouWei--Gps:" + gpsCode + " 发送命令成功", null);
                    }
                    else
                    {
                        //向应用层确认发送失败
                        //SendAnswerToWeb(dispatchControl.SerialNumber,false, gpsCode, ControlCmdType.DispatchControl, true);
                        OnSendAnswerToWebEvent(simpleControl.SerialNumber, false, gpsCode, ControlCmdType.DispatchControl, true);
                        Logger.Trace("GPSYouWei--Gps:" + gpsCode + " 发送命令失败", null);
                    }
                }
                catch (SocketException ex)
                {
                    //向应用层确认发送失败
                    //SendAnswerToWeb(dispatchControl.SerialNumber,false, gpsCode, ControlCmdType.DispatchControl, true);
                    OnSendAnswerToWebEvent(simpleControl.SerialNumber, false, gpsCode, ControlCmdType.DispatchControl, true);
                    Logger.Error("GPSYouWei--Gps:" + gpsCode + " 发送命令时异常--" + ex.Message, null);

                    //从列表移除此连接
                    //TCPConnList.Instance().RemoveTCPConnection(gpsCode);

                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex, null);
            }
            finally
            {
                sendBuffer = null;
            }
        }
コード例 #7
0
ファイル: SwitchAppLayerCmd.cs プロジェクト: hhahh2011/CH.Gps
        /// <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://控制油路应答   
                    case ControlCmdType.BreakOilCircuitBySmart:
                    case ControlCmdType.BreakOilCircuitByForce:
                    case ControlCmdType.SupplyOilCircuit:

                        ControlOilCircuit structOil = new ControlOilCircuit();
                        structOil.BreakOilCircuitTime = DateTime.Now;
                        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.Data.SerialNumberLen = serialLen;
                        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;

                    //更新总里程
                    case ControlCmdType.updatemileage:

                        UpdateMileage UpMileage = new UpdateMileage();
                        UpMileage.GPSCode = gpsCode;
                        UpMileage.Data.GPSCodeLen = gpsCodeLen;
                        UpMileage.SerialNumber = serialNumber;
                        UpMileage.Data.SerialNumberLen = serialLen;
                        UpMileage.Data.IsGpsAckMsg = isGpsAckMsg;
                        UpMileage.Data.Result = result;
                        dataBuffer = new byte[UpMileage.GetLength()];
                        UpMileage.WriteBuffer(0, dataBuffer);
                        cmddata.DataBuffer = dataBuffer;
                        cmddata.Data.DataLen = (ushort)dataBuffer.Length;
                        cmddata.Data.Cmd = ControlCmdType.updatemileage;
                        sendBuffer = new byte[cmddata.GetLenth()];
                        cmddata.WriteBuffer(0, sendBuffer);

                        break;
                    case ControlCmdType.SetFriendNumber:
                        KKSSimpleControl control1 = new KKSSimpleControl();
                        control1.GPSCode = gpsCode;
                        control1.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(control1.GPSCode).Length;
                        control1.Data.GpsType = GPSType.KangKaiSi;
                        control1.SendContent = serialNumber;
                        control1.Data.ContentLen = (byte)Encoding.Default.GetBytes(serialNumber).Length;
                        control1.Data.IsGpsAckMsg = isGpsAckMsg;

                        dataBuffer = new byte[control1.GetLength()];
                        control1.WriteBuffer(0, dataBuffer);

                        cmddata.DataBuffer = dataBuffer;
                        cmddata.Data.DataLen = (ushort)dataBuffer.Length;
                        cmddata.Data.Cmd = ControlCmdType.SetFriendNumber;
                        sendBuffer = new byte[cmddata.GetLenth()];
                        cmddata.WriteBuffer(0, sendBuffer);
                        break;
                    case ControlCmdType.GetFriendNumber:
                        KKSSimpleControl control2 = new KKSSimpleControl();
                        control2.GPSCode = gpsCode;
                        control2.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(control2.GPSCode).Length;
                        control2.Data.GpsType = GPSType.KangKaiSi;
                        control2.SendContent = serialNumber;
                        control2.Data.ContentLen = (byte)Encoding.Default.GetBytes(serialNumber).Length;
                        control2.Data.IsGpsAckMsg = isGpsAckMsg;

                        dataBuffer = new byte[control2.GetLength()];
                        control2.WriteBuffer(0, dataBuffer);

                        cmddata.DataBuffer = dataBuffer;
                        cmddata.Data.DataLen = (ushort)dataBuffer.Length;
                        cmddata.Data.Cmd = ControlCmdType.GetFriendNumber;
                        sendBuffer = new byte[cmddata.GetLenth()];
                        cmddata.WriteBuffer(0, sendBuffer);
                        break;
                    case ControlCmdType.OpenGPS:
                        KKSSimpleControl control = new KKSSimpleControl();
                        control.GPSCode = gpsCode;
                        control.Data.GPSCodeLen = (byte)Encoding.Default.GetBytes(control.GPSCode).Length;
                        control.Data.GpsType = GPSType.KangKaiSi;
                        control.SendContent = serialNumber;
                        control.Data.ContentLen = (byte)Encoding.Default.GetBytes(serialNumber).Length;
                        control.Data.IsGpsAckMsg = isGpsAckMsg;

                        dataBuffer = new byte[control.GetLength()];
                        control.WriteBuffer(0, dataBuffer);

                        cmddata.DataBuffer = dataBuffer;
                        cmddata.Data.DataLen = (ushort)dataBuffer.Length;
                        cmddata.Data.Cmd = ControlCmdType.OpenGPS;
                        sendBuffer = new byte[cmddata.GetLenth()];
                        cmddata.WriteBuffer(0, sendBuffer);
                        break;
                }
                return sendBuffer;
            }
            catch (Exception ex)
            {
                Logger.Error(ex, null);
                return new byte[0];
            }
        }
コード例 #8
0
ファイル: CommandService.cs プロジェクト: hhahh2011/CH.Gps
        private void ReceiveDataEvent(EndPoint remotePoint, byte[] receivedBuffer)
        {
            //读取命令
            CmdData cmdData = new CmdData();

            //读入数据
            cmdData.ReadBuffer(0, receivedBuffer);

            ReceiveCount++;
            Logger.Info("收到指令反馈次数:" + ReceiveCount);
            switch (cmdData.Data.Cmd)
            {
                

                //控制油路通断
                case ControlCmdType.BreakOilCircuitByForce:
                case ControlCmdType.BreakOilCircuitBySmart:
                case ControlCmdType.SupplyOilCircuit:
                    ControlOilCircuit ControlOil = new ControlOilCircuit();
                    ControlOil.ReadBuffer(0, cmdData.DataBuffer);
                    Logger.Info(string.Format("收到油路指令回复。次数:{0},结果:{1},硬件反馈:{2}", ReceiveCount, ControlOil.Data.Result, ControlOil.Data.IsGpsAckMsg));
                    EnumOilCommandState breakOilState = EnumOilCommandState.All;
                    //有为油路通断控制
                    if (!ControlOil.Data.IsGpsAckMsg)
                    {
                        breakOilState = ControlOil.Data.Result ? EnumOilCommandState.SendSuccess : EnumOilCommandState.SendFail;
                      
                        DACFacade.Gps.BreakOilHistoryDAC.UpdateState(new Guid(ControlOil.SerialNumber), breakOilState);
                    }
                    break;
                case ControlCmdType.DeviceCircuitresAndOil:
                    ControlOilCircuit ControlOil2 = new ControlOilCircuit();
                    ControlOil2.ReadBuffer(0, cmdData.DataBuffer);
                    EnumOilCommandState breakOilState2 = ControlOil2.Data.Result ? EnumOilCommandState.RunSuccess : EnumOilCommandState.RunFail;

                    DACFacade.Gps.BreakOilHistoryDAC.UpdateState(ControlOil2.GPSCode, breakOilState2);
                    break;
                case ControlCmdType.OpenGPS:
                    KKSSimpleControl openGPSControl = new KKSSimpleControl();
                    openGPSControl.ReadBuffer(0, cmdData.DataBuffer);
                    UpdateOpenGPSInfo(openGPSControl.GPSCode, 1, openGPSControl.SendContent);
                    break;
                case ControlCmdType.SetFriendNumber:
                    KKSSimpleControl setfriendnumberControl = new KKSSimpleControl();
                    setfriendnumberControl.ReadBuffer(0, cmdData.DataBuffer);
                    UpdateOpenGPSInfo(setfriendnumberControl.GPSCode, 2, setfriendnumberControl.SendContent);
                    break;
                case ControlCmdType.GetFriendNumber:
                    KKSSimpleControl getfriendnumberControl = new KKSSimpleControl();
                    getfriendnumberControl.ReadBuffer(0, cmdData.DataBuffer);
                    UpdateOpenGPSInfo(getfriendnumberControl.GPSCode, 3, getfriendnumberControl.SendContent);
                    break;
                default:
                    break;
            }
        }
コード例 #9
0
        public override byte[] ParseControlInstruction(ControlCmdType cmdType, object entity)
        {
            //string gpscode = entity.ToString();
            KKSSimpleControl simpleControl = new KKSSimpleControl();
            if (cmdType == ControlCmdType.OpenGPS || cmdType == ControlCmdType.GetFriendNumber || cmdType == ControlCmdType.SetFriendNumber)
            {
                simpleControl = (KKSSimpleControl)entity;
            }

            byte[] sendData = null;

            switch (cmdType)
            {
                //断油断电(智能)
                case ControlCmdType.BreakOilCircuitBySmart:
                //断油断电(强制)
                case ControlCmdType.BreakOilCircuitByForce:
                    sendData = GetOilPowerInstruction(true);
                    break;

                //恢复供油供电
                case ControlCmdType.SupplyOilCircuit:
                    sendData = GetOilPowerInstruction(false);
                    break;
                case ControlCmdType.OpenGPS:
                case ControlCmdType.GetFriendNumber:
                case ControlCmdType.SetFriendNumber:
                    sendData = GetSimpleControlInstruction(simpleControl);
                    break;
            }
            //if (simpleControl.Data.SimpleControlType == KKSSimpleControlType.SetFriendNumber)
            //{
            //    return GetResponseMsg(0x81, sendData);
            //}
            return GetResponseMsg(0x80, sendData);
        }
コード例 #10
0
        private byte[] GetSimpleControlInstruction(KKSSimpleControl control)
        {
            string strInstruction = string.Empty;
            switch (control.Data.SimpleControlType)
            {
                case KKSSimpleControlType.OpenGPS:
                    strInstruction += "GPSON#";
                    break;
                case KKSSimpleControlType.GetFriendNumber:
                    strInstruction += "SEESOS#";
                    break;
                case KKSSimpleControlType.SetFriendNumber:
                    strInstruction += control.SendContent;
                    break;
            }

            byte[] bTmp = Encoding.ASCII.GetBytes(strInstruction);
            byte[] bRet = new byte[7 + bTmp.Length];
            bRet[0] = (byte)(bTmp.Length + 4);

            //服务器标识位
            bRet[1] = 0x01;
            bRet[2] = 0x02;
            bRet[3] = 0x03;
            bRet[4] = 0x04;

            Array.Copy(bTmp, 0, bRet, 5, bTmp.Length);

            //序列号
            bRet[bRet.Length - 2] = 0x00;
            bRet[bRet.Length - 1] = 0x01;

            return bRet;
        }