示例#1
0
        /// <summary>生成动态匿名调用内部方法(参数由TArg转为实际类型后调用,并将调用返回值转为TRes)</summary>
        public ApiFunc CreateMethod()
        {
            var dynamicMethod = new DynamicMethod($"{Method.Name}_{RandomCode.Generate(6)}"
                                                  , typeof(object), new[]
            {
                typeof(IInlineMessage),
                typeof(ISerializeProxy),
                typeof(object)
            });

            ilGenerator = dynamicMethod.GetILGenerator();

            //如果修补操作码,则填充空间。 尽管可能消耗处理周期,但未执行任何有意义的操作。
            ilGenerator.Emit(OpCodes.Nop);
            //构造
            Ctor();
            //构造属性
            Properties();
            //调用方法 controler.Api();
            Call();
            //对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。
            Result();

            return(dynamicMethod.CreateDelegate(typeof(ApiFunc)) as ApiFunc);
        }
示例#2
0
        public Test_RandomCode()
        {
            Console.WriteLine("HighLowLetterAndNumberAndSymbol:");
            Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.HighLowLetterAndNumberAndSymbol));
            Console.WriteLine("HighLowLetterAndNumber:");
            Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.HighLowLetterAndNumber));
            Console.WriteLine("HighLetterAndNumber:");
            Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.HighLetterAndNumber));
            Console.WriteLine("HighLetter:");
            Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.HighLetter));
            Console.WriteLine("Number:");
            Console.WriteLine(RandomCode.Generate(32, RandomCode.RandomCodeType.Number));

            Console.WriteLine("Guid[no line]:");
            Console.WriteLine(RandomCode.GenerateGuid(false));
            Console.WriteLine("Guid:");
            Console.WriteLine(RandomCode.GenerateGuid(true));
        }
示例#3
0
        /// <summary>
        /// 这个类相对较为简单
        /// 没有太多的逻辑 都是相对单一的功能静态类或者单例
        /// </summary>
        public Test_Utils()
        {
            // 读取配置 默认和读取程序名一样配置文件 比如此程序生成为Sample.exe那么读取对应的是Sample.exe.config文件
            // 一般来说使用vs2019开发 只需要在新建一个和程序集名称一模一样的.config配置文件即可
            // 注意此函数不支持读取其他文件 此demo已经创建了配置文件详见项目 Sample.config
            // 本类设计初只能读取两层 具体结构可以参照样例
            // 此处读取第一层配置数据
            string test = AppConfig.Read("test");

            Console.WriteLine($"test{test}");
            // 此处读取第二层配置数据
            string test2 = AppConfig.Read("testgroup", "test2");

            Console.WriteLine($"test2{test2}");

            // 获取有效字节
            // 此判定依据是在某索引位为0开始 往后4位皆为0 则认为后续数据无效实现
            // 所以这里的设定还是要看具体情况来 不一定适用所有情况
            // ByteHelper.GetValidLength 则是直接获取长度大小 而非返回数据
            byte[] bytes = ByteHelper.GetValidByte(new byte[] { 1, 2, 3, 4, 0, 0, 0 });
            Console.WriteLine($"bytes len:{bytes.Length}");

            // 随机生成指定位数的字符串
            // 字符串将有数字与大小写字母组成
            string code = RandomCode.Generate(32);

            Console.WriteLine($"code:{code}");

            // md5的封装
            string md5Str = MD5.Encrypt("helloworld");

            Console.WriteLine($"helloworld:{md5Str}");

            // 获取此框架的版本信息
            string versionStr = ES.Common.Utils.Version.ToString();

            Console.WriteLine($"es version:{versionStr}");
        }
示例#4
0
        /// <summary>
        /// 同步运行状态
        /// </summary>
        /// <returns></returns>
        Task <bool> IMessageReceiver.LoopBegin()
        {
            ConcurrencySemaphore = new SemaphoreSlim(RabbitMQOption.Instance.Concurrency, RabbitMQOption.Instance.Concurrency);
            cancellationToken    = new CancellationTokenSource();
            if (!RabbitMQOption.Instance.ItemOptions.TryGetValue(Service.ServiceName, out Option))
            {
                Option = new RabbitMQItemOption();
            }
            try
            {
                IConnectionFactory conFactory = new ConnectionFactory //创建连接工厂对象
                {
                    HostName = RabbitMQOption.Instance.HostName,      //IP地址
                    Port     = RabbitMQOption.Instance.Port,          //端口号
                    UserName = RabbitMQOption.Instance.UserName,      //用户账号
                    Password = RabbitMQOption.Instance.Password       //用户密码
                };
                connection = conFactory.CreateConnection();           //创建连接对象

                channel = connection.CreateModel();                   //创建连接会话对象

                switch (Option.WrokType)
                {
                case RabbitMQWrokType.Fanout:
                {
                    //声明交换机
                    channel.ExchangeDeclare(exchange: Option.ExchangeName, type: "fanout");
                    var name = $"{Option.ExchangeName}_{RandomCode.Generate(6)}";
                    //声明队列
                    channel.QueueDeclare(
                        queue: name,                  //消息队列名称
                        durable: Option.Durable,      //是否缓存
                        exclusive: Option.Exclusive,
                        autoDelete: Option.AutoDelete,
                        arguments: null);

                    //将队列与交换机进行绑定
                    channel.QueueBind(queue: name, exchange: Option.ExchangeName, routingKey: "");
                }
                break;

                case RabbitMQWrokType.Direct:
                {
                    //声明交换机
                    channel.ExchangeDeclare(exchange: Option.ExchangeName, type: "direct");
                    var name = $"{Option.ExchangeName}_{RandomCode.Generate(6)}";
                    //声明队列
                    channel.QueueDeclare(
                        queue: name,                  //消息队列名称
                        durable: Option.Durable,      //是否缓存
                        exclusive: Option.Exclusive,
                        autoDelete: Option.AutoDelete,
                        arguments: null);
                    //匹配多个路由
                    channel.QueueBind(queue: name, exchange: Option.ExchangeName, routingKey: Service.ServiceName);
                    break;
                }

                case RabbitMQWrokType.Topic:
                {
                    //声明交换机
                    channel.ExchangeDeclare(exchange: Option.ExchangeName, type: "topic");
                    var name = $"{Option.ExchangeName}_{RandomCode.Generate(6)}";
                    //声明队列
                    channel.QueueDeclare(
                        queue: name,                  //消息队列名称
                        durable: Option.Durable,      //是否缓存
                        exclusive: Option.Exclusive,
                        autoDelete: Option.AutoDelete,
                        arguments: null);
                    //匹配多个路由
                    channel.QueueBind(queue: name, exchange: Option.ExchangeName, routingKey: Service.ServiceName);
                }
                break;

                default:
                    //声明队列
                    channel.QueueDeclare(
                        queue: Service.ServiceName,           //消息队列名称
                        durable: Option.Durable,              //是否缓存
                        exclusive: Option.Exclusive,
                        autoDelete: Option.AutoDelete,
                        arguments: null);
                    break;
                }
                if (Option.Qos > 0)
                {
                    channel.BasicQos(0, Option.Qos, false);//告诉Rabbit每次只能向消费者发送一条信息,再消费者未确认之前,不再向他发送信息
                }
            }
            catch (Exception ex)
            {
                Logger.Exception(ex);
            }

            return(Task.FromResult(true));
        }