Example #1
0
        public async System.Threading.Tasks.Task Test()
        {
            var listener = new Regulus.Network.Web.Listener();

            listener.Bind("http://127.0.0.1:12345/");
            var peers = new System.Collections.Concurrent.ConcurrentQueue <Web.Peer>();

            listener.AcceptEvent += peers.Enqueue;

            var connecter     = new Regulus.Network.Web.Connecter(new System.Net.WebSockets.ClientWebSocket());
            var connectResult = await connecter.ConnectAsync("ws://127.0.0.1:12345/");

            Xunit.Assert.True(connectResult);

            var ar = new Regulus.Utility.AutoPowerRegulator(new Utility.PowerRegulator());

            Web.Peer peer;
            while (!peers.TryDequeue(out peer))
            {
                ar.Operate();
            }
            IStreamable server = peer;
            var         serverReceiveBuffer = new byte[5];
            var         serverReceiveTask   = server.Receive(serverReceiveBuffer, 0, 5);
            IStreamable client          = connecter;
            var         clientSendCount = await client.Send(new byte[] { 1, 2, 3, 4, 5 }, 0, 5);

            var serverReceiveCount = await serverReceiveTask;

            Xunit.Assert.Equal(5, serverReceiveCount);
            Xunit.Assert.Equal(5, clientSendCount);
        }
Example #2
0
        private static void _TestService(IBinderProvider entry, ref bool bind, IProtocol protocol)
        {
            bind = false;
            var service = Regulus.Remote.Standalone.Provider.CreateService(protocol, entry);

            Ghost.IAgent agent = new Regulus.Remote.Ghost.Agent(protocol);
            service.Join(agent, null);
            IGpiA retGpiA = null;
            bool  ret     = false;

            agent.QueryNotifier <IGpiA>().Supply += gpi => {
                ret     = true;
                retGpiA = gpi;
            };
            var timer = new Regulus.Utility.TimeCounter();
            var apr   = new Regulus.Utility.AutoPowerRegulator(new Utility.PowerRegulator());

            while (retGpiA == null)
            {
                apr.Operate();
                agent.Update();
                if (timer.Second > 10)
                {
                    throw new System.Exception($"debug agent:{agent.Active} bind:{bind} ");
                }
            }

            service.Leave(agent);
            service.Dispose();

            Assert.AreNotEqual(null, retGpiA);
            Assert.AreEqual(true, bind);
            Assert.AreEqual(true, ret);
        }
Example #3
0
        public void EventTest()
        {
            var tester = new EventTester();

            var re  = new Regulus.Utility.AutoPowerRegulator(new Utility.PowerRegulator());
            var env = new TestEnv <Entry <IEventabe>, IEventabe>(new Entry <IEventabe>(tester));



            var event11Obs = from eventer in env.Queryable.QueryNotifier <IEventabe>().SupplyEvent()
                             from n in Extensions.EventObservable((h) => eventer.Event1 += h, (h) => eventer.Event1 -= h)
                             select n;
            var event12Obs = from eventer in env.Queryable.QueryNotifier <IEventabe>().SupplyEvent()
                             from n in Extensions.EventObservable((h) => eventer.Event21 += h, (h) => eventer.Event21 -= h)
                             select n;

            var event21Obs = from eventer in env.Queryable.QueryNotifier <IEventabe>().SupplyEvent()
                             from n in Extensions.EventObservable <int>((h) => eventer.Event2 += h, (h) => eventer.Event2 -= h)
                             select n;
            var event22Obs = from eventer in env.Queryable.QueryNotifier <IEventabe>().SupplyEvent()
                             from n in Extensions.EventObservable <int>(
                (h) => eventer.Event22 += h,
                (h) => eventer.Event22 -= h)
                             select n;

            var vals = new System.Collections.Generic.List <int>();

            event11Obs.Subscribe((unit) => vals.Add(1));
            event12Obs.Subscribe((unit) => vals.Add(2));
            event21Obs.Subscribe(vals.Add);
            event22Obs.Subscribe(vals.Add);


            System.Console.WriteLine("wait EventTest tester.LisCount ...");
            System.Threading.SpinWait.SpinUntil(() => tester.LisCount == 4, 5000);


            tester.Invoke22(9);
            tester.Invoke21();
            tester.Invoke11();
            tester.Invoke12(8);


            System.Console.WriteLine("wait EventTest vals.Count ...");

            System.Threading.SpinWait.SpinUntil(() => vals.Count == 4, 5000);


            env.Dispose();

            NUnit.Framework.Assert.AreEqual(9, vals[0]);
            NUnit.Framework.Assert.AreEqual(2, vals[1]);
            NUnit.Framework.Assert.AreEqual(1, vals[2]);
            NUnit.Framework.Assert.AreEqual(8, vals[3]);
        }
