public void readMessage(InputStream in) throws IOException{
//		if(!intro){throw new RuntimeException("Haven't called readHandShake() till completion!?!");}
		while(in.available()>0){
			if(size==-1){
				off+=in.read(sizeBuf, off, 4-off);
				if(off == 4){
					off = 0;
					size = ByteUtils.readInt(sizeBuf,0);
					buffer = new byte[size];
					
					if(size>1024*1024*10 || size<0){
						throw new IOException("INVALID PARSE EXCEPTION "+size);
					}
				}
			}else{
				try{
				off+=in.read(buffer, off, size-off);
				}catch(Exception e){
					System.out.println("ERROR: Size: "+size+" off:"+off);
					throw new IOException("They dont talk to right!");
				}
				
				if(off==size){
					if(size!=0){//zero is just keep alive.
						PeerMessage pm = from(buffer);
						if(pm!=null)
						queue.add(pm);
					}
					off=0;//reset state variables.
					size=-1;//reset state variables.
					
				}
			}
		}
	}