package Virtual;

import java.net.Socket;

import java.io.InputStream;
import java.io.OutputStream;

import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

import Encoding.base64;

public class Packet {

    public Socket Client;
    
    public OutputStream co;
    public InputStream ci;

    public Packet(Socket client){

        this.Client = client;

        try{

        co = Client.getOutputStream();
        new BufferedWriter(new OutputStreamWriter(co));
        ci = Client.getInputStream();

        }catch (IOException ex)
        {
           System.out.println("Errore Socket: " + ex);
        }
    }

        public boolean SendPacket(String data){

            try {
                co.write(VirtualUser.StringToByte(data + (char)1));
                co.flush();
                System.out.println("O->> " + data + (char)1); //Packet Output
              } catch (IOException ex) {
               System.out.println("Eccezione nell'invio dei dati! "+ex.getMessage());
               return false;
              }
                return true;
         }

        public String ReadPacket(){

               byte[] buffer = new byte[1024];
                
               try{

                ci.read(buffer);

                int i = 0;
                for(i = 0;i<1024;i++){
                 if(buffer[i] == 0){break;}
                }
                int size = i;
                byte[] tot = new byte[size];
                for(i = 0;i<size;i++){
                 tot[i] = buffer[i];
                }
                buffer = null;
                String fin = new String(tot, "UTF-8");
                return fin;

              }catch(Exception ex){
                System.out.println("Eccezione nella ricezione dei dati! "+ex.getMessage());
                buffer = null;
                return null;
              }
          }

        /*public String ReadPacket1(){

               byte[] buffer = new byte[1024];

               try{

                ci.read(buffer);

                int lengh = base64.Decode((char)buffer[1] + "" + (char)buffer[2]);
                String finalstring = "";
                for(int e=0; e<lengh+3; e++)
                {
                   finalstring += (char)buffer[e];
                }

                byte[] utf8 = finalstring.getBytes("UTF-8");
                String string = new String(utf8, "UTF-8");

                return string;
             
              }catch(Exception ex){
                System.out.println("Eccezione nella ricezione dei dati! "+ex.getMessage());
                buffer = null;
                return null;
              }
          }
        */
        /*public String ReadPacket1(){

               byte[] buffer = new byte[1024];

               try{

                ci.read(buffer);

                int lengh = base64.Decode((char)buffer[1] + "" + (char)buffer[2]);

                byte[] finale = new byte[lengh+3];
                
                for(int e=0; e<lengh+3; e++)
                {
                   finale[e] += buffer[e];
                }

                //byte[] utf8 = finalstring.getBytes("UTF-8");
                String string = new String(finale, "UTF-8");

                return string;

              }catch(Exception ex){
                System.out.println("Eccezione nella ricezione dei dati! "+ex.getMessage());
                buffer = null;
                return null;
              }
          }*/


}
