Foros del Web » Programación para mayores de 30 ;) » Java »

Manejo de protocolos tipo ed2k en mi aplicacion

Estas en el tema de Manejo de protocolos tipo ed2k en mi aplicacion en el foro de Java en Foros del Web. Buenos dias a todos: Estoy intentando establecer un nuevo protocolo para mi aplicación java de forma que cuando pinche en un link del tipo myapp://valor/parametros ...
  #1 (permalink)  
Antiguo 13/05/2010, 04:56
 
Fecha de Ingreso: mayo-2010
Mensajes: 19
Antigüedad: 13 años, 11 meses
Puntos: 0
Manejo de protocolos tipo ed2k en mi aplicacion

Buenos dias a todos:

Estoy intentando establecer un nuevo protocolo para mi aplicación java de forma que cuando pinche en un link del tipo myapp://valor/parametros donde para mi valor es un string mediante el cual identifico que es lo que quiero abrir de mi programa y los parametros pues los parametros q necesito jeje.

Bueno pues para conseguir que el programa se abra con ese enlace no tengo problema es simplementte modificar el registro de windows del siguiente modo:

En HKEY_CLASS_ROOT creamos
myapp
predeterminado -- URL: myapp protocol
URL Protocol -- ""
shell
open
command
predeterminado -- (path al exe) %(parametros)

Hasta aqui todo correcto, con mi instalador he conseguido crear estos valores en el registro de windows. Mi problema es poder obtener los valores de esa URL para abrir una parte de mi aplicación u otra.

Si alguien pudiera echarme una mano sería genial. Muchas gracias de antemano

Última edición por javibrezmes; 13/05/2010 a las 06:37
  #2 (permalink)  
Antiguo 13/05/2010, 06:35
 
Fecha de Ingreso: mayo-2010
Mensajes: 19
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Manejo de protocolos tipo ed2k en mi aplicacion

Mis disculpas se me olvido indicar las clases java que utilizo en mi aplicación:

Haber primero esta el Handler.java que por lo que creo es el que se encarga de recibir la peticion de URL:

Código PHP:
public class Handler extends URLStreamHandler

    
String ventana;
    
String params;

    
// Metodo para parsear la URL de entrada
    
