public void Handle(AppSocketSession session, EInstruction instruction) { byte[] content = null; switch (instruction.InstructionType) { case EnumInstructionType.BreakOilOrPower: content = Encoding.ASCII.GetBytes("DYD,000000#"); break; case EnumInstructionType.RecoveryBreakOilOrPower: content = Encoding.ASCII.GetBytes("HFYD,000000#"); break; } if (content != null && content.Length > 0) { var cmd = KksCommon.CreateBytesPackage("80", session.GetSerialNumber(), (bw) => { //指令长度 bw.WriteInt(content.Length); //服务器标志位 bw.WriteInt32(GetSerialNumber()); //指令内容 bw.Write(content); //语言 bw.Write(new byte[] {0x00, 0x01}); }); session.SendAsync(cmd); _logger.WarnFormat("开始执行指令{0}-{1}-{2}", instruction.DeviceId, instruction.InstructionType.GetDisplayName(), ByteHelper.ConvertBytesToStringByHex(cmd)); } else { _logger.WarnFormat("发送指令失败,无效指令!{0}-{1}", instruction.DeviceId, instruction.InstructionType.GetDisplayName()); } }
/// <summary> /// 华宝A5断油断电指令 H5 /// </summary> /// <param name="session"></param> /// <param name="instruction"></param> public void HandleH5(AppSocketSession session, EInstruction instruction) { var deviceGpsCodeNoPrefix = session["DeviceGpsCodeNoPrefix"] as string; if (deviceGpsCodeNoPrefix == null) { _logger.WarnFormat("发送指令失败!车辆不在线!{0}-{1}", instruction.DeviceId, instruction.InstructionType.GetDisplayName()); } List<byte> content = new List<byte>(); switch (instruction.InstructionType) { case EnumInstructionType.BreakOilOrPower: content.Add(0x01);//正常断油 必须速度小于 20km/h //content.Add(0x05);//强制断油 break; case EnumInstructionType.RecoveryBreakOilOrPower: content.Add(0x00); break; } content.AddRange(ByteHelper.ConvertDateTimeToBytesByBcd(DateTime.Now.AddSeconds(5))); if (content.Count > 0) { var cmd = T808Common.CreateBytesPackage("A006", deviceGpsCodeNoPrefix, GetSerialNumber(), (bw) => { bw.Write(content.ToArray()); }); session.SendAsync(cmd); _logger.WarnFormat("开始执行指令{0}-{1}-{2}", instruction.DeviceId, instruction.InstructionType.GetDisplayName(), ByteHelper.ConvertBytesToStringByHex(cmd)); } else { _logger.WarnFormat("发送指令失败,无效指令!{0}-{1}", instruction.DeviceId, instruction.InstructionType.GetDisplayName()); } }
public override void OnData(IObjectContainer container,AppSocketSession session, AppSocketData data) { try { container.Resolve<IRawDataService>().Log(session, ByteHelper.ConvertBytesToStringByHex(data.RawData, ",")); } catch (Exception ex) { container.Resolve<ILogger>().Error("记录原始数据错误", ex); } }
public override void OnData(IObjectContainer container,AppSocketSession session, AppSocketData data) { try { container.Resolve<IRawDataService>().Log(session, Encoding.UTF8.GetString(data.RawData)); } catch (Exception ex) { container.Resolve<ILogger>().Error("记录原始数据错误", ex); } }
public void Log(AppSocketSession session, string data) { if (!data.HasValue() || session == null) { return; } _buffer.Add(new RawData() { Path = GetSavePath(session), CreateTime = DateTime.Now, Data = string.Format("{0}---{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), data) }); }
private string GetSavePath(AppSocketSession session) { var deviceGpsCode = session["DeviceGpsCode"] as string; var name = deviceGpsCode.HasValue() ? deviceGpsCode + ".log" : "others.log"; var path = Path.Combine(_path, DateTime.Now.ToString("yyyy-MM-dd")); try { if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } } catch { _path = @"C:\log\raw"; path = Path.Combine(_path, DateTime.Now.ToString("yyyy-MM-dd")); } return Path.Combine(path, name); }
public void Handle(AppSocketSession session, EInstruction instruction) { var deviceGpsCodeNoPrefix = session["DeviceGpsCodeNoPrefix"] as string; if (deviceGpsCodeNoPrefix == null) { _logger.WarnFormat("发送指令失败!车辆不在线!{0}-{1}", instruction.DeviceId, instruction.InstructionType.GetDisplayName()); } var cmd = new List<string>(); switch (instruction.InstructionType) { case EnumInstructionType.BreakOilOrPower: cmd.Add("#1:{0}:1:*".GetFormat(deviceGpsCodeNoPrefix)); cmd.Add(ByteHelper.ConvertUInt32ToHexString(GetSerialNumber())); cmd.Add("CC"); cmd.Add(ByteHelper.ConvertDateToHexString(DateTime.Now)); cmd.Add(ByteHelper.ConvertTimeToHexString(DateTime.Now)); cmd.Add("Y1L1#"); session.SendAsync(Encoding.UTF8.GetBytes(string.Join(",", cmd))); break; case EnumInstructionType.RecoveryBreakOilOrPower: cmd.Add("#1:{0}:1:*".GetFormat(deviceGpsCodeNoPrefix)); cmd.Add(ByteHelper.ConvertUInt32ToHexString(GetSerialNumber())); cmd.Add("CC"); cmd.Add(ByteHelper.ConvertDateToHexString(DateTime.Now)); cmd.Add(ByteHelper.ConvertTimeToHexString(DateTime.Now)); cmd.Add("Y2L2#"); break; } if (cmd.Count > 0) { session.SendAsync(Encoding.UTF8.GetBytes(string.Join(",", cmd))); _logger.WarnFormat("开始执行指令{0}-{1}-{2}", instruction.DeviceId,instruction.InstructionType.GetDisplayName(), string.Join(",", cmd)); } else { _logger.WarnFormat("发送指令失败,无效指令!{0}-{1}", instruction.DeviceId, instruction.InstructionType.GetDisplayName()); } }
public override void OnData(IObjectContainer container,AppSocketSession session, AppSocketData data) { try { var log = string.Empty; if (data.RawData[0] == 0x2a) { log = Encoding.ASCII.GetString(data.RawData); } else { log = ByteHelper.ConvertBytesToStringByHex(data.RawData, ","); } container.Resolve<IRawDataService>().Log(session, log); } catch (Exception ex) { container.Resolve<ILogger>().Error("记录原始数据错误", ex); } }
public void Handle(AppSocketSession session, EInstruction instruction) { //开油:*HQ,0000,S20,095517,1,0# //断油:*HQ,0000,S20,095517,1,1#" var deviceGpsCodeNoPrefix = session["DeviceGpsCodeNoPrefix"] as string; if (deviceGpsCodeNoPrefix == null) { _logger.WarnFormat("发送指令失败!车辆不在线!{0}-{1}", instruction.DeviceId, instruction.InstructionType.GetDisplayName()); } var cmd = $"*HQ,0000,S20,{DateTime.Now.ToString("HHmmss")},1,{(instruction.InstructionType==EnumInstructionType.BreakOilOrPower ? "1" : "0")}#"; if (cmd.Length > 0) { session.SendAsync(Encoding.ASCII.GetBytes(string.Join(",", cmd))); _logger.WarnFormat("开始执行指令{0}-{1}-{2}", instruction.DeviceId, instruction.InstructionType.GetDisplayName(), string.Join(",", cmd)); } else { _logger.WarnFormat("发送指令失败,无效指令!{0}-{1}", instruction.DeviceId, instruction.InstructionType.GetDisplayName()); } }
public virtual void Handle(AppSocketSession session,AppSocketData data) { _socketProtocol.Excute(session, data); }
protected virtual void OnNewAppSession(NewAppSessionArgs newAppSessionArgs) { try { AppSocketSession session = new AppSocketSession(newAppSessionArgs); session.Closed += OnCloseSession; _socketSessionManager.Add(session); _logger.DebugFormat("创建Session[{0}]成功!", session.Id); _logger.DebugFormat("当前Session数{0}!", _socketSessionManager.Count); } catch (Exception ex) { _logger.Error(ex); } }
public void Handle(AppSocketSession session, EInstruction instruction) { }
public void Handle(AppSocketSession session, EInstruction instruction) { var deviceGpsTypeName = session["DeviceGpsTypeName"] as string; if(!deviceGpsTypeName.HasValue()) return; switch (deviceGpsTypeName) { case "H1"://沃达孚 HandleH1(session,instruction); break; case "H5"://华宝A5 HandleH5(session, instruction); break; } }
protected virtual void BeginConnectAsync(SocketAsyncEventArgs socketAsyncEventArgs) { try { if (socketAsyncEventArgs.SocketError == SocketError.Success) { _session = new AppSocketSession(new NewAppSessionArgs(socketAsyncEventArgs)); _isConnect = true; _autoReset.Set(); OnConnecting(new ConnectArgs(true)); byte[] data = new byte[4098]; socketAsyncEventArgs.SetBuffer(data, 0, data.Length); if (!_socket.ReceiveAsync(socketAsyncEventArgs)) { BeginReceiveAsync(socketAsyncEventArgs); } } else { _isConnect = false; _autoReset.Set(); OnConnecting(new ConnectArgs(false)); } } catch (Exception ex) { _logger.Error(ex); } }
public CloseSessionArgs(AppSocketSession session) { Session = session; }
public ReceivedDataArgs(AppSocketSession session, byte[] rawData) { Session = session; RawData = rawData; }
public DisConnectArgs(AppSocketSession session) { Session = session; }
public virtual void Add(AppSocketSession session) { _sesstions.TryAdd(session.Id, session); }