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); }
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); }
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]); }
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(); }
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; })); }
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); } } }
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); }