public void Setup()
        {
            pocoList.Clear();
            protoList.Clear();
            var formatter = new BinaryFormatter();

            for (int i = 0; i < ArrSize; ++i)
            {
                int    intData = random.Next(int.MaxValue);
                string strData = RandomString(ObjSize);
                var    doubles = Enumerable.Range(0, ObjSize).Select(_ => random.NextDouble()).ToList();

                var poco = new POCOClass {
                    IntegerData = intData, StringData = strData, DoubleArr = doubles.ToList()
                };
                var proto = new ProtoClass {
                    IntegerData = intData, StringData = strData, DoubleArr = { doubles }
                };

                using var stream = new MemoryStream();
                formatter.Serialize(stream, poco);
                pocoList.Add(stream.ToArray());

                protoList.Add(proto.ToByteArray());
            }
        }
        public List <ProtoClass> ProtocolBuffersD12on()
        {
            var result = new List <ProtoClass>();

            foreach (var inst in protoList)
            {
                var proto = new ProtoClass();
                proto.MergeFrom(inst);
                result.Add(proto);
            }
            return(result);
        }
        public void LoadConfig(string path)
        {
            StreamReader sr     = new StreamReader(path);
            var          config = (JObject)JsonConvert.DeserializeObject(sr.ReadToEnd());

            sr.Close();

            JToken token;

            if (config.TryGetValue("AGVConfig", out token))
            {
                ISerialize serialize = new ProtoClass();
                foreach (JObject t in token.Values())
                {
                    try
                    {
                        IPort port = new TcpPort(t.Value <string>("port"));
                        //var test = $"HuiJinYun.Domain.Entity.Device.{t.Value<string>("type")}AGV<TState, TPosition>";
                        Type type = Type.GetType($"HuiJinYun.Domain.Entity.Device.{t.Value<string>("type")}AGV`2");
                        type = type.MakeGenericType(typeof(eHuiJinYunAGVState), typeof(eHuiJinYunStagePosition));
                        object[] @params = new object[] { port, serialize };
                        @params = @params.Concat(buildParams(type, t.Value <JObject>("options"))).ToArray <object>();
                        var agv = (IAGV <eHuiJinYunAGVState, eHuiJinYunStagePosition>)Activator.CreateInstance(type, @params);
                        AGVs.Add(agv);
                    }
                    catch
                    {
                        continue;
                    }
                }
            }
            if (config.TryGetValue("DeviceConfig", out token))
            {
                ISerialize serialize = new ProtoClass();
                foreach (JObject t in token.Values())
                {
                    try
                    {
                        var  port   = PortFactory.NewPort(t.Value <string>("port"));
                        Type type   = Type.GetType($"HuiJinYun.Domain.Entity.Device.{t.Value<string>("type")}Device");
                        var  device = (PlcDeviceBase)Activator.CreateInstance(type, port, serialize);
                        Devices.Add(((JProperty)t.Parent).Name, device);
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }
                }
            }
            if (config.TryGetValue("StageConfig", out token))
            {
                foreach (var t in token.Values())
                {
                    try
                    {
                        List <IDevice> deviceList = new List <IDevice>();
                        foreach (var d in t["Device"].Values <string>())
                        {
                            deviceList.Add(Devices[d]);
                        }

                        Type type  = Type.GetType($"HuiJinYun.Domain.Entity.{((JProperty)t.Parent).Name}Stage");
                        var  stage = (IProductionStage)Activator.CreateInstance(type, deviceList.ToArray());
                        Stages.Add(stage);
                    }
                    catch (Exception ex)
                    {
                        continue;
                    }
                }
            }

            object[] buildParams(Type type, JObject joParams)
            {
                if (null == joParams)
                {
                    return(new object[0]);
                }
                else
                {
                    object[]         @params  = new object[joParams.Count];
                    List <JProperty> jpParams = new List <JProperty>(joParams.Properties());
                    for (var i = 0; i < jpParams.Count; i++)
                    {
                        @params[i] = jpParams[i].Value.Value <string>();
                    }
                    return(@params);
                }
            }
        }