Package Client

Source Code of Client.ClientNetwork

package Client;


import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Queue;

import Global_Package.Enums;
import clientMessages.AlterSpell;
import clientMessages.AlterUnit;
import clientMessages.ClientEventIn;
import clientMessages.DrawEffect;
import clientMessages.MoveSpell;
import clientMessages.MoveUnit;
import clientMessages.NewSpell;
import clientMessages.NewUnit;
import clientMessages.RemoveSpell;
import clientMessages.RemoveUnit;



public class ClientNetwork {
  private Socket tcpOut;
  private ObjectOutputStream out;
  private ObjectInputStream in;
  private int connectionID;
  private DataIn p;
  private String ip;
  Queue<ClientEventIn> EventQue;
 
//  private  Queue<RenderEvent> firstTimePopulateEventQueue(){
//    EventQue=new  ConcurrentLinkedQueue();
//    //talk network here.
//    return EventQue;
//   
//  }

  public ClientNetwork(String Ip,Queue<ClientEventIn> EvQ,boolean b, int baseChar) throws IOException, InterruptedException{
   
    tcpOut=new Socket(Ip,557);
    ip=Ip;
    if(tcpOut.getRemoteSocketAddress() ==null){
      //baddd i need real handling....
      System.out.println("Boom!");
    }
   
    // set up I/O for out (TCP)
    System.out.println("Connected to " + tcpOut.getInetAddress().getHostName());
    out = new ObjectOutputStream(tcpOut.getOutputStream());
    out.flush();
    in = new ObjectInputStream(tcpOut.getInputStream());
   
    out.writeByte(0); //send ID if reconnecting.....
    out.flush();
   
    connectionID=(int)in.read(); //get ID
    System.out.println("ID:"+connectionID);
    EventQue=EvQ;
   
    //send char TYPE
    out.writeInt(baseChar);
    out.flush();
    //??? state ???
    // Join detected --> send current state.
   
   
    p=new DataIn(tcpOut.getInetAddress(),b);
    p.start();
   
    System.out.print("Network rdy! \n");
  }
 
  private class DataIn extends Thread {
    DatagramSocket  socket;
      DatagramPacket  packet;
      InetAddress     address;
      private ObjectInputStream inB;
      private ObjectOutputStream outB;
      Socket tcpIn;
      final boolean  isUdp;
      int             port = 13;
     
