public void TestSimple() { // using var factory = Log.UsingLogFactory(new TextWriterLogFactory(Console.Out, LoggingLevel.TRACE)); Lifetime.Using(lifetime => { var proxyLifetimeDefinition = lifetime.CreateNested(); var proxyLifetime = proxyLifetimeDefinition.Lifetime; { SynchronousScheduler.Instance.SetActive(lifetime); var serverProtocol = SocketWireTest.Server(lifetime); var proxy = new SocketProxy("TestProxy", proxyLifetime, serverProtocol).With(socketProxy => socketProxy.Start()); Thread.Sleep(SocketWireTest.DefaultTimeout); var clientProtocol = SocketWireTest.Client(lifetime, proxy.Port); var sp = new RdSignal <int>().Static(1); sp.Bind(lifetime, serverProtocol, SocketWireTest.Top); var cp = new RdSignal <int>().Static(1); cp.Bind(lifetime, clientProtocol, SocketWireTest.Top); var serverLog = new List <int>(); var clientLog = new List <int>(); sp.Advise(lifetime, i => serverLog.Add(i)); cp.Advise(lifetime, i => clientLog.Add(i)); //Connection is established for now sp.Fire(1); SpinWaitEx.SpinUntil(() => serverLog.Count == 1); SpinWaitEx.SpinUntil(() => clientLog.Count == 1); Assert.AreEqual(new List <int> { 1 }, serverLog); Assert.AreEqual(new List <int> { 1 }, clientLog); cp.Fire(2); SpinWaitEx.SpinUntil(() => serverLog.Count == 2); SpinWaitEx.SpinUntil(() => clientLog.Count == 2); Assert.AreEqual(new List <int> { 1, 2 }, serverLog); Assert.AreEqual(new List <int> { 1, 2 }, clientLog); proxy.StopServerToClientMessaging(); cp.Advise(lifetime, i => Assert.AreNotSame(3, i, "Value {0} mustn't be received", 3)); sp.Fire(3); SpinWaitEx.SpinUntil(() => serverLog.Count == 3); Assert.AreEqual(new List <int> { 1, 2, 3 }, serverLog); proxy.StopClientToServerMessaging(); sp.Advise(lifetime, i => Assert.AreNotSame(4, i, "Value {0} mustn't be received", 4)); cp.Fire(4); SpinWaitEx.SpinUntil(() => clientLog.Count == 3); Assert.AreEqual(new List <int> { 1, 2, 4 }, clientLog); //Connection is broken for now proxy.StartServerToClientMessaging(); sp.Fire(5); SpinWaitEx.SpinUntil(() => serverLog.Count == 4); SpinWaitEx.SpinUntil(() => clientLog.Count == 4); Assert.AreEqual(new List <int> { 1, 2, 3, 5 }, serverLog); Assert.AreEqual(new List <int> { 1, 2, 4, 5 }, clientLog); proxy.StartClientToServerMessaging(); cp.Fire(6); SpinWaitEx.SpinUntil(() => serverLog.Count == 5); SpinWaitEx.SpinUntil(() => clientLog.Count == 5); Assert.AreEqual(new List <int> { 1, 2, 3, 5, 6 }, serverLog); Assert.AreEqual(new List <int> { 1, 2, 4, 5, 6 }, clientLog); //Connection is established for now proxyLifetimeDefinition.Terminate(); cp.Advise(lifetime, i => Assert.AreNotSame(7, i, "Value {0} mustn't be received", 7)); sp.Fire(7); SpinWaitEx.SpinUntil(() => serverLog.Count == 6); Assert.AreEqual(new List <int> { 1, 2, 3, 5, 6, 7 }, serverLog); sp.Advise(lifetime, i => Assert.AreNotSame(8, i, "Value {0} mustn't be received", 8)); cp.Fire(8); SpinWaitEx.SpinUntil(() => clientLog.Count == 6); Assert.AreEqual(new List <int> { 1, 2, 4, 5, 6, 8 }, clientLog); //Connection is broken for now, proxy is not alive } }); }
public CustomProperty(string id, CtxReadDelegate <T> read, CtxWriteDelegate <T> write) { myId = id; myRdSignal = new RdSignal <T>(read, write); myRdSignal.ValueCanBeNull = true; }