Home | History | Annotate | Download | only in network
      1 /*
      2  * Copyright (c) 2009-2010 jMonkeyEngine
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions are
      7  * met:
      8  *
      9  * * Redistributions of source code must retain the above copyright
     10  *   notice, this list of conditions and the following disclaimer.
     11  *
     12  * * Redistributions in binary form must reproduce the above copyright
     13  *   notice, this list of conditions and the following disclaimer in the
     14  *   documentation and/or other materials provided with the distribution.
     15  *
     16  * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
     17  *   may be used to endorse or promote products derived from this software
     18  *   without specific prior written permission.
     19  *
     20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 
     33 package jme3test.network;
     34 
     35 import com.jme3.app.SimpleApplication;
     36 import com.jme3.export.Savable;
     37 import com.jme3.network.Client;
     38 import com.jme3.network.Network;
     39 import com.jme3.network.Server;
     40 import com.jme3.network.rmi.ObjectStore;
     41 import com.jme3.network.serializing.Serializer;
     42 import com.jme3.network.serializing.serializers.SavableSerializer;
     43 import com.jme3.scene.Spatial;
     44 import java.io.IOException;
     45 import java.util.concurrent.Callable;
     46 
     47 public class TestRemoteCall {
     48 
     49     private static SimpleApplication serverApp;
     50 
     51     /**
     52      * Interface implemented by the server, exposing
     53      * RMI calls that clients can use.
     54      */
     55     public static interface ServerAccess {
     56         /**
     57          * Attaches the model with the given name to the server's scene.
     58          *
     59          * @param model The model name
     60          *
     61          * @return True if the model was attached.
     62          *
     63          * @throws RuntimeException If some error occurs.
     64          */
     65         public boolean attachChild(String model);
     66     }
     67 
     68     public static class ServerAccessImpl implements ServerAccess {
     69         public boolean attachChild(String model) {
     70             if (model == null)
     71                 throw new RuntimeException("Cannot be null. .. etc");
     72 
     73             final String finalModel = model;
     74             serverApp.enqueue(new Callable<Void>() {
     75                 public Void call() throws Exception {
     76                     Spatial spatial = serverApp.getAssetManager().loadModel(finalModel);
     77                     serverApp.getRootNode().attachChild(spatial);
     78                     return null;
     79                 }
     80             });
     81             return true;
     82         }
     83     }
     84 
     85     public static void createServer(){
     86         serverApp = new SimpleApplication() {
     87             @Override
     88             public void simpleInitApp() {
     89             }
     90         };
     91         serverApp.start();
     92 
     93         try {
     94             Server server = Network.createServer(5110);
     95             server.start();
     96 
     97             ObjectStore store = new ObjectStore(server);
     98             store.exposeObject("access", new ServerAccessImpl());
     99         } catch (IOException ex) {
    100             ex.printStackTrace();
    101         }
    102     }
    103 
    104     public static void main(String[] args) throws IOException, InterruptedException{
    105         Serializer.registerClass(Savable.class, new SavableSerializer());
    106 
    107         createServer();
    108 
    109         Client client = Network.connectToServer("localhost", 5110);
    110         client.start();
    111 
    112         ObjectStore store = new ObjectStore(client);
    113         ServerAccess access = store.getExposedObject("access", ServerAccess.class, true);
    114         boolean result = access.attachChild("Models/Oto/Oto.mesh.xml");
    115         System.out.println(result);
    116     }
    117 }
    118