Search in sources :

Example 1 with ServerMessenger

use of games.strategy.net.ServerMessenger in project triplea by triplea-game.

the class ChannelMessengerTest method setUp.

@BeforeEach
public void setUp() throws IOException {
    serverMessenger = new ServerMessenger("Server", 0);
    serverMessenger.setAcceptNewConnections(true);
    serverPort = serverMessenger.getLocalNode().getSocketAddress().getPort();
    final String mac = MacFinder.getHashedMacAddress();
    clientMessenger = new ClientMessenger("localhost", serverPort, "client1", mac);
    final UnifiedMessenger unifiedMessenger = new UnifiedMessenger(serverMessenger);
    unifiedMessengerHub = unifiedMessenger.getHub();
    serverChannelMessenger = new ChannelMessenger(unifiedMessenger);
    clientChannelMessenger = new ChannelMessenger(new UnifiedMessenger(clientMessenger));
}
Also used : ServerMessenger(games.strategy.net.ServerMessenger) IServerMessenger(games.strategy.net.IServerMessenger) ChannelMessenger(games.strategy.engine.message.ChannelMessenger) ClientMessenger(games.strategy.net.ClientMessenger) BeforeEach(org.junit.jupiter.api.BeforeEach)

Example 2 with ServerMessenger

use of games.strategy.net.ServerMessenger in project triplea by triplea-game.

the class RemoteMessengerTest method testRemoteCall2.

@Test
public void testRemoteCall2() throws Exception {
    final RemoteName test = new RemoteName(ITestRemote.class, "test");
    ServerMessenger server = null;
    ClientMessenger client = null;
    try {
        server = new ServerMessenger("server", 0);
        server.setAcceptNewConnections(true);
        final int serverPort = server.getLocalNode().getSocketAddress().getPort();
        final String mac = MacFinder.getHashedMacAddress();
        client = new ClientMessenger("localhost", serverPort, "client", mac);
        final RemoteMessenger serverRemoteMessenger = new RemoteMessenger(new UnifiedMessenger(server));
        final TestRemote testRemote = new TestRemote();
        serverRemoteMessenger.registerRemote(testRemote, test);
        final RemoteMessenger clientRemoteMessenger = new RemoteMessenger(new UnifiedMessenger(client));
        // call it on the client
        // should be no need to wait since the constructor should not
        // reutrn until the initial state of the messenger is good
        final int incrementedValue = ((ITestRemote) clientRemoteMessenger.getRemote(test)).increment(1);
        assertEquals(2, incrementedValue);
        assertEquals(testRemote.getLastSenderNode(), client.getLocalNode());
    } finally {
        shutdownServerAndClient(server, client);
    }
}
Also used : RemoteName(games.strategy.engine.message.RemoteName) RemoteMessenger(games.strategy.engine.message.RemoteMessenger) ServerMessenger(games.strategy.net.ServerMessenger) IServerMessenger(games.strategy.net.IServerMessenger) ClientMessenger(games.strategy.net.ClientMessenger) Test(org.junit.jupiter.api.Test)

Example 3 with ServerMessenger

use of games.strategy.net.ServerMessenger in project triplea by triplea-game.

the class RemoteMessengerTest method testShutDownClient.

@Test
public void testShutDownClient() throws Exception {
    // when the client shutdown, remotes created
    // on the client should not be visible on server
    final RemoteName test = new RemoteName(ITestRemote.class, "test");
    ServerMessenger server = null;
    ClientMessenger client = null;
    try {
        server = new ServerMessenger("server", 0);
        server.setAcceptNewConnections(true);
        final int serverPort = server.getLocalNode().getSocketAddress().getPort();
        final String mac = MacFinder.getHashedMacAddress();
        client = new ClientMessenger("localhost", serverPort, "client", mac);
        final UnifiedMessenger serverUnifiedMessenger = new UnifiedMessenger(server);
        final RemoteMessenger clientRemoteMessenger = new RemoteMessenger(new UnifiedMessenger(client));
        clientRemoteMessenger.registerRemote(new TestRemote(), test);
        serverUnifiedMessenger.getHub().waitForNodesToImplement(test.getName());
        assertTrue(serverUnifiedMessenger.getHub().hasImplementors(test.getName()));
        client.shutDown();
        Interruptibles.sleep(200);
        assertTrue(!serverUnifiedMessenger.getHub().hasImplementors(test.getName()));
    } finally {
        shutdownServerAndClient(server, client);
    }
}
Also used : RemoteName(games.strategy.engine.message.RemoteName) RemoteMessenger(games.strategy.engine.message.RemoteMessenger) ServerMessenger(games.strategy.net.ServerMessenger) IServerMessenger(games.strategy.net.IServerMessenger) ClientMessenger(games.strategy.net.ClientMessenger) Test(org.junit.jupiter.api.Test)

Example 4 with ServerMessenger

use of games.strategy.net.ServerMessenger in project triplea by triplea-game.

the class RemoteMessengerTest method testRemoteCall.

