예제 #1
0
        private CamoranProducer CreateAndInitialProducer(string topic, byte[] sendBody, Action <ProducerResponse> callback)
        {
            CamoranProducer producer = produerTestcase
                                       .CreateProducer()
                                       .BindTopic(topic)
                                       .SetBody(sendBody)
                                       .BindSendCallBack(callback);

            return(producer);
        }
예제 #2
0
        public CamoranProducer CreateProducer()
        {
            ClientConfig config = new ClientConfig {
                Address = _address, Port = _port
            };
            var producerId = Guid.NewGuid();
            var inner      = new Client_byHelios <ProducerRequest, ProducerResponse>(producerId, config);
            var producer   = new CamoranProducer(producerId, config, inner);

            return(producer);
        }
예제 #3
0
        public void Multi_Sender_Send_WhenMulit_Consumers()
        {
            //this.produerTestcase.Start_Producer_Whole_Action_Mulit_Producers();

            List <CamoranProducer> ls = new List <CamoranProducer>();

            for (int i = 0; i < 2; i++)
            {
                byte[]          sendBody = Encoding.UTF8.GetBytes(sendString);
                CamoranProducer producer = null;
                producer = this.CreateAndInitialProducer
                           (
                    topic,
                    sendBody,
                    (response) =>
                {
                    sendCount++;
                    Console.WriteLine("sendCount:" + sendCount);
                    //Thread.Sleep(100);
                    isConsumeOver = sendCount >= TestConfig.Producer_Send_Count;
                    if (isConsumeOver)
                    {
                        producer.Stop();
                        producer.Close();
                    }
                }
                           );
                producer.ConnectToServer();
                producer.Start();
            }

            Parallel.For(0, TestConfig.consumerCount, (i) =>
            {
                i = Interlocked.Increment(ref i);

                var consumer = this.CreateAndInitialConsumer
                               (
                    consumerTestcase.Guids[i--],
                    topic,
                    null,
                    (response) =>
                {
                    consumeCount++;
                    Console.WriteLine("consumer id:" + response.SenderId + "consumeCount:" + consumeCount);
                }
                               );
                consumer.ConnectToServer();
                consumer.Start();
            });

            Console.Read();
        }
예제 #4
0
        public void Single_Sender_Send_Message_with_Single_Consmer()
        {
            byte[]          sendBody = Encoding.UTF8.GetBytes(sendString);
            CamoranProducer producer = null;
            CamoranConsumer consumer = null;

            producer = produerTestcase
                       .CreateProducer()
                       .BindTopic(topic)
                       .SetBody(sendBody)
                       .BindSendCallBack((response) =>
            {
                sendCount++;
                Debug.WriteLine("sendCount:" + sendCount);
                isSendOver = sendCount == TestConfig.Producer_Send_Count;
                if (isSendOver)
                {
                    producer.Stop();
                    producer.Close();
                }
            });
            ;


            consumer = consumerTestcase.CreateConsumer(Guid.NewGuid())
                       .SubscribeTopic(topic)
                       .RegisteConsumeAction((response) =>
            {
                consumeCount++;
                Debug.WriteLine("ConsumeCount:" + consumeCount);
                isConsumeOver = consumeCount >= TestConfig.Producer_Send_Count;
                if (isConsumeOver)
                {
                    consumer.Stop();
                    consumer.Close();
                }
                receiveString = Encoding.UTF8.GetString(response.QueueMeesageBody);
            });
            ;

            producer.Start();
            consumer.Start();

            //producer.Close();
            //producer.Stop();
            Assert.IsTrue(isConsumeOver);

            Assert.AreEqual(sendString, receiveString);
        }
예제 #5
0
        public void Single_Sender_Send_Message_With_Multi_Conumsers()
        {
            byte[]          sendBody  = Encoding.UTF8.GetBytes(sendString);
            int             sendCount = 1;
            CamoranProducer producer  = null;

            producer = this.CreateAndInitialProducer
                       (
                topic,
                sendBody,
                (response) =>
            {
                sendCount++;
                Console.WriteLine("sendCount:" + sendCount);
                //Thread.Sleep(100);
                isConsumeOver = sendCount >= TestConfig.Producer_Send_Count;
                if (isConsumeOver)
                {
                    producer.Stop();
                    producer.Close();
                }
            }
                       );
            producer.Start();
            //while (!isConsumeOver) { }
            Parallel.For(0, TestConfig.consumerCount, (i) =>
            {
                i            = Interlocked.Increment(ref i);
                var consumer = this.CreateAndInitialConsumer
                               (
                    consumerTestcase.Guids[i--],
                    topic,
                    null,
                    (response) =>
                {
                    consumeCount++;
                    Console.WriteLine("consumer id:" + response.SenderId + "consumeCount:" + consumeCount);
                    // Thread.Sleep(100);
                }
                               );

                consumer.Start();
            });
            Console.Read();
        }
예제 #6
0
 public void SubscribeProducer(string topic, CamoranProducer producer)
 {
     producer.BindTopic(topic);
     this.ProducerManger.AddClient(topic, producer);
 }