예제 #1
0
        /// <summary>
        /// 消息队列 客户端消费者
        /// </summary>
        /// <param name="client">TCP 客户端</param>
        /// <param name="config">队列数据 读取配置</param>
        /// <param name="log">日志处理</param>
        /// <param name="readerIndexNode"></param>
        protected QueueConsumer(MasterServer.TcpInternalClient client, Config.QueueConsumer config, AutoCSer.Log.ILog log, DataStructure.Abstract.Node readerIndexNode)
        {
            if (client == null)
            {
                throw new InvalidOperationException();
            }
            this.client = client;
            if (config == null)
            {
                Config = defaultConfig;
            }
            else
            {
                config.Format();
                Config = config;
            }
            Log = log ?? client._TcpClient_.Log;

            getDequeueIdentityNode = new DataStructure.Parameter.QueryOnly(readerIndexNode, OperationParameter.OperationType.MessageQueueGetDequeueIdentity);
            getDequeueIdentityNode.Parameter.SetJson(Config);
            getMessageNode         = new DataStructure.Parameter.QueryOnly(readerIndexNode, OperationParameter.OperationType.MessageQueueDequeue);
            setDequeueIdentityNode = new DataStructure.Parameter.QueryOnly(readerIndexNode, OperationParameter.OperationType.MessageQueueSetDequeueIdentity);
        }
예제 #2
0
 /// <summary>
 /// 多消费者消息队列 客户端消费者
 /// </summary>
 /// <param name="messageQueue">队列消费节点</param>
 /// <param name="onMessage">消息处理委托</param>
 /// <param name="config">队列数据 读取配置</param>
 /// <param name="readerIndex">读取编号</param>
 /// <param name="log">日志处理</param>
 public QueueConsumer(DataStructure.MessageQueue.QueueConsumers <valueType> messageQueue, Action <valueType> onMessage, Config.QueueConsumer config, IConvertible readerIndex, AutoCSer.Log.ILog log = null) : this(messageQueue, onMessage, config, readerIndex.ToInt32(null), log)
 {
 }
예제 #3
0
 /// <summary>
 /// 多消费者消息队列 客户端消费者
 /// </summary>
 /// <param name="messageQueue">队列消费节点</param>
 /// <param name="onMessage">消息处理委托</param>
 /// <param name="config">队列数据 读取配置</param>
 /// <param name="readerIndex">读取编号</param>
 /// <param name="log">日志处理</param>
 public QueueConsumer(DataStructure.MessageQueue.QueueConsumers <valueType> messageQueue, Action <valueType> onMessage, Config.QueueConsumer config, int readerIndex, AutoCSer.Log.ILog log = null) : base(messageQueue, config, log, readerIndex)
 {
     if (onMessage == null)
     {
         throw new ArgumentNullException();
     }
     this.onMessage = onMessage;
     setCheckSocketVersion();
 }
 /// <summary>
 /// 消息队列 客户端消费者
 /// </summary>
 /// <param name="messageQueue">队列消费节点</param>
 /// <param name="onMessage">消息处理委托</param>
 /// <param name="config">队列数据 读取配置</param>
 /// <param name="log">日志处理</param>
 public QueueConsumerAsynchronous(DataStructure.MessageQueue.QueueConsumer <valueType> messageQueue, Action <valueType, Action> onMessage, Config.QueueConsumer config, AutoCSer.Log.ILog log = null) : base(messageQueue, config, log)
 {
     if (onMessage == null)
     {
         throw new ArgumentNullException();
     }
     OnMessage = onMessage;
     setCheckSocketVersion();
 }
예제 #5
0
 /// <summary>
 /// 消息队列 客户端消费者
 /// </summary>
 /// <param name="messageQueue">队列消费节点</param>
 /// <param name="onMessage">消息处理委托,直接在 Socket 接收数据的 IO 线程中处理以避免线程调度,适应于快速结束的非阻塞函数;需要知道的是这种模式下如果产生阻塞会造成 Socket 停止接收数据甚至死锁</param>
 /// <param name="config">队列数据 读取配置</param>
 /// <param name="log">日志处理</param>
 public QueueConsumerStream(DataStructure.MessageQueue.QueueConsumer <valueType> messageQueue, Action <valueType> onMessage, Config.QueueConsumer config, AutoCSer.Log.ILog log = null) : base(messageQueue.ClientDataStructure.Client.MasterClient, config, log, messageQueue)
 {
     if (onMessage == null)
     {
         throw new ArgumentNullException();
     }
     this.onMessage = onMessage;
     setCheckSocketVersion(onClientSocket);
 }