public new void Init()
    {
        if (!inited)
        {
            inited = true;
            SocketConnection.Init();                  // Init the socket manager
            Process.Start("TABS-Multiplayer-UI.exe"); // Start the multiplayer UI
        }

        orig_Init(); // Execute the real method
    }
            public void ShouldStartClient()
            {
                // Given
                var mockClient = new Mock <ISocketClient>();
                // ReSharper disable once ObjectCreationAsStatement
                var conn = new SocketConnection(mockClient.Object, AuthTokens.None, Logger);

                // When
                conn.Init();

                // Then
                mockClient.Verify(c => c.Start(), Times.Once);
            }
            public void ShouldThrowClientErrorIfFailedToConnectToServerWithinTimeout()
            {
                // Given
                var mockClient = new Mock <ISocketClient>();

                mockClient.Setup(x => x.Connect()).Throws(new IOException("I will stop socket conn from initialization"));
                // ReSharper disable once ObjectCreationAsStatement
                var conn = new SocketConnection(mockClient.Object, AuthToken, UserAgent, Logger, Server);
                // When
                var error = Exception(() => conn.Init());

                // Then
                error.Should().BeOfType <IOException>();
                error.Message.Should().Be("I will stop socket conn from initialization");
            }
            public void ShouldThrowClientErrorIfFailedToConnectToServerWithinTimeout()
            {
                // Given
                var mockClient = new Mock <ISocketClient>();

                mockClient.Setup(x => x.Start()).Returns(Task.Delay(TimeSpan.FromMinutes(1)));
                // ReSharper disable once ObjectCreationAsStatement
                var conn = new SocketConnection(mockClient.Object, AuthToken, TimeSpan.FromSeconds(1), UserAgent, Logger, Server);
                // When
                var error = Exception(() => conn.Init());

                // Then
                error.Should().BeOfType <IOException>();
                error.Message.Should().Be("Failed to connect to the server neo4j.com:80 within connection timeout 1000ms");
            }
        internal static IConnection SetupConnection(object[] recordFields)
        {
            var requestAndResponsePairs = new List <Tuple <IRequestMessage, IResponseMessage> >
            {
                MessagePair(InitMessage(), SuccessMessage()),
                MessagePair(new RunMessage("CALL dbms.cluster.routing.getServers"),
                            SuccessMessage(new List <object> {
                    "ttl", "servers"
                })),
                MessagePair(new RecordMessage(recordFields)),
                MessagePair(PullAllMessage(), SuccessMessage())
            };
            var mock = new MockedMessagingClient(requestAndResponsePairs);
            var conn = new SocketConnection(mock.Client, AuthTokens.None, null);

            conn.Init();
            return(conn);
        }
            public void ShouldSyncInitMessageImmediately()
            {
                // Given
                var mockClient  = new Mock <ISocketClient>();
                var mockHandler = new Mock <IMessageResponseHandler>();

                mockHandler.Setup(x => x.UnhandledMessageSize).Returns(1);
                var conn = new SocketConnection(mockClient.Object, AuthTokens.None, Logger, mockHandler.Object);

                // When
                conn.Init();

                // Then
                mockHandler.Verify(h => h.EnqueueMessage(It.IsAny <InitMessage>(), It.IsAny <InitCollector>()));

                mockClient.Verify(c => c.Send(It.IsAny <IEnumerable <IRequestMessage> >()), Times.Once);
                mockClient.Verify(c => c.Receive(mockHandler.Object), Times.Once);
            }