      DataIn(InetAddress address, boolean b) throws UnknownHostException, IOException{
        isUdp=b;
        if(isUdp)
          socket= new DatagramSocket(553); //receiving port
        else{
//          tcpIn=new Socket(ip,557);
//          outB = new ObjectOutputStream(tcpIn.getOutputStream());
//          outB.flush();
//          outB.write(connectionID); //assocaites other tcp connection with this one (this is offical in stream...)
//          inB=new ObjectInputStream(tcpIn.getInputStream());
        }
       
       
      }
     
   
    public void run(){
      int ID=0;
      int OwnerID=0;
      int type=0;
      float x=0;
      float y=0;
      int property=0;
      int newValue=0;
      float theta=0;
     
      while(true){ //make safe later
        byte[] message = new byte[1024]; //Max message = 1024 (chat)
        if(isUdp){
          DatagramPacket packet=new DatagramPacket(message,message.length); //MSG IN
          try {
            socket.receive(packet);
          } catch (IOException e) {
            // Tshit go booom?
            System.out.println("Packet error in recieving, gana slap my nuts?");
          }
        }else{
          try {
            in = new ObjectInputStream(tcpOut.getInputStream());
            int i=in.read(message);
            System.out.println(i);
          } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Packet error in recieving, gana slap my nuts?");
          }
        }
       
     
        //System.out.print(message[0]);
        switch(message[0]){
         
        case Enums.drawEffect://14 bytes
          type=Enums.toInt(Enums.subarray(message,1,4));
          x=Enums.toFloat(Enums.subarray(message,5,4));
          y=Enums.toFloat(Enums.subarray(message,9,4));
          theta=Enums.toFloat(Enums.subarray(message,13,4));
          EventQue.add(new DrawEffect(type,x,y,theta));
          break;
         
        case Enums.newSpell://18 bytes
         
          ID=Enums.toInt(Enums.subarray(message,1,4));
          OwnerID=Enums.toInt(Enums.subarray(message,1,4));
          type=Enums.toInt(Enums.subarray(message,9,4));
          x=Enums.toFloat(Enums.subarray(message,13,4));
          y=Enums.toFloat(Enums.subarray(message,17,4));
          EventQue.add(new NewSpell(ID,OwnerID,type,x,y));
          break;
        case Enums.moveSpell://14 bytes
          type=Enums.toInt(Enums.subarray(message,1,4));
          x=Enums.toFloat(Enums.subarray(message,5,4));
          y=Enums.toFloat(Enums.subarray(message,9,4));
          EventQue.add(new MoveSpell(type,x,y));
         
          break;
        case Enums.newUnit://18 bytes
          ID=Enums.toInt(Enums.subarray(message,1,4));
          OwnerID=Enums.toInt(Enums.subarray(message,1,4));
          type=Enums.toInt(Enums.subarray(message,9,4));
          x=Enums.toFloat(Enums.subarray(message,13,4));
          y=Enums.toFloat(Enums.subarray(message,17,4));
          EventQue.add(new NewUnit(ID,OwnerID,type,x,y));
          break;
        case Enums.moveUnit://14 bytes
          ID=Enums.toInt(Enums.subarray(message,1,4));
          x=Enums.toFloat(Enums.subarray(message,5,4));
          y=Enums.toFloat(Enums.subarray(message,9,4));
          //System.out.println(x+","+y);
          EventQue.add(new MoveUnit(ID,x,y));
          break;
         
        case Enums.removeSpell: //6 bytes
          ID=Enums.toInt(Enums.subarray(message,1,4));
          EventQue.add(new RemoveSpell(ID));
          break;
         
        case Enums.removeUnit://6 bytes
          ID=Enums.toInt(Enums.subarray(message,1,4));
          EventQue.add(new RemoveUnit(ID));
          break;
         
        case Enums.alterSpell://14 bytes
          ID=Enums.toInt(Enums.subarray(message,1,4));
          property=Enums.toInt(Enums.subarray(message,5,4));
          newValue=Enums.toInt(Enums.subarray(message,9,4));
          EventQue.add(new AlterSpell(ID,property,newValue));
          break;
         
        case Enums.alterUnit://14 bytes
          ID=Enums.toInt(Enums.subarray(message,1,4));
          property=Enums.toInt(Enums.subarray(message,5,4));
          newValue=Enums.toInt(Enums.subarray(message,9,4));
          EventQue.add(new AlterUnit(ID,property,newValue));
          break;
         
        case Enums.pushChat: //up to 1024?
          //?
        //  EventQue.add(new PushChat(Enums.toString(Enums.subarray(message,1,message.length))));
          break;
        }
       
      }
    }
   
  }
 
  //out
  public void pushPlayerMotion(int ID, int x, int y) throws IOException{
    // first byte determines packet type
    out.writeByte(Enums.sendMoveUnit);
    out.flush();
    out.writeInt(ID);
    out.flush();
    out.writeInt(x);
    out.flush();
    out.writeInt(y);
    out.flush();
  }
 
  public void pushSpellCast(int type, int IDsource, int x, int y, int lvl, double theta) throws IOException{
    // first byte determines packet type
    out.writeByte(Enums.sendCastSpell);
    out.flush();
    out.writeInt(type);
    out.flush();
    out.writeInt(IDsource);
    out.flush();
    out.writeInt(lvl);
    out.flush();
    out.writeInt(x);
    out.flush();
    out.writeInt(y);
    out.flush();
    out.writeDouble(theta);
    out.flush();
   
  }
 
  //1023 or less bytes or server will overflow >.>
  public void pushChat(String text) throws IOException{
    // first byte determines packet type
   
    out.write(text.getBytes());
    out.flush();
  }
 
}
TOP

Related Classes of Client.ClientNetwork

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.