View Javadoc

1   /*
2    * Created on 2004-12-11
3    *
4    * TODO To change the template for this generated file go to
5    * Window - Preferences - Java - Code Style - Code Templates
6    */
7   package org.sourceforge.jvb3d;
8   
9   import java.awt.GraphicsConfiguration;
10  import java.net.InetSocketAddress;
11  
12  import javax.media.j3d.Canvas3D;
13  import javax.swing.JFrame;
14  
15  import com.sun.j3d.utils.universe.SimpleUniverse;
16  import org.sourceforge.jvb3d.Model.*;
17  import org.sourceforge.jvb3d.Network.*;
18  import org.sourceforge.jvb3d.Loader.*;
19  import org.sourceforge.jvb3d.Control.*;
20  
21  /***
22   * @author spootnick
23   * 
24   * Klasa główna tworząca okienko i wszyskie potrzebne obiekty
25   */
26  public class Jvb3d  extends JFrame{
27  	private Canvas3D canvas3D;
28  
29  	private Model model;
30  
31  	private SceneLoader loader;
32  
33  	private Control c;
34  	
35  	private INetworkModel network;
36  	
37  	//static NetworkClientFacade clientFacade;
38  
39  	/***
40  	 * konstruktor głównej klasy
41  	 * @param isServer czy klasa ma być klientem czy serwerem
42  	 * @param host adres serwera z którym klient ma się połączyć
43  	 * @param port port na którym działa serwer
44  	 * @param map ścieżka do pliku mapy
45  	 * @throws Exception
46  	 */
47  	public Jvb3d(boolean isServer,String host,int port,String map) throws Exception{
48  		//GraphicsConfigTemplate3D templ=new GraphicsConfigTemplate3D();
49  		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
50  		/*GraphicsEnvironment ge =
51  			GraphicsEnvironment.getLocalGraphicsEnvironment();
52  		GraphicsDevice gd = ge.getDefaultScreenDevice();
53  
54  		
55  
56  		this.setUndecorated(true);
57  		//this.setIgnoreRepaint(true);
58  		this.setFocusable(true);
59  		this.setResizable(false);*/
60  		
61  		
62  		//gd.ssetDisplayMode()
63  		
64  		GraphicsConfiguration config = SimpleUniverse
65  		.getPreferredConfiguration();
66  		canvas3D = new Canvas3D(config);
67  		canvas3D.setDoubleBufferEnable(true);
68  		//this.getContentPane().add("Center", canvas3D);
69  		this.getContentPane().add("Center", canvas3D);
70  		
71  		loader = new SceneLoader();
72  		if(map!=null)
73  			loader.loadScene(map);
74  		else
75  			loader.loadScene("data/room.xml");
76  		
77  		if(isServer){
78  			this.setTitle("Jvb3d:Server");
79  			model = new Model(canvas3D,true);
80  			startServer(port);
81  		}else{
82  			this.setTitle("Jvb3d:Client");
83  			model = new Model(canvas3D,false);
84  			startClient(host,port);
85  		}
86  		
87  
88  		//model.setStaticScene(loader.getStaticScene());
89  		model.setStaticScene(loader.getStaticScene());
90  		//model.createPlayer("nowy");
91  		
92  		c.getInputAdapter().setScreen(800,600);
93  		this.canvas3D.addKeyListener(c.getInputAdapter());
94  		this.canvas3D.addMouseMotionListener(c.getInputAdapter());
95  		this.canvas3D.addMouseListener(c.getInputAdapter());
96  
97  		this.setSize(800, 600);
98  		//gd.setFullScreenWindow(this);
99  		this.setVisible(true);
100 		//new Canvas3D();
101 	}
102 
103 	private void startServer(int port) throws Exception{
104 		String id=model.createLocalPlayer();
105 		NetworkServerFacadeHolder.setNetworkFacade(new ServerFacade());
106 		NetworkServerFacade serverFacade = NetworkServerFacadeHolder.getNetworkFacade();
107 		serverFacade.setModelInterface(model);
108 		network=serverFacade;
109 		c = new Control(network, model);
110 		serverFacade.start(port);
111 		c.setLocalPlayerID(id);
112 		c.setLocalPlayerName(id);
113 		c.setTask(new ServerTask(),50);
114 	}
115 
116 	private void startClient(String host,int port) throws Exception {
117 		NetworkClientFacadeHolder.setNetworkFacade(new ClientFacade());
118 		NetworkClientFacade clientFacade = NetworkClientFacadeHolder.getNetworkFacade();
119 		clientFacade.setModelInterface(model);
120 		network= clientFacade;
121 		c = new Control(network, model);
122 		String id=clientFacade.join(new InetSocketAddress(host,port));
123 		model.createLocalPlayer(id);
124 		c.setLocalPlayerID(id);
125 		c.setLocalPlayerName(id);
126 		c.setTask(new ClientTask(),200);
127 	}
128 
129 	/***
130 	 * zczytuje argumenty, i w zależności od nich tworzy klasę z odpowiednimi parametrami
131 	 * @param args argumenty
132 	 */
133 	public static void main(String[] args) {
134 		boolean isServer=false;
135 		int port=4000;
136 		String host=null;
137 		String mapFile=null;
138 		try{
139 			if(args[0].equals("server"))
140 				isServer=true;
141 			else
142 				isServer=false;
143 			if(isServer)
144 			{
145 				port=Integer.parseInt(args[1]);
146 				if(args.length>=3)
147 					mapFile=args[2];
148 			}else{
149 				host=args[1];
150 				port=Integer.parseInt(args[2]);
151 				if(args.length>=4)
152 					mapFile=args[3];
153 			}
154 		}catch(Exception ex){
155 			System.out.println("usage: server port [map_file]");
156 			System.out.println("or: client host port [map_file]");
157 			System.exit(0);
158 		}
159 		try{
160 		new Jvb3d(isServer,host,port,mapFile);
161 		}catch(Exception ex){
162 			System.err.println(ex);
163 		}
164 	}
165 }