public static bool Save(ReceivedPacketEntity entity) { bool result; try { lock (locker) { if (!File.Exists(DatabaseFile)) { if (!Directory.Exists(DatabaseDirectory)) { Directory.CreateDirectory(DatabaseDirectory); } CreateDatabase(); } using (var connection = CreateConnection()) { connection.Open(); var query = @"INSERT INTO ReceivedPackets(ReceivedOn, TerminalId, ProtocolHeader, Data, Status) VALUES(@ReceivedOn, @TerminalId, @ProtocolHeader, @Data, @Status); SELECT last_insert_rowid();"; entity.Id = connection.Query <long>(query, entity).First(); } } result = true; } catch (Exception ex) { result = false; } return(result); }
protected override void ChannelRead0(IChannelHandlerContext context, string message) { string methodName = nameof(ChannelRead0); Log?.Verbose(className, methodName, string.Format("{0}: [{1}]", context.Channel, message)); try { var info = ChannelManager.Instance.FindChannelInfo(context); if (info != null) { string filter = string.Empty; int filterLenght = 3; if (!string.IsNullOrEmpty(message)) { if (message.Length > filterLenght) { filter = message.Substring(message.Length - filterLenght, filterLenght); if (!filter.Contains(">")) { Log?.Warning(className, methodName, string.Format("Partial Packet Received {0}: [{1}]", context.Channel, message)); info.MessageBuffer.Append(message); info.PartialPacket = true; return; } else { info.MessageBuffer.Append(message); message = info.MessageBuffer.ToString(); info.MessageBuffer.Clear(); if (info.PartialPacket) { Log?.Warning(className, methodName, string.Format("Merging Partial Packets {0}: [{1}]", context.Channel, message)); } info.PartialPacket = false; } } else { info.MessageBuffer.Append(message); info.PartialPacket = false; message = info.MessageBuffer.ToString(); info.MessageBuffer.Clear(); Log?.Warning(className, methodName, string.Format("Merging Partial Packets {0}: [{1}]", context.Channel, message)); } } } string key = string.Empty; var result = ParsingManager.FirstLevelParser(message); if (result != null) { if (!result.Data.Equals(TerminalHelper.PONG)) { int logLevel = (int)WebApiServerConfigurationManager.Instance.Configurations.LogLevel; if (logLevel >= (int)Component.Logging.Models.LogLevel.Debug) { ReceivedPacketEntity entity = new ReceivedPacketEntity { ReceivedOn = result.ReceivedOn, Data = result.Data, ProtocolHeader = result.ProtocolHeader, TerminalId = result.TerminalId }; //ReceivedPacketRepository.Save(entity); Logging.Logger.Instance.Log.Write(JsonConvert.SerializeObject(entity)); } var protocol = ProtocolList.Instance.Find(result.ProtocolHeader); if (protocol != null) { if (protocol.ProtocolType == ProtocolType.Monitoring) { var packet = ParsingManager.SecondLevelParser(result); if (packet != null) { var json = JsonConvert.SerializeObject(packet, Formatting.None); ChannelManager.Instance.UpdateChannelInfo(context, result.TerminalId); Console.WriteLine(json); if (!string.IsNullOrEmpty(json)) { PushToServer(packet); } } } else if (protocol.ProtocolType == ProtocolType.Control) { if (protocol.DeviceType == DeviceType.Saltec) { ChannelHandler.TerminalCommandReceived(new TerminalCommandReceivedEventArgs { ChannelKey = result.TerminalId, Message = message }); } else if (protocol.DeviceType == DeviceType.Modbus) { //string.Format("{0}<{1}({2})>\r", packet.TerminalId, packet.ProtocolHeader, packet.Data); ChannelHandler.TerminalCommandReceived(new TerminalCommandReceivedEventArgs { ChannelKey = result.TerminalId, Message = string.Format("{0}<{1}({2})>\r", result.TerminalId, result.ProtocolHeader, result.Data) }); } } } } } } catch (Exception ex) { Log?.Error(className, methodName, ex.ToString()); } }