package in; import Packet.TransportPacket; import inout.Controler; import inout.Protocol; import java.nio.ByteBuffer; public class Demux { // acces au controler private Controler controler; // un packet private TransportPacket p; // l'identifiant du client private String imei; // le buffer de lecture private ByteBuffer buffer; // variables de controle private boolean partialDataExpected, reading; public Demux(Controler s, String i) { imei = i; controler = s; reading = true; partialDataExpected = false; } public boolean receive(ByteBuffer buffer) throws Exception { while (reading) { if(!partialDataExpected) //si on n'attend pas de donn�es partielles(dans le cas d'un paquet pas re�ue enti�rement) { // si la taille du buffer est insuffisante if ((buffer.limit() - buffer.position()) < Protocol.HEADER_LENGTH_DATA) { return true; } } // dans le cas d'un paquet partiellement recue if (partialDataExpected) partialDataExpected = p.parseCompleter(buffer); else { p = new TransportPacket(); partialDataExpected = p.parse(buffer); } if (partialDataExpected) return true; else controler.Storage(p, imei); } reading = true; return true; } public void setImei(String i) { imei = i; } }