示例#1
0
        public void TC011_ReciveMessageIfWildcardSubscription()
        {
            string         errorThrown     = null;
            string         receivedMessage = "";
            AutoResetEvent resetEvent      = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = args.Message == null ? String.Empty : args.Message;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);

                // todo: vladi: if not testing agains an empty server, this subscription may fail
                natsClient.Subscribe("*", delegate(string msg, string reply, string subject)
                {
                    receivedMessage = msg;
                    resetEvent.Set();
                });

                natsClient.Publish("foo", null, "xxx");
                resetEvent.WaitOne(5000);
                natsClient.Close();
            }
            Assert.IsTrue(errorThrown == null, errorThrown);
            Assert.AreEqual(receivedMessage, "xxx");
        }
示例#2
0
        public void TC014_PublishCallback()
        {
            bool errorThrown = false;
            bool done        = false;

            AutoResetEvent resetEvent = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);


                natsClient.Publish("foo", delegate()
                {
                    done = true;
                    resetEvent.Set();
                });

                resetEvent.WaitOne(5000);
                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
            Assert.IsTrue(done);
        }
示例#3
0
        public void TC023_ReciveGiantMessageForSubscription()
        {
            bool           errorThrown     = false;
            string         receivedMessage = "";
            AutoResetEvent resetEvent      = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);

                natsClient.Subscribe("foo", delegate(string msg, string reply, string subject)
                {
                    receivedMessage = msg;
                    resetEvent.Set();
                });

                ASCIIEncoding ascii = new ASCIIEncoding();

                natsClient.Publish("foo", null, ascii.GetString(new byte[90000]));
                resetEvent.WaitOne(10000);
                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
            Assert.AreEqual(receivedMessage.Length, 90000);
        }
示例#4
0
        public void TC010_ReciveEmptyMessage()
        {
            bool           errorThrown     = false;
            string         receivedMessage = "xxx";
            AutoResetEvent resetEvent      = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);

                natsClient.Subscribe("foo", delegate(string msg, string reply, string subject)
                {
                    receivedMessage = msg;
                    resetEvent.Set();
                });

                natsClient.Publish("foo", null, "");
                resetEvent.WaitOne(5000);
                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
            Assert.AreEqual(receivedMessage, "");
        }
示例#5
0
        public void TC006_PublishNil()
        {
            bool           errorThrown = false;
            AutoResetEvent resetEvent  = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);

                // todo: vladi: check to see if nil in Ruby evaluates to boolean true
                natsClient.Publish(null);
                natsClient.Publish(null, null, "hello");

                resetEvent.WaitOne(5000);

                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
        }
示例#6
0
        public void TC005_PublishWithoudPayload()
        {
            bool           errorThrown = false;
            AutoResetEvent resetEvent  = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);

                natsClient.Publish("foo");
                natsClient.Publish("foo", null, "hello");
                natsClient.Publish("foo", null, "hello", "reply");

                resetEvent.WaitOne(5000);

                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
        }
示例#7
0
 public void TC001_StartStopClient()
 {
     using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
     {
         natsClient.Start(natsEndpoint);
         natsClient.Close();
     }
 }
示例#8
0
 public ReactorManager()
 {
     this.currentId           = Constants.StartingId;
     this.identifiableObjects = new Dictionary <int, IIdentifiable>();
     this.reactors            = new Dictionary <int, IReactor>();
     this.modules             = new Dictionary <int, IModule>();
     this.reactorFactory      = new ReactorFactory();
 }
示例#9
0
 public void TC002_CheckState()
 {
     using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
     {
         natsClient.Start(natsEndpoint);
         Assert.IsTrue(natsClient.Status == ConnectionStatus.Open);
         natsClient.Close();
     }
 }
示例#10
0
        public void TC015_MultipleResponseCallback()
        {
            bool       errorThrown = false;
            List <int> expected    = new List <int>();
            List <int> response    = new List <int>();

            AutoResetEvent resetEvent = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);

                SimpleCallback[] delegates = new SimpleCallback[] {
                    delegate() { response.Add(0); },
                    delegate() { response.Add(1); },
                    delegate() { response.Add(2); },
                    delegate() { response.Add(3); },
                    delegate() { response.Add(4); },
                    delegate() { response.Add(5); },
                    delegate() { response.Add(6); },
                    delegate() { response.Add(7); },
                    delegate() { response.Add(8); },
                    delegate() { response.Add(9); },
                    delegate() { response.Add(10); },
                    delegate() { response.Add(11); },
                    delegate() { response.Add(12); },
                    delegate() { response.Add(13); },
                    delegate() { response.Add(14); }
                };

                for (int i = 0; i < 15; i++)
                {
                    expected.Add(i);
                    natsClient.Publish("foo", delegates[i]);
                }

                natsClient.Publish("foo", delegate()
                {
                    resetEvent.Set();
                });

                resetEvent.WaitOne(5000);
                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);

            for (int i = 0; i < 15; i++)
            {
                Assert.AreEqual(expected[i], response[i]);
            }
        }
