package pacman;
//ADMINISTRA LAS CONEXIONES QUE RECIBE DE ClientePacman-------------------------------
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.ArrayList;
public class ClienteServidor extends Thread {
private Socket socket;
private static ArrayList<Socket> lista ;
private DataInputStream entradaDatos;
private DataOutputStream salidaDatos;
private int nroCliente ;
private SevidorPacman servidor ;
private Partida partida ;
private int aux=0;
private static int puntajePacman=0;
private static int puntajeFantVerde=0;
private static int puntajeFantCian=0;
private static int puntajeFantNaranja=0;
private static int puntajeFantAmarillo=0;
private static int puntajeMayor=0;
private static String Usuario;
private static BaseDatos bd;
public ClienteServidor (Socket Cliente,
ArrayList listcli,
int nrocliente,
SevidorPacman server,
Partida partida,
String user,
BaseDatos bdatos
) throws IOException{
this.socket = Cliente;
lista = listcli;
this.nroCliente = nrocliente;
servidor = server ;
this.partida = partida;
Usuario = user;
bd = bdatos;
if(nroCliente==1){
partida.getPantalla().pacmanVisible();
}
else if(nroCliente==2){
partida.getPantalla().fantasmaVerdeVisible();
}
else if(nroCliente==3){
partida.getPantalla().fantasmaCianVisible();
}
else if(nroCliente==4){
partida.getPantalla().fantasmaNaranjaVisible();
}
else{
partida.getPantalla().fantasmaAmarilloVisible();
}
try {
entradaDatos = new DataInputStream(socket.getInputStream());
salidaDatos = new DataOutputStream(socket.getOutputStream());
} catch (IOException ex) {
System.out.println("ERROR: problemas al crear los stream de entrada y salida : " + ex.getMessage());
}
}
public void run(){
String mensajeRecibido;
boolean conectado = true;
while (conectado) {
try {
mensajeRecibido = entradaDatos.readUTF();
int direccion = Integer.parseInt(mensajeRecibido);
partida.getPantalla().setearDirrecion(direccion,nroCliente);
/*for (Socket c : lista ) {
DataOutputStream salidamensaje = new DataOutputStream (c.getOutputStream());
salidamensaje.writeUTF( "Cliente " + nroCliente + " : " + mensajeRecibido);
} */
} catch (IOException ex) {
System.out.println("Cliente con la IP " + socket.getInetAddress().getHostName() + " desconectado.");
conectado = false;
servidor.decrementarCliente();
// Si se ha producido un error al recibir datos del cliente se cierra la conexion con el.
try {
entradaDatos.close();
salidaDatos.close();
} catch (IOException ex2) {
System.out.println("ERROR: problemas al cerrar los stream de entrada y salida :" + ex2.getMessage());
}
}
}
}
public static void envioDeMovimiento(int nroCliente, int direccion, int posX, int posY, int transformacion) throws IOException {
for (Socket c : lista ) {
DataOutputStream salidamensaje = new DataOutputStream (c.getOutputStream());
try {
salidamensaje.writeUTF(nroCliente+" "+direccion+" "+posX+" "+posY+" "+transformacion);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void cambioMovPorControlColision(int i, int j, int k) {
try {
envioDeMovimiento(1,Direccion.getActualDir(1),i,j,0);
} catch (IOException e) {
System.out.println("ERROR: no se pudo enviar el movimiento");
e.printStackTrace();
}
}
public static void setPuntaje(int cliente, int puntaje) {
if(cliente==1){
puntajePacman+=puntaje;
if(puntajePacman>puntajeMayor)
puntajeMayor=puntajePacman;
}
else if(cliente==2){
puntajeFantVerde+=puntaje;
if(puntajeFantVerde>puntajeMayor)
puntajeMayor=puntajeFantVerde;
}
else if(cliente==3){
puntajeFantCian+=puntaje;
if(puntajeFantCian>puntajeMayor)
puntajeMayor=puntajeFantCian;
}
else if(cliente==4){
puntajeFantNaranja+=puntaje;
if(puntajeFantNaranja>puntajeMayor)
puntajeMayor=puntajeFantNaranja;
}
else if(cliente==5){
puntajeFantAmarillo+=puntaje;
if(puntajeFantAmarillo>puntajeMayor)
puntajeMayor=puntajeFantAmarillo;
}
}
public static void enviarPuntajes() throws IOException {
int cont=1;
int cantMayores=0;
if(puntajePacman==puntajeMayor)
cantMayores++;
if(puntajeFantVerde==puntajeMayor)
cantMayores++;
if(puntajeFantCian==puntajeMayor)
cantMayores++;
if(puntajeFantNaranja==puntajeMayor)
cantMayores++;
if(puntajeFantAmarillo==puntajeMayor)
cantMayores++;
for (Socket c : lista ) {
DataOutputStream salidamensaje = new DataOutputStream (c.getOutputStream());
try {
if(cont==1){
if(puntajePacman==puntajeMayor){
if(cantMayores==1){
salidamensaje.writeUTF("VICTORIA "+puntajePacman);
bd.insertarHistorial(Usuario, "P", 1, puntajePacman);
}
else{
salidamensaje.writeUTF("EMPATE "+puntajePacman);
bd.insertarHistorial(Usuario, "P", 2, puntajePacman);
}
}
else{
salidamensaje.writeUTF("DERROTA "+puntajePacman);
bd.insertarHistorial(Usuario, "P", 0, puntajePacman);
}
}
else if(cont==2){
if(puntajeFantVerde==puntajeMayor){
if(cantMayores==1){
salidamensaje.writeUTF("VICTORIA "+puntajeFantVerde);
bd.insertarHistorial(Usuario, "F", 1,puntajeFantVerde );
}
else{
salidamensaje.writeUTF("EMPATE "+puntajeFantVerde);
bd.insertarHistorial(Usuario, "F",2,puntajeFantVerde );
}
}
else{
salidamensaje.writeUTF("DERROTA "+puntajeFantVerde);
bd.insertarHistorial(Usuario, "F", 0,puntajeFantVerde );
}
}
else if(cont==3){
if(puntajeFantCian==puntajeMayor){
if(cantMayores==1){
salidamensaje.writeUTF("VICTORIA "+puntajeFantCian);
bd.insertarHistorial(Usuario, "F", 1, puntajeFantCian);
}
else{
salidamensaje.writeUTF("EMPATE "+puntajeFantCian);
bd.insertarHistorial(Usuario, "F", 2, puntajeFantCian);
}
}
else{
salidamensaje.writeUTF("DERROTA "+puntajeFantCian);
bd.insertarHistorial(Usuario, "F", 0, puntajeFantCian);
}
}
else if(cont==4){
if(puntajeFantNaranja==puntajeMayor){
if(cantMayores==1){
salidamensaje.writeUTF("VICTORIA "+puntajeFantNaranja);
bd.insertarHistorial(Usuario, "F", 1, puntajeFantNaranja);
}
else{
salidamensaje.writeUTF("EMPATE "+puntajeFantNaranja);
bd.insertarHistorial(Usuario, "F", 2, puntajeFantNaranja);
}
}
else{
salidamensaje.writeUTF("DERROTA "+puntajeFantNaranja);
bd.insertarHistorial(Usuario, "F", 0, puntajeFantNaranja);
}
}
else if(cont==5){
if(puntajeFantAmarillo==puntajeMayor){
if(cantMayores==1){
salidamensaje.writeUTF("VICTORIA "+puntajeFantAmarillo);
bd.insertarHistorial(Usuario, "F", 1, puntajeFantAmarillo);
}
else{
salidamensaje.writeUTF("EMPATE "+puntajeFantAmarillo);
bd.insertarHistorial(Usuario, "F", 2, puntajeFantAmarillo);
}
}
else{
salidamensaje.writeUTF("DERROTA "+puntajeFantAmarillo);
bd.insertarHistorial(Usuario, "F", 0, puntajeFantAmarillo);
}
}
cont++;
} catch (IOException e) {
System.out.println("ERROR: no se pudo enviar el cartel de estado con el puntaje");
e.printStackTrace();
}
}
}
public static void eliminarSuperBola(int j, int i, int k) throws IOException {
for (Socket c : lista ) {
DataOutputStream salidamensaje = new DataOutputStream (c.getOutputStream());
try {
salidamensaje.writeUTF(j+" "+i+" "+k);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
No hay comentarios:
Publicar un comentario