📄 multiplayerserver.java
字号:
/* * Copyright (c) 2002, 2003 Sun Microsystems, Inc. All Rights Reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * - Redistribution of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - Redistribution 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 Sun Microsystems, Inc., 'Java', 'Java'-based * names, or the names of contributors may be used to endorse or promote * products derived from this software without specific prior written * permission. * This software is provided "AS IS," without a warranty of any kind. ALL * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * You acknowledge that this software is not designed, licensed or * intended for use in the design, construction, operation or maintenance * of any nuclear facility. $Id: MultiPlayerServer.java,v 1.1 2003/05/16 00:16:01 zull Exp $ */package com.sun.j2me.blueprints.slugs.server;import com.sun.j2me.blueprints.slugs.shared.*;import java.io.*;import java.net.*;import java.util.List;import java.util.Vector;/** * This class implements a generic multiplayer * server. The name of the class of the actual * game engine is passed in as an argument to * the constructor. The server listens for * incoming connections, and spawns off * ServerConnection instances for each new * connection. */public class MultiPlayerServer implements Server, Runnable, CommunicationDelegate { private GameEngine engine; private List list; /** * Construct a new instance of the server. Create * a game engine instance matching game 'game'. */ public MultiPlayerServer(String game) { try { engine = (GameEngine) Class.forName("com.sun.j2me.blueprints.slugs.server." + game + "Engine").newInstance(); } catch (Exception e) { e.printStackTrace(); System.out.println("*** MultiPlayerServer.MultiPlayerServer(): cannot create engine for '" + game + "': " + e); } engine.setDelegate(this); Thread t1 = new Thread(engine); t1.start(); list = new Vector(); Thread t2 = new Thread(this); t2.start(); } /** * Distribute game state update to all clients */ public synchronized void distributeUpdate(Frame frame, int frame_no) { ServerConnection conn; Message msg = new Message(frame_no, frame); for (int i = 0; i < list.size(); i++) { conn = (ServerConnection) list.get(i); conn.sendMessage(msg); } } /** * Remove a client connection */ public synchronized void removeConnection(ServerConnection conn) { list.remove(conn); System.out.println("removed connection for player " + conn.getPlayerID()); System.out.println("connection list size is now " + list.size()); } /** * main loop */ public void run() { ServerSocket socket; try { socket = new ServerSocket(PORT); System.out.println("multiplayer server listening @ " + PORT); for (; ; ) { if (list.size() >= engine.getMaxPlayerCount()) { // System.out.println("max number of players connected, not currently listening for new connections..."); try { Thread.sleep(5000); } catch (InterruptedException e) {} } else { synchronized (this) { list.add(new ServerConnection(engine, socket.accept(), this)); } } } } catch (IOException ioe) { System.out.println("*** MultiPlayerServer.run(): " + ioe); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -