diff options
author | Scott Barta <sbarta@google.com> | 2012-03-01 12:35:35 -0800 |
---|---|---|
committer | Scott Barta <sbarta@google.com> | 2012-03-01 12:40:08 -0800 |
commit | 59b2e6871c65f58fdad78cd7229c292f6a177578 (patch) | |
tree | 2d4e7bfc05b93f40b34675d77e403dd1c25efafd /engine/src/networking/com/jme3/network/Network.java | |
parent | f9b30489e75ac1eabc365064959804e99534f7ab (diff) | |
download | jmonkeyengine-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.java | 192 |
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) ); + } + } +} |