Ejemplo n.º 1
0
        public void SynchronizeTerminals()
        {
            var channels = Channels.Keys.ToArray();

            Console.WriteLine("SynchronizeTerminals. Channel Count: {0}", channels.Length);
            try
            {
                foreach (var channel in channels)
                {
                    try
                    {
                        bool result = Channels.TryGetValue(channel, out ChannelInfo info);
                        Console.WriteLine("Channel Key: {0}", info.ChannelKey);
                        if (result)
                        {
                            var kickInterval = DateTimeHelper.CurrentUniversalTime
                                               .AddSeconds(-(ServerChannelConfigurationManager.Instance
                                                             .Configurations.KickIntervalInSeconds));

                            if (kickInterval > info.LastDataReceived && kickInterval > info.ConnectedOn)
                            {
                                RemoveChannel(channel);
                            }
                            else
                            {
                                var pingInterval = DateTimeHelper.CurrentUniversalTime
                                                   .AddSeconds(-(ServerChannelConfigurationManager.Instance
                                                                 .Configurations.PingIntervalInSeconds));
                                if (pingInterval > info.LastSynchronized)
                                {
                                    channel.WriteAndFlushAsync(TerminalHelper.TimeSync());
                                    info.LastSynchronized = DateTimeHelper.CurrentUniversalTime;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public override void ChannelActive(IChannelHandlerContext context)
        {
            string methodName = nameof(ChannelActive);

            try
            {
                base.ChannelActive(context);
                context.WriteAndFlushAsync(TerminalHelper.TimeSync());
                var info = ChannelManager.Instance.AddChannel(context);
                if (info == null)
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                Log?.Error(className, methodName, ex.ToString());
            }
        }