示例#11
0
 public void TC008_ReciveSidRequest()
 {
     using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
     {
         natsClient.Start(natsEndpoint);
         int mySid = natsClient.Request("foo");
         natsClient.Close();
         Assert.IsTrue(0 < mySid);
     }
 }
示例#12
0
        public static void Main()
        {
            IReader         reader         = new ConsoleReader();
            IWriter         writer         = new ConsoleWriter();
            IReactorFactory reactorFactory = new ReactorFactory();
            IManager        reactorManager = new ReactorManager(reactorFactory);

            ICommandParser commandParser = new CommandParser(reactorManager);
            IEngine        engine        = new Engine(reader, writer, commandParser);

            engine.Run();
        }
示例#13
0
        public static void Main()
        {
            //IReader reader = new ConsoleReader();
            //IWriter writer = new ConsoleWriter();
            //IManager reactorManager = new ReactorManager();

            //ICommandParser commandParser = new CommandParser(reactorManager);
            //IEngine engine = new Engine(reader, writer, commandParser);
            //engine.Run();

            IReactor reactor = new ReactorFactory().CreateReactor("Test", 5, new ModuleContainer(4), 56);

            Console.WriteLine(reactor.GetType().Name);
        }
示例#14
0
        /// <summary>
        /// Starts the service using the specified options.
        /// </summary>
        /// <param name="options">The configuration options.</param>
        public virtual void Start(ServiceElement options)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }

            this.localIP = NetworkInterface.GetLocalIPAddress(options.LocalRoute);

            Logger.Info(Strings.InitializingLogMessage, this.ServiceDescription());
            this.nodeNats          = ReactorFactory.GetReactor(typeof(Reactor));
            this.nodeNats.OnError += new EventHandler <ReactorErrorEventArgs>(this.NatsErrorHandler);
            this.nodeNats.Start(new Uri(options.MBus));

            this.OnConnectNode();

            this.vcapComponent = new VCAPComponent();

            this.vcapComponent.Register(
                new Dictionary <string, object>
            {
                { "nats", this.nodeNats },
                { "type", this.ServiceDescription() },
                { "host", this.localIP },
                { "index", options.Index },
                { "config", options },
                { "statusPort", options.StatusPort }
            });

            int zInterval = options.ZInterval;

            TimerHelper.RecurringCall(
                zInterval,
                delegate
            {
                this.UpdateVarz();
            });

            // give service a chance to wake up
            TimerHelper.DelayedCall(
                5 * 1000,
                delegate
            {
                this.UpdateVarz();
            });
        }
示例#15
0
        public void TC012_RecieveMessageOnUnsubscription()
        {
            bool   errorThrown       = false;
            int    receivedCount     = 0;
            object receivedCountLock = new object();
            int    sid = 0;

            IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor));

            natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
            {
                errorThrown = true;
            });

            natsClient.Start(natsEndpoint);
            ManualResetEvent mre = new ManualResetEvent(false);

            sid = natsClient.Subscribe("foo", delegate(string msg, string reply, string subject)
            {
                lock (receivedCountLock)
                {
                    receivedCount++;
                    if (receivedCount == 2)
                    {
                        natsClient.Unsubscribe(sid);
                        mre.Set();
                    }
                }
            });

            natsClient.Publish("foo", () =>
            {
                natsClient.Publish("foo", () =>
                {
                    mre.WaitOne();
                    natsClient.Publish("foo", () => { }, "xxx");
                }, "xxx");
            }, "xxx");

            Thread.Sleep(5000);
            natsClient.Close();

            Assert.IsFalse(errorThrown);
            Assert.AreEqual(2, receivedCount);
        }
示例#16
0
        public void TC021_PublishThreadSafe()
        {
            bool   errorThrown = false;
            object locker      = new object();
            int    callbackNr  = 0;
            int    sid         = 0;

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                });
                for (int i = 0; i < 40; i++)
                {
                    string subject = Guid.NewGuid().ToString();

                    sid = natsClient.Subscribe(subject, delegate(string msg, string reply, string subj)
                    {
                        lock (locker)
                        {
                            callbackNr++;
                        }
                    });

                    Thread workerThread = new Thread(new ParameterizedThreadStart(delegate(object data)
                    {
                        natsClient.Publish((string)data);
                    }));

                    workerThread.Start(subject);
                }

                natsClient.Start(natsEndpoint);
                while (callbackNr != 40 || errorThrown)
                {
                    Thread.Sleep(1000);
                }


                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
        }
