示例#1
0
        private void Replayer_Path_Click(object sender, RoutedEventArgs e)
        {
            string[] paths = null;
            System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
            openFileDialog.Filter = "*.lcl|*.lcl";
            if (openFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)//注意,此处一定要手动引入System.Window.Forms空间,否则你如果使用默认的DialogResult会发现没有OK属性
            {
                MessageBox.Show("Wrong Path!");
            }
            else
            {
                var p    = openFileDialog.FileName;
                var pf   = p.Remove(p.LastIndexOf('\\')) + "\\";
                var name = openFileDialog.SafeFileName;
                name = name.Remove(name.LastIndexOf('_'));

                Replayer_Replay_Params_Manager = new ParaJSON(pf + name + "_rPara.json");

                paths = System.IO.Directory.GetFiles(pf, name + "*.lcl");

                paths = paths.OrderBy(x =>
                {
                    var i = x.LastIndexOf("_") + 1;
                    var j = x.Length - ".lcl".Length;
                    var s = x.Substring(i, j - i);
                    return(int.Parse(s));
                }).ToArray();

                Replayer_Path.Content = "Path to File_0.LCL: " + pf;

                _replayer = new Core.ReplayCore(paths);

                var info = _replayer.FileInfo;

                // try to load params
                if (!Load_Replay_Params(info))
                {
                    // open a new file
                    Replayer_Map.Items.Clear();

                    foreach (var point in info.points)
                    {
                        Replayer_Map.Items.Add(new Replayer_Map_Item(Replayer_Map.Items.Count, point));
                    }
                }

                Replayer_Speed.SelectedItem = "1x";


                Replayer_Notes.Text     = info.notes;
                Replayer_Slider.Maximum = info.totalIndex;
            }
        }
示例#2
0
        static void LoadPara(string[] args)
        {
            if (args.Length % 2 != 0)
            {
                Logger.Error.WriteLine("Para Input Error!");
                return;
            }

            Dictionary <string, string> para = new Dictionary <string, string>();

            for (int i = 0; i < args.Length; i += 2)
            {
                para.Add(args[i], args[i + 1]);
            }

            // 不指定参数则尝试加载默认配置
            if (para.Count == 0)
            {
                para.Add("-t", "para.txt");
            }
            // 从配置文件中加载参数
            if (para.ContainsKey("-t"))
            {
                if (File.Exists(para["-t"]))
                {
                    var str = File.ReadAllText(para["-t"]);

                    List <string> buff = new List <string>();
                    args = File.ReadAllText(para["-t"]).Split(" ");
                    for (int i = 0; i < args.Length; i++)
                    {
                        // "\"" 内可能有" "
                        // 需要将其合并
                        if (args[i].Contains("\""))
                        {
                            for (int j = i + 1; j < args.Length; j++)
                            {
                                args[i] += " " + args[j];

                                if (args[j].Contains("\""))
                                {
                                    buff.Add(args[i].Trim('\"'));
                                    i = j;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            buff.Add(args[i]);
                        }
                    }

                    args = buff.ToArray();

                    for (int i = 0; i < args.Length; i += 2)
                    {
                        para.Add(args[i], args[i + 1]);
                    }
                }
                else
                {
                    Logger.Error.WriteLine("No Such ParaFile!");
                    return;
                }
            }

            string[] paths = null;
            // 加载单一文件
            if (para.ContainsKey("-f"))
            {
                if (File.Exists(para["-f"]) && para["-f"].EndsWith(".lcl"))
                {
                    paths = new string[] { para["-f"] };
                }
                else
                {
                    Logger.Error.WriteLine("No Such File!");
                    return;
                }
            }
            // 加载文件夹
            else if (para.ContainsKey("-p"))
            {
                if (Directory.Exists(para["-p"]))
                {
                    paths = Directory.GetFiles(para["-p"], "*.lcl");
                }
                else
                {
                    Logger.Error.WriteLine("No Such Path!");
                    return;
                }
            }
            else
            {
                Logger.Error.WriteLine("No File Path!");
                return;
            }


            // 加载映射关系
            var map = new Dictionary <IPEndPoint, IPEndPoint>();

            if (para.ContainsKey("-m"))
            {
                var ppp = para["-m"].Split(" ");

                foreach (var it in ppp)
                {
                    var pp = it.Split("=>");

                    ParseInputIpPort(pp[0], out string ipO, out ushort portO);
                    ParseInputIpPort(pp[1], out string ipM, out ushort portM);

                    map.Add(new IPEndPoint(IPAddress.Parse(ipO), portO), new IPEndPoint(IPAddress.Parse(ipM), portM));
                }
            }
            else
            {
                Logger.Error.WriteLine("No Map Para!");
            }

            UDPSender sender = new UDPSender();

            core = new Core.ReplayCore(paths);

            // 获取文件 info
            _fInfo = core.FileInfo;

            //Core.ReplayCore.DeleSendHandler sendHandler = (ReadOnlySpan<byte> bytes, IPEndPoint point) =>
            //{
            //    sender.Send(bytes.ToArray(), point);
            //};
            Core.ReplayCore.DeleSendHandler sendHandler = (Core.ReplayCore.SendInfo msg) =>
            {
                sender.Send(msg.bytes.ToArray(), msg.point);
            };
            Core.ReplayCore.DeleInfoHandler infoHandler = (Core.ReplayCore.ReplayInfo info) =>
            {
                Console.WriteLine(info.time + ": " + (100.0 * (double)info.index / ((double)_fInfo.totalIndex - 1)).ToString("f2") + "%" + " " + info.index + " " + info.pkgCostTime);
            };

            // 设置回放的 point map
            // 设置回放的 sendHandler 需要注意此处的委托只能做发送 需要尽可能快的返回
            // 设置回放的 infoHandler 此处是异步触发
            core.Initial(map, sendHandler, infoHandler);

            Logger.Info.WriteLine("TotalIndex: " + _fInfo.totalIndex
                                  + " StartTime: " + _fInfo.time
                                  + " TotalTime: " + _fInfo.totalIndex * _fInfo.timeInterval + "s");

            Logger.Info.WriteLine("Notes: " + _fInfo.notes);

            Logger.Info.WriteLine("Maps: ");
            foreach (var point in _fInfo.points)
            {
                if (map.ContainsKey(point))
                {
                    Logger.Info.WriteLine(point + " => " + map[point]);
                }
                else
                {
                    Logger.Info.WriteLine(point + " => ");
                }
            }
        }