Exemple #1
0
        /// <summary>获取代理客户端</summary>
        /// <param name="name"></param>
        /// <returns></returns>
        protected BrokerClient GetBroker(String name)
        {
            if (_Brokers.TryGetValue(name, out var client))
            {
                return(client);
            }

            var bk = Brokers?.FirstOrDefault(e => name == null || e.Name == name);

            if (bk == null)
            {
                return(null);
            }

            // 实例化客户端
            client = new BrokerClient(bk.Addresses)
            {
                Id     = ClientId,
                Name   = bk.Name,
                Config = this,
                Log    = Log,
            };

            // 尝试添加
            var client2 = _Brokers.GetOrAdd(name, client);

            if (client2 != client)
            {
                return(client2);
            }

            client.Start();

            return(client);
        }
Exemple #2
0
        public string Pop(string topicName)
        {
            var broker = Brokers.FirstOrDefault(x => x.TopicName == topicName);

            if (broker == null)
            {
                return(null);
            }
            var msg = broker.GetMessage();

            return(msg);
        }
Exemple #3
0
        public void Push(string topicName, string message)
        {
            var broker = Brokers.FirstOrDefault(x => x.TopicName == topicName);

            if (broker is null)
            {
                broker = new Broker(topicName);
                Brokers.Add(broker);
            }

            broker.AddMessage(message);
            new Thread(() => MsgReceived(topicName, message))
            {
                IsBackground = true
            }.Start();
        }
Exemple #4
0
        /// <summary>获取代理客户端</summary>
        /// <param name="name"></param>
        /// <returns></returns>
        protected BrokerClient GetBroker(String name)
        {
            if (_Brokers.TryGetValue(name, out var client))
            {
                return(client);
            }

            var bk = Brokers?.FirstOrDefault(e => name == null || e.Name == name);

            if (bk == null)
            {
                return(null);
            }

            lock (_Brokers)
            {
                if (_Brokers.TryGetValue(name, out client))
                {
                    return(client);
                }

                // 实例化客户端
                client = new BrokerClient(bk.Addresses)
                {
                    Id     = ClientId,
                    Name   = bk.Name,
                    Config = this,
                    Log    = Log,
                };

                client.Received += (s, e) =>
                {
                    e.Arg = OnReceive(e.Arg);
                };

                client.Start();

                // 尝试添加
                _Brokers.TryAdd(name, client);

                return(client);
            }
        }