@Test
public void testRemoteCall() throws Exception {
    final RemoteName test = new RemoteName(ITestRemote.class, "test");
    ServerMessenger server = null;
    ClientMessenger client = null;
    try {
        server = new ServerMessenger("server", 0);
        server.setAcceptNewConnections(true);
        final int serverPort = server.getLocalNode().getSocketAddress().getPort();
        final String mac = MacFinder.getHashedMacAddress();
        client = new ClientMessenger("localhost", serverPort, "client", mac);
        final UnifiedMessenger serverUnifiedMessenger = new UnifiedMessenger(server);
        unifiedMessengerHub = serverUnifiedMessenger.getHub();
        final RemoteMessenger serverRemoteMessenger = new RemoteMessenger(serverUnifiedMessenger);
        final RemoteMessenger clientRemoteMessenger = new RemoteMessenger(new UnifiedMessenger(client));
        // register it on the server
        final TestRemote testRemote = new TestRemote();
        serverRemoteMessenger.registerRemote(testRemote, test);
        // since the registration must go over a socket
        // and through a couple threads, wait for the
        // client to get it
        int waitCount = 0;
        while (!unifiedMessengerHub.hasImplementors(test.getName()) && waitCount < 20) {
            waitCount++;
            Interruptibles.sleep(50);
        }
        // call it on the client
        final int incrementedValue = ((ITestRemote) clientRemoteMessenger.getRemote(test)).increment(1);
        assertEquals(2, incrementedValue);
        assertEquals(testRemote.getLastSenderNode(), client.getLocalNode());
    } finally {
        shutdownServerAndClient(server, client);
    }
}
Also used : RemoteName(games.strategy.engine.message.RemoteName) RemoteMessenger(games.strategy.engine.message.RemoteMessenger) ServerMessenger(games.strategy.net.ServerMessenger) IServerMessenger(games.strategy.net.IServerMessenger) ClientMessenger(games.strategy.net.ClientMessenger) Test(org.junit.jupiter.api.Test)

Example 5 with ServerMessenger

use of games.strategy.net.ServerMessenger in project triplea by triplea-game.

the class RemoteMessengerTest method testMethodReturnsOnWait.

@Test
public void testMethodReturnsOnWait() throws Exception {
    // when the client shutdown, remotes created
    // on the client should not be visible on server
    final RemoteName test = new RemoteName(IFoo.class, "test");
    ServerMessenger server = null;
    ClientMessenger client = null;
    try {
        server = new ServerMessenger("server", 0);
        server.setAcceptNewConnections(true);
        final int serverPort = server.getLocalNode().getSocketAddress().getPort();
        final String mac = MacFinder.getHashedMacAddress();
        client = new ClientMessenger("localhost", serverPort, "client", mac);
        final UnifiedMessenger serverUnifiedMessenger = new UnifiedMessenger(server);
        final RemoteMessenger serverRemoteMessenger = new RemoteMessenger(serverUnifiedMessenger);
        final RemoteMessenger clientRemoteMessenger = new RemoteMessenger(new UnifiedMessenger(client));
        final CountDownLatch latch = new CountDownLatch(1);
        final AtomicBoolean started = new AtomicBoolean(false);
        final IFoo foo = new IFoo() {

            @Override
            public void foo() {
                started.set(true);
                Interruptibles.await(latch);
            }
        };
        clientRemoteMessenger.registerRemote(foo, test);
        serverUnifiedMessenger.getHub().waitForNodesToImplement(test.getName());
        assertTrue(serverUnifiedMessenger.getHub().hasImplementors(test.getName()));
        final AtomicReference<ConnectionLostException> rme = new AtomicReference<>(null);
        final Thread t = new Thread(() -> {
            try {
                final IFoo remoteFoo = (IFoo) serverRemoteMessenger.getRemote(test);
                remoteFoo.foo();
            } catch (final ConnectionLostException e) {
                rme.set(e);
            }
        });
        t.start();
        // wait for the thread to start
        while (started.get() == false) {
            Interruptibles.sleep(1);
        }
        Interruptibles.sleep(20);
        // TODO: we are getting a RemoteNotFoundException because the client is disconnecting before the invoke goes out
        // completely
        // Perhaps this situation should be changed to a ConnectionLostException or something else?
        client.shutDown();
        // when the client shutdowns, this should wake up.
        // and an error should be thrown
        // give the thread a chance to execute
        t.join(200);
        latch.countDown();
        assertNotNull(rme.get());
    } finally {
        shutdownServerAndClient(server, client);
    }
}
Also used : RemoteMessenger(games.strategy.engine.message.RemoteMessenger) ConnectionLostException(games.strategy.engine.message.ConnectionLostException) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) RemoteName(games.strategy.engine.message.RemoteName) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ServerMessenger(games.strategy.net.ServerMessenger) IServerMessenger(games.strategy.net.IServerMessenger) ClientMessenger(games.strategy.net.ClientMessenger) Test(org.junit.jupiter.api.Test)

Aggregations

IServerMessenger (games.strategy.net.IServerMessenger)9 ServerMessenger (games.strategy.net.ServerMessenger)9 ClientMessenger (games.strategy.net.ClientMessenger)7 RemoteMessenger (games.strategy.engine.message.RemoteMessenger)6 ChannelMessenger (games.strategy.engine.message.ChannelMessenger)4 RemoteName (games.strategy.engine.message.RemoteName)4 Test (org.junit.jupiter.api.Test)4 UnifiedMessenger (games.strategy.engine.message.unifiedmessenger.UnifiedMessenger)3 BeforeEach (org.junit.jupiter.api.BeforeEach)3 NullModeratorController (games.strategy.engine.lobby.server.NullModeratorController)2 IChannelMessenger (games.strategy.engine.message.IChannelMessenger)2 IRemoteMessenger (games.strategy.engine.message.IRemoteMessenger)2 ChatController (games.strategy.engine.chat.ChatController)1 ChatPanel (games.strategy.engine.chat.ChatPanel)1 HeadlessChat (games.strategy.engine.chat.HeadlessChat)1 IChatPanel (games.strategy.engine.chat.IChatPanel)1 ClientLoginValidator (games.strategy.engine.framework.startup.login.ClientLoginValidator)1 ConnectionLostException (games.strategy.engine.message.ConnectionLostException)1 IOException (java.io.IOException)1 CountDownLatch (java.util.concurrent.CountDownLatch)1