• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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          */
attachChild(String model)65         public boolean attachChild(String model);
66     }
67 
68     public static class ServerAccessImpl implements ServerAccess {
attachChild(String model)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 
createServer()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 
main(String[] args)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