示例#1
0
        private void ProcessStart()
        {
            Task.Run(() =>
            {
                double indexTime = _startTimeStamp;

                Package pkg = new Package()
                {
                    time = indexTime,
                };

                while (true)
                {
                    if (_queue.Count == 0)
                    {
                        var t = DateTime.UtcNow.TotalSeconds();

                        // 向下取整
                        if (t - indexTime > _intervalTime)
                        {
                            do
                            {
                                if (_flagStop)
                                {
                                    return(null);
                                }
                                _writer.Append(pkg);

                                // Core 中不应该有直接输出
                                //Logger.Info.WriteLine("Pkg_Count: " + pkg.MsgCount
                                //                    + " Compress_Rate: " + (pkg.codedLength * 100.0 / (pkg.originLength == 0 ? -pkg.codedLength : pkg.originLength)).ToString("f2") + "%"
                                //                    + " Pkg_Time: " + pkg.time);
                                _infos.Enqueue(new ReplayInfo()
                                {
                                    time         = DateTime.UtcNow,
                                    count        = pkg.MsgCount,
                                    codedLength  = pkg.codedLength,
                                    originLength = pkg.originLength,
                                    pkgTime      = pkg.time
                                });

                                indexTime += _intervalTime;

                                //pkg = new Package()
                                //{
                                //    time = indexTime,
                                //};
                                pkg.time = indexTime;
                                pkg.Clear();
                            }while (indexTime + _intervalTime < t);
                        }

                        SleepHelper.Delay(1);

                        continue;
                    }

                    _queue.TryDequeue(out Message item);

                    // 向下取整
                    if (item.header.time - indexTime > _intervalTime)
                    {
                        do
                        {
                            if (_flagStop)
                            {
                                return(null);
                            }
                            _writer.Append(pkg);

                            // Core 中不应该有直接输出
                            //Logger.Info.WriteLine("Pkg_Count: " + pkg.MsgCount
                            //                    + " Compress_Rate: " + (pkg.codedLength * 100.0 / (pkg.originLength == 0 ? -pkg.codedLength : pkg.originLength)).ToString("f2") + "%"
                            //                    + " Pkg_Time: " + pkg.time);
                            _infos.Enqueue(new ReplayInfo()
                            {
                                time         = DateTime.UtcNow,
                                count        = pkg.MsgCount,
                                codedLength  = pkg.codedLength,
                                originLength = pkg.originLength,
                                pkgTime      = pkg.time
                            });

                            indexTime += _intervalTime;

                            //pkg = new Package()
                            //{
                            //    time = indexTime,
                            //};
                            pkg.time = indexTime;
                            pkg.Clear();
                        }while (indexTime + _intervalTime < item.header.time);
                    }

                    pkg.Add(item);
                }
            });
        }