📄 serverconnection.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: ServerConnection.java,v 1.2 2003/05/29 22:39:15 wildcard Exp $ */package com.sun.j2me.blueprints.slugs.server;import com.sun.j2me.blueprints.slugs.shared.*;import java.io.*;import java.net.*;/** * Instances of this class track client * connections for the server. */public class ServerConnection implements Runnable { private MultiPlayerServer server; private Socket socket; private DataInputStream in; private DataOutputStream out; private GameEngine engine; private int player_id; private Message err; private boolean done; /** * Create a new instance for use with game engine 'engine', * socket 'socket', and server 'server'. */ public ServerConnection(GameEngine engine, Socket socket, MultiPlayerServer server) { this.server = server; this.socket = socket; this.engine = engine; done = false; err = new Message(Message.ALL_FRAMES, Message.ERROR, 0); Thread thread = new Thread(this); thread.start(); } private synchronized void handleSignup() { player_id = engine.addPlayer(); if (player_id < 0) { System.out.println("ServerConnection.handleSignup(): engine refused player sign-up"); handleError(); return; } System.out.println("signed up player " + player_id); Message msg = new Message(Message.ALL_FRAMES, Message.SIGNUP_ACK, player_id); try { msg.archive(out); } catch (IOException e) { System.out.println("***: could not send msg " + err); } } private void handleClientStatus(Message msg) { engine.updatePlayer(msg.getFrameNumber(), player_id, msg.getBody()[0]); } public int getPlayerID() { return player_id; } private void handleSignoff() { engine.removePlayer(player_id); done = true; } private void handleError() { try { err.archive(out); } catch (IOException e) { System.out.println("***: could not send msg " + err); } done = true; } /** * Send a message to the client connected to this instance */ public synchronized void sendMessage(Message msg) { try { msg.archive(out); } catch (IOException e) { System.out.println("***: could not send msg " + msg); } } /** * main loop */ public void run() { Message msg; try { in = new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); while (!done) { msg = Message.createFromStream(in); switch (msg.getType()) { case Message.SIGNUP: handleSignup(); break; case Message.CLIENT_STATUS: handleClientStatus(msg); break; case Message.SIGNOFF: handleSignoff(); break; default: handleError(); break; } } in.close(); out.close(); socket.close(); } catch (Exception ioe) { System.out.println("*** ServerConnection.run(): " + ioe); server.removeConnection(this); } handleSignoff(); server.removeConnection(this); System.out.println("player " + player_id + " disconnected."); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -