Signal.java :  » Java-2D » plar » plar » ClientServer » Java Open Source

Java Open Source » Java 2D » plar 
plar » plar » ClientServer » Signal.java
/*  
  PlAr is Platform Arena: a 2D multiplayer shooting game
  Copyright (c) 2010, Antonio Ragagnin <spocchio@gmail.com>
    All rights reserved.
    
    This file is licensed under the New BSD License.
 */

package plar.ClientServer;

import java.awt.Point;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.DatagramPacket;

import java.net.SocketAddress;
import java.net.SocketException;
import java.util.Arrays;

public class Signal implements Serializable {
  static final long serialVersionUID = 1L;
  public static final byte NONE = 0;
  public static final byte MESSAGE = 1;
  public static final byte POINT = 2;
  public static final byte LOGIN = 3;
  public static final byte SPRITE = 4;
  public static final byte DIRECTION = 5;
  public static final byte INFO = 6;
  public static final byte SCREEN = 7;
  public static final byte INPUT = 8;
  public static final byte STOP = 9;
  public static final byte SPRITEANDSCREEN = 10;
  public static final byte LEVELINFO = 11;

  public static class Login implements Serializable {
    static final long serialVersionUID = 1L;
    public String userName;
    public String playerName;

  }

  public static class LevelInfo implements Serializable {
    static final long serialVersionUID = 1L;
    public String MOTD;
    public Point resolution;
    public float scaleX;
    public float scaleY;

  }

  public static class Info implements Serializable {
    static final long serialVersionUID = 1L;
    public float life;
    public String chat;
  }

  public static class Input implements Serializable {
    static final long serialVersionUID = 1L;
    public int life;
    public String chat;
  }

  public static byte getID(byte[] data) {
    return data[0];
  }

  public static byte getKey(byte[] data) {
    return data[1];
  }

  public static byte getSignal(byte[] data) {
    return data[2];
  }

  public static byte[] setID(byte[] data, byte id) {
    data[0] = id;
    return data;
  }

  public static byte[] setKey(byte[] data, byte key) {
    data[1] = key;
    return data;
  }

  public static byte[] setSignal(byte[] data, byte key) {
    data[2] = key;
    return data;
  }

  public static byte[] concat(byte[] A, byte[] B) {
    byte[] C = new byte[A.length + B.length];
    System.arraycopy(A, 0, C, 0, A.length);
    System.arraycopy(B, 0, C, A.length, B.length);

    return C;
  }

  public static byte[] setBytes(byte[] data, byte id, byte key, byte signal) {

    byte[] info = { id, key, signal };
    // byte [] newData =new byte [data.length+3];
    return concat(info, data);

  }

  public static byte[] getData(byte[] data) {

    return Arrays.copyOfRange(data, 3, data.length);

  }

  public static DatagramPacket send(byte[] o, byte id, byte key, byte signal,
      SocketAddress addr) throws SocketException {
    // System.out.println("SENDING "+Arrays.copyOf(o, 10));
    // System.out.println("TO: "+addr.toString());
    byte[] data = setBytes(o, id, key, signal);
    DatagramPacket p = new DatagramPacket(data, 0, data.length, addr);
    // p.setAddress(addr);
    return p;
  }

  public static DatagramPacket send(Object o, byte id, byte key, byte signal,
      SocketAddress addr) throws SocketException {

    byte[] odata = toByteArray(o);
    byte[] data = setBytes(odata, id, key, signal);
    DatagramPacket p = new DatagramPacket(data, 0, data.length, addr);
    // p.setAddress(addr);
    return p;
  }

  public static byte[] toByteArray(Object obj) {
    byte[] bytes = null;
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    try {
      ObjectOutputStream oos = new ObjectOutputStream(bos);
      oos.writeObject(obj);
      oos.flush();
      oos.close();
      bos.close();
      bytes = bos.toByteArray();
    } catch (IOException ex) {
      ex.printStackTrace();
    }
    return bytes;
  }

  public static Object toObject(byte[] bytes) throws IOException,
      ClassNotFoundException {
    Object obj = null;
    ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
    ObjectInputStream ois = new ObjectInputStream(bis);
    obj = ois.readObject();

    return obj;
  }

  public static byte[] from5IntTo6Bytes(int[] d) {
    byte[] b = new byte[6];
    b[0] = (byte) (d[0] & 0x000000FF);
    b[1] = (byte) ((d[0] & 0x00000300) >> 8);
    b[1] += (byte) ((d[1] & 0x0000003F) << 2);
    b[2] = (byte) ((d[1] & 0x000003C0) >> 6);
    b[2] += (byte) ((d[2] & 0x0000000F) << 4);
    b[3] = (byte) ((d[2] & 0x000003F0) >> 4);
    b[3] += (byte) ((d[3] & 0x00000003) << 6);
    b[4] = (byte) ((d[3] & 0x000003FC) >> 2);
    b[5] = (byte) d[4];
    return b;
  }

  public static int[] from6ByteTo5Int(byte[] d) {
    int[] b = new int[5];
    b[0] = (int) ((d[0] & 0x000000FF) | ((d[1] & 0x00000003) << 8));
    b[1] = (int) ((d[1] & 0x000000FC) >> 2 | ((d[2] & 0x0000000F) << 6));
    b[2] = (int) ((d[2] & 0x000000F0) >> 4 | ((d[3] & 0x0000003F) << 4));
    b[3] = (int) ((d[3] & 0x000000C0) >> 6 | ((d[4] & 0x000000FF) << 2));

    // b[1] = ( ((int) (d[1] & 0xFC)) >>2) | ( ((int) (d[2] & 0x0F)) << 4);
    // b[2] = ( ((int) (d[2] & 0xF0)) >>4) | ( ((int) (d[3] & 0x3F)) << 4);
    // b[3] = ( ((int) (d[3] & 0xC0)) >>6) | ( ((int) (d[4] & 0xFF)) << 4);
    b[4] = (int) (d[5] & 0x000000FF);

    return b;
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.