using RabbitMQ.Client;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RabbitMqTest
{
    public abstract class RabbitmqBase
    {
        /// <summary>
        /// 创建通道
        /// </summary>
        /// <returns></returns>
        protected virtual IModel GetChannel() {
            var factory = new ConnectionFactory { HostName="localhost" };
            var connection = factory.CreateConnection();
            return connection.CreateModel();
        }

        private static string MessageChars = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>''""";
        /// <summary>
        /// 生成随机消息
        /// </summary>
        protected virtual string RandomString(int len = 10) {
            var random = new Random();
            int charslen = MessageChars.Length;
            StringBuilder sb = new(len);
            for(int i = 0;i<len;i++) {
                var ci = random.Next(0,charslen-1);
                sb.Append(MessageChars[ci]);
            }
            return sb.ToString();
        }

        /// <summary>
        /// 生成随机消息字节数组
        /// </summary>
        /// <param name="len"></param>
        /// <returns></returns>
        protected virtual Byte[] RandomMsgBytes(int len = 10) {
            var str = RandomString(len);
            return Encoding.UTF8.GetBytes(str);
        }

        /// <summary>
        /// 创建队列
        /// </summary>
        protected virtual void QueueDeclare(IModel channel,string queueName) {
            channel.QueueDeclare(queueName,exclusive: false);
        }

        /// <summary>
        /// 创建交换机
        /// </summary>
        protected virtual void ExchangeDeclare(IModel channel,string exchangeName) {
            channel.ExchangeDeclare(exchangeName,ExchangeType.Fanout,autoDelete: true);
        }

    }
}