public void TestConnectFutureSuccessTiming() { Int32 port = 12345; IoAcceptor acceptor = CreateAcceptor(); acceptor.Bind(CreateEndPoint(port)); StringBuilder buf = new StringBuilder(); try { IoConnector connector = CreateConnector(); connector.SessionCreated += (s, e) => buf.Append("1"); connector.SessionOpened += (s, e) => buf.Append("2"); connector.ExceptionCaught += (s, e) => buf.Append("X"); IConnectFuture future = connector.Connect(CreateEndPoint(port)); future.Await(); buf.Append("3"); future.Session.Close(true); // sessionCreated() will fire before the connect future completes // but sessionOpened() may not Assert.IsTrue(new Regex("12?32?").IsMatch(buf.ToString())); } finally { acceptor.Unbind(); acceptor.Dispose(); } }
public override void Shutdown() { LOG.Info($"Health on {Config.Call_Sign} shutdown:"); LOG.Info($" Sessions open: {_Sessions.Clone().Count}"); LOG.Info($" Connections open: {ConnectionCount}"); LOG.Info($" Connection total (lifetime): {TotalConnectionCount}"); LOG.Info($" Connections migrated (lifetime): {MigrationCount}"); var sendBye = UnexpectedDisconnectWaitSeconds > 0; UnexpectedDisconnectWaitSeconds = 0; Acceptor.Dispose(); PlainAcceptor.Dispose(); var sessionClone = _Sessions.Clone(); foreach (var session in sessionClone) { if (sendBye) { session.Write(new ServerByePDU()); } session.Close(); } MarkHostDown(); }
public void TestSessionCallbackInvocation() { Int32 callbackInvoked = 0; Int32 sessionCreatedInvoked = 1; Int32 sessionCreatedInvokedBeforeCallback = 2; Boolean[] assertions = { false, false, false }; CountdownEvent countdown = new CountdownEvent(2); IConnectFuture[] callbackFuture = new IConnectFuture[1]; Int32 port = 12345; IoAcceptor acceptor = CreateAcceptor(); IoConnector connector = CreateConnector(); try { acceptor.Bind(CreateEndPoint(port)); connector.SessionCreated += (s, e) => { assertions[sessionCreatedInvoked] = true; assertions[sessionCreatedInvokedBeforeCallback] = !assertions[callbackInvoked]; countdown.Signal(); }; IConnectFuture future = connector.Connect(CreateEndPoint(port), (s, f) => { assertions[callbackInvoked] = true; callbackFuture[0] = f; countdown.Signal(); }); Assert.IsTrue(countdown.Wait(TimeSpan.FromSeconds(5)), "Timed out waiting for callback and IoHandler.sessionCreated to be invoked"); Assert.IsTrue(assertions[callbackInvoked], "Callback was not invoked"); Assert.IsTrue(assertions[sessionCreatedInvoked], "IoHandler.sessionCreated was not invoked"); Assert.IsFalse(assertions[sessionCreatedInvokedBeforeCallback], "IoHandler.sessionCreated was invoked before session callback"); Assert.AreSame(future, callbackFuture[0], "Callback future should have been same future as returned by connect"); } finally { try { connector.Dispose(); } finally { acceptor.Dispose(); } } }
public void Stop() { if (!isStarted) { return; } acceptor.Unbind(); CloseAllClient(); acceptor.Dispose(); thread.Abort(); isStarted = false; }
public override void Shutdown() { Acceptor.Dispose(); PlainAcceptor.Dispose(); var sessionClone = _Sessions.Clone(); foreach (var session in sessionClone) { session.Close(); } MarkHostDown(); }
public override void Shutdown() { Acceptor.Dispose(); var sessions = _Sessions.RawSessions; lock (sessions) { var sessionClone = new List <IAriesSession>(sessions); foreach (var session in sessionClone) { session.Close(); } } MarkHostDown(); }
public void TestSendLargeFile() { Assert.AreEqual(FILE_SIZE, file.Length, "Test file not as big as specified"); CountdownEvent countdown = new CountdownEvent(1); Boolean[] success = { false }; Exception[] exception = { null }; Int32 port = 12345; IoAcceptor acceptor = CreateAcceptor(); IoConnector connector = CreateConnector(); try { acceptor.ExceptionCaught += (s, e) => { exception[0] = e.Exception; e.Session.Close(true); }; Int32 index = 0; acceptor.MessageReceived += (s, e) => { IoBuffer buffer = (IoBuffer)e.Message; while (buffer.HasRemaining) { int x = buffer.GetInt32(); if (x != index) { throw new Exception(String.Format("Integer at {0} was {1} but should have been {0}", index, x)); } index++; } if (index > FILE_SIZE / 4) { throw new Exception("Read too much data"); } if (index == FILE_SIZE / 4) { success[0] = true; e.Session.Close(true); } }; acceptor.Bind(CreateEndPoint(port)); connector.ExceptionCaught += (s, e) => { exception[0] = e.Exception; e.Session.Close(true); }; connector.SessionClosed += (s, e) => countdown.Signal(); IConnectFuture future = connector.Connect(CreateEndPoint(port)); future.Await(); IoSession session = future.Session; session.Write(file); countdown.Wait(); if (exception[0] != null) { throw exception[0]; } Assert.IsTrue(success[0], "Did not complete file transfer successfully"); Assert.AreEqual(1, session.WrittenMessages, "Written messages should be 1 (we wrote one file)"); Assert.AreEqual(FILE_SIZE, session.WrittenBytes, "Written bytes should match file size"); } finally { try { connector.Dispose(); } finally { acceptor.Dispose(); } } }