Example #4
0
        private void _Update()
        {
            var random   = new System.Random();
            var loginObs = from login in _Agent.QueryNotifier <Regulus.Samples.Chat1.Common.ILogin>().SupplyEvent()
                           from loginResult in login.Login($"bot-{_Agent.GetHashCode()}-{login.GetHashCode()}").RemoteValue()
                           select loginResult;

            _Disposables.Add(loginObs.Subscribe(_LoginResult));

            /*var chatterAddObs = from chatter in _Agent.QueryNotifier<Common.IChatter>().SupplyEvent()
             *                  select chatter;
             * _Disposables.Add(chatterAddObs.Subscribe(_Chatters.Add));
             * var chatterRemoveObs = from chatter in _Agent.QueryNotifier<Common.IChatter>().UnsupplyEvent()
             *                  select chatter;
             * _Disposables.Add(chatterRemoveObs.Subscribe((c) =>_Chatters.Remove(c)));*/


            var sendPlayerObs = from player in _Agent.QueryNotifier <Common.IPlayer>().SupplyEvent()
                                from seconds in Observable.Defer(() => Observable.Return(TimeSpan.FromSeconds(random.Next(1, 4))))
                                from elapsed in Observable.Timer(seconds)
                                select player;

            _Disposables.Add(sendPlayerObs.Subscribe(_SendMessage));

            var quitPlayerObs = from player in _Agent.QueryNotifier <Common.IPlayer>().SupplyEvent()
                                from seconds in Observable.Defer(() => Observable.Return(TimeSpan.FromSeconds(random.Next(5, 10))))
                                from elapsed in Observable.Timer(seconds)
                                select player;

            _Disposables.Add(quitPlayerObs.Subscribe(_PlayerQuit));

            var playerMessageObs = from player in _Agent.QueryNotifier <Common.IPlayer>().SupplyEvent()
                                   from msg in System.Reactive.Linq.Observable.FromEvent <System.Action <Common.Message>, Common.Message>(h => player.PublicMessageEvent += h, h => player.PublicMessageEvent -= h)
                                   select msg;

            _Disposables.Add(playerMessageObs.Subscribe(_PlayerMessage));

            var ar = new Regulus.Utility.AutoPowerRegulator(new Utility.PowerRegulator());

            while (_Enable)
            {
                _Agent.Update();

                Action action;
                while (_Actions.TryDequeue(out action))
                {
                    action();
                }
                ar.Operate();
            }
            _Disposables.Dispose();
            //onlinable.Disconnect();
        }
Example #5
0
        System.Threading.Tasks.Task <bool> IConnectable.Connect(EndPoint Endpoint)
        {
            bool?result = null;

            _RudpSocket = _Agent.Connect(Endpoint, r => result = r);
            return(System.Threading.Tasks.Task <bool> .Run(() =>
            {
                Utility.AutoPowerRegulator r = new Regulus.Utility.AutoPowerRegulator(new Utility.PowerRegulator());
                while (!result.HasValue)
                {
                    r.Operate();
                }
                return result.Value;
            }));
        }
Example #6
0
        private void _Run()
        {
            var apr = new Regulus.Utility.AutoPowerRegulator(new Utility.PowerRegulator());

            while (!_Stop)
            {
                apr.Operate();
                TPackage[] pkgs;
                while (_SendPkgs.TryDequeue(out pkgs))
                {
                    var buffer = _CreateBuffer(pkgs);

                    var resultTask = _Peer.Send(buffer, 0, buffer.Length);

                    var sendSize = resultTask.GetAwaiter().GetResult();
                    NetworkMonitor.Instance.Write.Set(sendSize);
                }
            }
        }
Example #7
0
        public void AgentSupplyGpiTest()
        {
            IGpiA retGpiA = null;

            Regulus.Serialization.ISerializer serializer = new Regulus.Serialization.Dynamic.Serializer();
            IProtocol protocol = ProtocolHelper.CreateProtocol(serializer);

            Stream cdClient = new Regulus.Remote.Standalone.Stream();

            Network.IStreamable             peerClient = cdClient;
            PackageWriter <ResponsePackage> writer     = new PackageWriter <ResponsePackage>(serializer);

            writer.Start(new ReverseStream(cdClient));

            Ghost.IAgent agent = new Regulus.Remote.Ghost.Agent(protocol) as Ghost.IAgent;
            agent.QueryNotifier <IGpiA>().Supply += gpi => retGpiA = gpi;
            agent.Start(peerClient);

            writer.ServerToClient(serializer, ServerToClientOpCode.LoadSoul, new Regulus.Remote.PackageLoadSoul()
            {
                EntityId = 1, ReturnType = false, TypeId = 1
            });
            writer.ServerToClient(serializer, ServerToClientOpCode.LoadSoulCompile, new Regulus.Remote.PackageLoadSoulCompile()
            {
                EntityId = 1, TypeId = 1, ReturnId = 0
            });
            var ar = new Regulus.Utility.AutoPowerRegulator(new Utility.PowerRegulator());

            while (retGpiA == null)
            {
                ar.Operate();
                agent.Update();
            }
            agent.Stop();
            writer.Stop();
            Assert.NotNull(retGpiA);
        }