aboutsummaryrefslogtreecommitdiff
path: root/engine/src/networking/com/jme3/network/Network.java
diff options
context:
space:
mode:
authorScott Barta <sbarta@google.com>2012-03-01 12:35:35 -0800
committerScott Barta <sbarta@google.com>2012-03-01 12:40:08 -0800
commit59b2e6871c65f58fdad78cd7229c292f6a177578 (patch)
tree2d4e7bfc05b93f40b34675d77e403dd1c25efafd /engine/src/networking/com/jme3/network/Network.java
parentf9b30489e75ac1eabc365064959804e99534f7ab (diff)
downloadjmonkeyengine-59b2e6871c65f58fdad78cd7229c292f6a177578.tar.gz
Adds the jMonkeyEngine library to the build.
Adds the jMonkeyEngine open source 3D game engine to the build. This is built as a static library and is only used by the Finsky client. Change-Id: I06a3f054df7b8a67757267d884854f70c5a16ca0
Diffstat (limited to 'engine/src/networking/com/jme3/network/Network.java')
-rw-r--r--engine/src/networking/com/jme3/network/Network.java192
1 files changed, 192 insertions, 0 deletions
diff --git a/engine/src/networking/com/jme3/network/Network.java b/engine/src/networking/com/jme3/network/Network.java
new file mode 100644
index 0000000..08d90d5
--- /dev/null
+++ b/engine/src/networking/com/jme3/network/Network.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2011 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.jme3.network;
+
+import com.jme3.network.base.DefaultClient;
+import com.jme3.network.base.DefaultServer;
+import com.jme3.network.base.TcpConnectorFactory;
+import com.jme3.network.kernel.tcp.SelectorKernel;
+import com.jme3.network.kernel.tcp.SocketConnector;
+import com.jme3.network.kernel.udp.UdpConnector;
+import com.jme3.network.kernel.udp.UdpKernel;
+import java.io.IOException;
+import java.net.InetAddress;
+
+/**
+ * The main service provider for conveniently creating
+ * server and client instances.
+ *
+ * @version $Revision: 8979 $
+ * @author Paul Speed
+ */
+public class Network
+{
+ public static final String DEFAULT_GAME_NAME = "Unnamed jME3 Game";
+ public static final int DEFAULT_VERSION = 42;
+
+ /**
+ * Creates a Server that will utilize both reliable and fast
+ * transports to communicate with clients. The specified port
+ * will be used for both TCP and UDP communication.
+ */
+ public static Server createServer( int port ) throws IOException
+ {
+ return createServer( DEFAULT_GAME_NAME, DEFAULT_VERSION, port, port );
+ }
+
+ /**
+ * Creates a Server that will utilize both reliable and fast
+ * transports to communicate with clients. The specified port
+ * will be used for both TCP and UDP communication.
+ */
+ public static Server createServer( int tcpPort, int udpPort ) throws IOException
+ {
+ return createServer( DEFAULT_GAME_NAME, DEFAULT_VERSION, tcpPort, udpPort );
+ }
+
+ /**
+ * Creates a named and versioned Server that will utilize both reliable and fast
+ * transports to communicate with clients. The specified port
+ * will be used for both TCP and UDP communication.
+ *
+ * @param gameName This is the name that identifies the game. Connecting clients
+ * must use this name or be turned away.
+ * @param version This is a game-specific verison that helps detect when out-of-date
+ * clients have connected to an incompatible server.
+ * @param tcpPort The port upon which the TCP hosting will listen for new connections.
+ * @param udpPort The port upon which the UDP hosting will listen for new 'fast' UDP
+ * messages. Set to -1 if 'fast' traffic should go over TCP. This will
+ * completely disable UDP traffic for this server.
+ */
+ public static Server createServer( String gameName, int version, int tcpPort, int udpPort ) throws IOException
+ {
+ UdpKernel fast = udpPort == -1 ? null : new UdpKernel(udpPort);
+ SelectorKernel reliable = new SelectorKernel(tcpPort);
+
+ return new DefaultServer( gameName, version, reliable, fast );
+ }
+
+ /**
+ * Creates a client that can be connected at a later time.
+ */
+ public static NetworkClient createClient()
+ {
+ return createClient( DEFAULT_GAME_NAME, DEFAULT_VERSION );
+ }
+
+ /**
+ * Creates a client that can be connected at a later time. The specified
+ * game name and version must match the server or the client will be turned
+ * away.
+ */
+ public static NetworkClient createClient( String gameName, int version )
+ {
+ return new NetworkClientImpl(gameName, version);
+ }
+
+ /**
+ * Creates a Client that communicates with the specified host and port
+ * using both reliable and fast transports.
+ */
+ public static Client connectToServer( String host, int hostPort ) throws IOException
+ {
+ return connectToServer( DEFAULT_GAME_NAME, DEFAULT_VERSION, host, hostPort, hostPort );
+ }
+
+ /**
+ * Creates a Client that communicates with the specified host and separate TCP and UDP ports
+ * using both reliable and fast transports.
+ */
+ public static Client connectToServer( String host, int hostPort, int remoteUdpPort ) throws IOException
+ {
+ return connectToServer( DEFAULT_GAME_NAME, DEFAULT_VERSION, host, hostPort, remoteUdpPort );
+ }
+
+ /**
+ * Creates a Client that communicates with the specified host and port
+ * using both reliable and fast transports.
+ */
+ public static Client connectToServer( String gameName, int version,
+ String host, int hostPort ) throws IOException
+ {
+ return connectToServer( gameName, version, host, hostPort, hostPort );
+ }
+
+ /**
+ * Creates a Client that communicates with the specified host and and separate TCP and UDP ports
+ * using both reliable and fast transports.
+ *
+ * @param gameName This is the name that identifies the game. This must match
+ * the target server's name or this client will be turned away.
+ * @param version This is a game-specific verison that helps detect when out-of-date
+ * clients have connected to an incompatible server. This must match
+ * the server's version of this client will be turned away.
+ * @param hostPort The remote TCP port on the server to which this client should
+ * send reliable messages.
+ * @param remoteUdpPort The remote UDP port on the server to which this client should
+ * send 'fast'/unreliable messages. Set to -1 if 'fast' traffic should
+ * go over TCP. This will completely disable UDP traffic for this
+ * client.
+ */
+ public static Client connectToServer( String gameName, int version,
+ String host, int hostPort, int remoteUdpPort ) throws IOException
+ {
+ InetAddress remoteAddress = InetAddress.getByName(host);
+ UdpConnector fast = remoteUdpPort == -1 ? null : new UdpConnector( remoteAddress, remoteUdpPort );
+ SocketConnector reliable = new SocketConnector( remoteAddress, hostPort );
+
+ return new DefaultClient( gameName, version, reliable, fast, new TcpConnectorFactory(remoteAddress) );
+ }
+
+
+ protected static class NetworkClientImpl extends DefaultClient implements NetworkClient
+ {
+ public NetworkClientImpl(String gameName, int version)
+ {
+ super( gameName, version );
+ }
+
+ public void connectToServer( String host, int port, int remoteUdpPort ) throws IOException
+ {
+ connectToServer( InetAddress.getByName(host), port, remoteUdpPort );
+ }
+
+ public void connectToServer( InetAddress address, int port, int remoteUdpPort ) throws IOException
+ {
+ UdpConnector fast = new UdpConnector( address, remoteUdpPort );
+ SocketConnector reliable = new SocketConnector( address, port );
+
+ setPrimaryConnectors( reliable, fast, new TcpConnectorFactory(address) );
+ }
+ }
+}