/** * @(#)UDPServer.java * * UDPServer application * * @author Oscar J. Gomez "Corvinex" * @version 1.00 2009/6/15 */ import java.util.StringTokenizer; import java.util.LinkedList; import java.io.IOException; import java.net.DatagramSocket; import java.net.DatagramPacket; import java.net.InetAddress; public class UDPServer { public static void main(String[] args) { new Game("UDP Server Game").start(); } } class Game extends Thread { //the server class ServerThread server; //frames per second counter variables long prevTime = System.currentTimeMillis(); float elapsedTime = 0; int prevSec = 0; int fps = 0; int frameCount = 0; //game flag boolean gameRunning = true; //player list PlayerList playerList = new PlayerList(); public Game(String name) { super(name); server = new ServerThread(playerList); server.start(); } public void run() { while(gameRunning) { //all game related code can go here// //move all players playerList.advance(elapsedTime); calcElapsedTime(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); gameRunning = false; } } } public void calcElapsedTime() { elapsedTime = (float)(System.currentTimeMillis() - prevTime); prevTime = System.currentTimeMillis(); if(prevSec != (int)(System.currentTimeMillis()/1000)) { fps = frameCount; frameCount = 0; } frameCount++; prevSec = (int)(System.currentTimeMillis()/1000); } } class ServerThread extends Thread { protected DatagramSocket socket = null; protected DatagramPacket packet = null; protected boolean runServer = true; protected PlayerList playerList; public ServerThread(PlayerList pL) { super("Server Thread"); playerList = pL; try { //creates the socket socket = new DatagramSocket(5556); System.out.println(InetAddress.getLocalHost().getHostName()); System.out.println(InetAddress.getLocalHost().getHostAddress()); } catch(IOException e) { e.printStackTrace(); } } public void run() { while(runServer) { try { receivePacket(); sendPacket(); } catch(IOException e) { e.printStackTrace(); runServer = false; } } socket.close(); } public void receivePacket() throws IOException { //receive message from client byte[] buf = new byte[256]; packet = new DatagramPacket(buf, buf.length); socket.receive(packet); //translate message in a thread String message = new String(packet.getData(), 0, packet.getLength()); Translator translator = new Translator(playerList,message); translator.start(); } public void sendPacket() throws IOException { //create message of all xs and ys of all players byte[] buf = playerList.toString().getBytes(); //send the message to the client to the given address and port InetAddress address = packet.getAddress(); int port = packet.getPort(); packet = new DatagramPacket(buf, buf.length, address, port); socket.send(packet); } } class Translator extends Thread { protected PlayerList playerList; protected String message; public Translator(PlayerList pL,String m) { playerList = pL; message = m; } public synchronized void run() { StringTokenizer part = new StringTokenizer(message); Player player = playerList.getByName(part.nextToken()); player.resetKeys(); int temp = Integer.parseInt(part.nextToken()); if(temp==1) player.setUp(true); else player.setUp(false); temp = Integer.parseInt(part.nextToken()); if(temp==1) player.setDown(true); else player.setDown(false); temp = Integer.parseInt(part.nextToken()); if(temp==1) player.setLeft(true); else player.setLeft(false); temp = Integer.parseInt(part.nextToken()); if(temp==1) player.setRight(true); else player.setRight(false); } } class PlayerList { //player list protected LinkedList list = new LinkedList(); public PlayerList() { } public void advance(float elapsedTime) { for(int x=list.size()-1;x>=0;x--) { list.get(x).advance(elapsedTime); if(list.get(x).getKick()) { System.out.println(list.get(x).getName()+" Timed Out"); list.remove(x); } } } public String toString() { String info = ""; Player player; for(int x=0;xkickTime) kick = true; } public void move(float eT) { if(left && right) { } else if(left) { x_pos -= speed * (eT/1000); } else if(right) { x_pos += speed * (eT/1000); } if(up && down) { } else if(up) { y_pos -= speed * (eT/1000); } else if(down) { y_pos += speed * (eT/1000); } } public void resetKeys() { timeOut=0; left=false; right=false; up=false; down=false; } public boolean getKick() { return kick; } public String getName() { return name; } public String getIP() { return ip; } public float getX() { return x_pos; } public float getY() { return y_pos; } public void setName(String n) { name = n; } public void setIP(String i) { ip = i; } public void setX(float x) { x_pos = x; } public void setY(float y) { y_pos = y; } public void setLeft(boolean l) { left = l; } public void setRight(boolean r) { right = r; } public void setUp(boolean u) { up = u; } public void setDown(boolean d) { down = d; } }