protected void parseURL(URL u,String string,int begin,int end)
    {
        
System.out.println("ENTRA EN PARSE URL");
        
        
String aux string.substring(begin+2,end);    
        
int pos =string.indexOf('/'); 
        
ventana aux.substring(0,pos); 
        
params aux.substring(pos+1);
         
        try 
        {
            
u.getContent();
        } 
        catch (
IOException e
        {
            
e.printStackTrace();
        }
    } 
 
    
// Abrimos la conexion 
    
protected URLConnection openConnection(URL url)throws IOException
    
{     
        
System.out.println("ENTRA EN OPEN CONNECTION");
        
        return new 
org.protocol.myapp.MyappURLConnection(url,ventana,params);
    } 

Luego tenemos la clase que debe extender la URLConnection

Código PHP:
public class MyappURLConnection extends URLConnection 
{

    public static final 
int HTTPport 80;      
    public static 
String[] headerfields null;     
    
String window;
    
String resource;
    
Socket socluURL null;
    
    public 
MyappURLConnection(URL urlString ventanaString params
    {
        
super(url);
        
this.setDoOutput(true);
        
resource params;
        
window ventana;
    }

    public 
void connect() throws IOException 
    
{
             
URLConnection.connected=true
         this
.connected true;
    }
    
    public 
InputStream getInputStream() throws IOException
    
{
        if(
connected==false)
        {
            
connect(); 
        }
        
        
InputStream IS socluURL.getInputStream();

        return 
IS;
    }
    
    public 
Object getContent()throws IOException
    
{  
       
String contentType getContentType();
   
       
       if(
window.equals("ventanaA"))
       {
           
//Instrucciones abrir ventana A
       
}
       else if(
window.equals("ventanaB"))
       {
           
//Instrucciones abrir ventana B
       
}
       else
       {
           
//Instrucciones abrir ventana por defecto
       
}
       
       return 
null;
    }

    public 
String getContentType()
    {    
        
        
StringTokenizer ST = new StringTokenizer(resource,"|");
           
        
int i 1;
        while(
ST.hasMoreTokens())
        {
            if((
% 2) != 0)
            
{
                
//String key = 
                
                
System.out.println("Key-->" ST.nextToken());
                
/* Son las claves */
               
            
}
            else
            {
                
System.out.println("Value-->" ST.nextToken());
                
/* Son los valores */
            
}
            
i++;
        }
        
        return 
null;
        
    }
            
    public 
int getContentLength()
    {
        
StringTokenizer ST=new StringTokenizer(headerfields[2],":");
        
ST.nextToken();
    
        return 
Integer.parseInt(ST.nextToken().trim());       
    }  

Y por ultimo la que debe implementar la URLStreamHandlerFactory

Código PHP:
public class MyappURLStreamHandlerFactory implements URLStreamHandlerFactory 
{
    final private static 
String defaultName "org.protocol.";
    final private static 
String protocol "myapp";
    
    public 
MyappURLStreamHandlerFactory() 
    {
        
createURLStreamHandler(protocol);
    }

    public 
URLStreamHandler createURLStreamHandler(String protocol
    {
        
URLStreamHandler handler;
        
String classPath defaultName protocol ".Handler";
        
        
handler tryClass(classPath);
        if (
handler != null
        {
            return 
handler;
        }
        else
        {
            return 
null;
        }    
    }

    private static 
URLStreamHandler tryClass(String theClass) {
        try 
        {
            Class 
cl = Class.forName(theClass);
            
Object obj cl.newInstance();
            if (
obj instanceof URLStreamHandler
            {
                return (
URLStreamHandlerobj;
            }
        }
        catch (
UnsatisfiedLinkError e) {
        }
        catch (
ClassNotFoundException e) {
        }
        catch (
IllegalAccessException e) {
        }
        catch (
InstantiationException e) {
        }
      
        return 
null;
    }
    

todo ello esta en el paquete: org.protocol.myapp

y para probar utilizo este main y todo correcto

Código PHP:
public static void main(String argv[]) throws Exception 
    

      
        try
        { 
            
// ESTABLEZCO MANUALMENTE EL PROTOCOLO myapp://
            
URL.setURLStreamHandlerFactory(new MyappURLStreamHandlerFactory()); 
            
            
// EJEMPLO DE URL
            
URL url=new URL("myapp://ventanaA/c|56789|def|hola");     
            
            
// OBTENER EL CONTENIDO DE LA URL
            
url.getContent();
        }
        catch(
Exception e)
        {
            
e.printStackTrace();
        }
    } 
Bueeno pues eso el problema es que cuando hago el .exe de mi aplicacion si abre mi programa pero no recibe los parametros de la url ni el valor de la ventana ni naaaaa.
  #3 (permalink)  
Antiguo 17/05/2010, 03:22
 
Fecha de Ingreso: mayo-2010
Mensajes: 19
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Manejo de protocolos tipo ed2k en mi aplicacion

He conseguido que funcione con el codigo que teneis aqui arriba, siempre y cuando el programa este cerrado, al pinchar un enlace del tipo myapp://ventana/parametro puedo recuperar los datos de la url y abrir la ventana que me interese con los parametros de la url.


Lo que necesito ahora es que esta url la pueda recoger en cualquier momento aunque el programa este ejecutandose, alguien sabe como podría hacerlo.

Gracias de antemano
  #4 (permalink)  
Antiguo 24/05/2010, 07:14
 
Fecha de Ingreso: mayo-2010
Mensajes: 19
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: Manejo de protocolos tipo ed2k en mi aplicacion

necesito vuestra ayuda amigos!!!!! nadie puede echarme un cable?

Etiquetas: manejo, tipo, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:28.