/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package Protocole; import Securite.MyCertificate; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; public class NetworkServerMobile { private ServerSocket socketServeur; private Socket socketClient; RMP protocole; boolean connected; MyCertificate myCertificate; public NetworkServerMobile(int port, MyCertificate myCertificate){ this.myCertificate = myCertificate; protocole = new RMP(myCertificate, 123, true); try { socketServeur = new ServerSocket(port); connected = true; System.out.println("Socket créer"); } catch (IOException ex) { Logger.getLogger(NetworkServerMobile.class.getName()).log(Level.SEVERE, null, ex); connected = false; } } public NetworkServerMobile(Socket socket, MyCertificate myCertificate){ protocole = new RMP(myCertificate, 123, true); this.socketClient = socket; this.connected = true; } public boolean accept(){ try { System.out.println("En attente d'un client"); this.setSocketClient(socketServeur.accept()); System.out.println("client connecté"); return true; } catch (IOException ex) { Logger.getLogger(NetworkServerMobile.class.getName()).log(Level.SEVERE, null, ex); return false; } } public void disconnect(){ if(!socketServeur.isClosed()){ try { socketServeur.close(); System.out.println("Déconnection réussie"); } catch (IOException ex) { Logger.getLogger(NetworkServerMobile.class.getName()).log(Level.SEVERE, null, ex); } } } public void disconnectClient(){ if(!socketClient.isClosed()){ try { getSocketClient().close(); System.out.println("Déconnection client réussie"); } catch (IOException ex) { Logger.getLogger(NetworkServerMobile.class.getName()).log(Level.SEVERE, null, ex); } } } public boolean isConnected(){ return connected; } public void send(PacketCom packet){ if(this.isConnected()){ try { String message = packetToString(packet); OutputStream os = this.socketClient.getOutputStream(); DataOutputStream out = new DataOutputStream(os); out.writeUTF(message); } catch (IOException ex) { Logger.getLogger(NetworkServerMobile.class.getName()).log(Level.SEVERE, null, ex); } }else{ System.out.println("Socket non connectée"); } } public PacketCom receive() throws Exception{ InputStream is = null; try{ is = this.socketClient.getInputStream(); DataInputStream in = new DataInputStream(is); String message = in.readUTF(); PacketCom packet = stringToPacket(message); PacketCom MessageToClient = protocole.messageFromClient(packet); return MessageToClient; }catch(Exception ex){ this.disconnectClient(); throw (Exception)ex; } } public Socket getSocketClient() { return socketClient; } public void setSocketClient(Socket socketClient) { this.socketClient = socketClient; } public String packetToString(PacketCom packet){ String type = packet.getType(); String msg = ""; msg += type; msg += "#"; if(packet.getObjet().getClass().isInstance(Object[].class)){ Object[] data = (Object[]) packet.getObjet(); for(Object elm : data){ if(elm.getClass().isInstance(int.class)){ int var = (int)elm; String varString = String.valueOf(var); msg += varString; }else if(elm.getClass().isInstance(String.class)){ String var = (String)elm; msg += var; } msg += ";"; } }else if(packet.getObjet().getClass().isInstance(String.class)){ String elm = (String) packet.getObjet(); msg += elm; msg += ";"; }else if(packet.getObjet().getClass().isInstance(int.class)){ int elm = (int) packet.getObjet(); msg += String.valueOf(elm); msg += ";"; }else if(packet.getObjet().getClass().isInstance(Integer.class)){ int elm = (int) packet.getObjet(); msg += String.valueOf(elm); msg += ";"; }else{ try{ int num = (int) packet.getObjet(); msg += String.valueOf(num); msg += ";"; }catch(Exception ex){ } } return msg; } public PacketCom stringToPacket(String message){ String[] split1 = message.split("#"); String type = split1[0]; if(split1.length > 1){ String values = split1[1]; String[] split2 = values.split(";"); Vector<String> vec = new Vector<String>(); for(String elm : split2){ vec.add(elm); } Object[] infos = vec.toArray(); PacketCom packet = new PacketCom(type, (Object)infos); packet = corrigerPacket(packet); return packet; }else{ return new PacketCom(type, null); } } private PacketCom corrigerPacket(PacketCom packet) { String type = packet.getType(); Object contenu = (Object) packet.getObjet(); PacketCom packetRetour = packet; if(type.equals("LOGIN_VOY_NEXT_STEP")){ Object[] data = (Object[]) contenu; String login = (String)data[0]; String digest = (String)data[1]; String number = (String)data[2]; int numberCorrect = Integer.parseInt(number); byte[] digestCorrect = Base64.decode(digest); Object[] retour = {login, digestCorrect, numberCorrect}; packetRetour.setObjet((Object)retour); }/*else if(type.equals("BROOM")){ Object[] data = (Object[]) contenu; String categorie = (String)data[0]; String typeChambre = (String)data[1]; String date = (String)data[2]; String nbNuit = (String)data[3]; }*/ return packetRetour; } }