Example #1
0
        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());
            }
        }