示例#17
0
        public void TC018_UnsubscribeWithinBlocks()
        {
            bool           errorThrown          = false;
            int            receivedMessageCount = 0;
            int            sid        = 0;
            AutoResetEvent resetEvent = new AutoResetEvent(false);
            object         receivedMessageCountLock = new object();

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);

                sid = natsClient.Subscribe("foo", delegate(string msg, string reply, string subject)
                {
                    lock (receivedMessageCountLock)
                    {
                        receivedMessageCount++;
                        natsClient.Unsubscribe(sid);
                    }
                });

                natsClient.Publish("foo", delegate()
                {
                    natsClient.Publish("foo", delegate()
                    {
                        resetEvent.Set();
                    }, "xxx");
                }, "xxx");


                resetEvent.WaitOne(5000);
                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
            Assert.AreEqual(1, receivedMessageCount);
        }
示例#18
0
        public void TC004_CheckServerError()
        {
            bool           errorThrown = false;
            AutoResetEvent resetEvent  = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.Pedantic = true;
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });
                natsClient.Start(natsEndpoint);
                natsClient.Unsubscribe(10000);
                natsClient.Publish("done");
                resetEvent.WaitOne(10000);
                natsClient.Close();
            }
            Assert.IsTrue(errorThrown);
        }
示例#19
0
        public void TC017_RquestReplyMultipleConnections()
        {
            bool   errorThrown     = false;
            string receivedMessage = "";
            string receivedReply   = "";

            AutoResetEvent resetEvent = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });

                natsClient.Start(natsEndpoint);

                natsClient.Subscribe("need_help", delegate(string msg, string reply, string subject)
                {
                    receivedMessage = msg;
                    natsClient.Publish(reply, null, "help");
                });

                // todo: vladi: this doesn't work if no message is sent.
                natsClient.Request("need_help", null, delegate(string msg, string reply, string subject)
                {
                    receivedReply = msg;
                    resetEvent.Set();
                }, "yyy");

                resetEvent.WaitOne(5000);

                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
            Assert.AreEqual(receivedMessage, "yyy");
            Assert.AreEqual(receivedReply, "help");
        }
示例#20
0
        public void TC019_ErrorHandlerNotPedantic()
        {
            bool           errorThrown = false;
            AutoResetEvent resetEvent  = new AutoResetEvent(false);

            using (IReactor natsClient = ReactorFactory.GetReactor(typeof(Reactor)))
            {
                natsClient.OnError += new EventHandler <ReactorErrorEventArgs>(delegate(object sender, ReactorErrorEventArgs args)
                {
                    errorThrown = true;
                    resetEvent.Set();
                });
                natsClient.Start(natsEndpoint);

                int sid = natsClient.Subscribe("foo");
                natsClient.Unsubscribe(sid);
                natsClient.Unsubscribe(sid);

                resetEvent.WaitOne(5000);
                natsClient.Close();
            }
            Assert.IsFalse(errorThrown);
        }
示例#21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="VCAPReactor"/> class.
 /// </summary>
 public VCAPReactor()
 {
     this.NatsClient          = ReactorFactory.GetReactor(typeof(Reactor));
     this.NatsClient.OnError += this.OnNatsError;
 }
示例#22
0
        public static Ship Construct(ShipSchema schema)
        {
            List <entity.parts.Reactor>        reactors  = schema.Reactors.Select(reactorSchema => ReactorFactory.Construct(reactorSchema)).ToList();
            List <entity.parts.Shield>         shields   = schema.Shields.Select(shieldSchema => ShieldFactory.Construct(shieldSchema)).ToList();
            List <entity.parts.Weapon.IWeapon> weapons   = schema.Weapons.Select(weaponSchema => WeaponFactory.Construct(weaponSchema)).ToList();
            List <entity.parts.Engine>         engines   = schema.Engines.Select(engineSchema => EngineFactory.Construct(engineSchema)).ToList();
            List <entity.parts.CrewDeck>       crewdecks = schema.CrewDecks.Select(crewDeckSchema => CrewDeckFactory.Construct(crewDeckSchema)).ToList();

            return(new Ship(schema.Name, reactors, shields, weapons, engines, crewdecks));
        }