Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Más CDDB :-(

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Más CDDB :-( Responder citando

Vuelvo a la carga con mi obsesión de conectarme a Cddb o a FreeDB. Estaba tratando de adaptar a Builder 5 un código que me pasó XyVy en Builder 6 y me estoy encontrando un problema. El código es este:
Código:
void __fastcall TfCddb::TcpConnected(TObject *Sender)
{
     int i, numTracks;
     TOC toc;

     memset(cBuffer, '\0', sizeof(cBuffer));
     cCadTcp = "cddb hello Angel " + cIp + " MiCddb v.1\r\n";

     Tcp->WriteLn(cCadTcp);
     cCadTcp = Tcp->ReadLn(EOL, 1000, -1);
     Consola->Lines->Add("");
     Consola->Lines->Add(Now().FormatString("hh:nn:ss'  »»» '") + iif(cCadTcp.IsEmpty(), "Sin conexión a ", "Conectado a ") + Servidor->Text);

     if (cCadTcp.IsEmpty())
          return;

     Consola->Lines->Add(Now().FormatString("hh:nn:ss'  '") + cCadTcp);           
     for (int interfaz = 0; interfaz < NUM_INTERFACE; interfaz ++)
     {
          // Comprobamos el interfaz vamos a usar SPTI, ASPI o IOCTL
          iActiveInterface = interfaz;
          AnsiString nombre_interfaz = interfaces[interfaz].name;

          if (!interfaces[interfaz].avail)
               continue;

          int NUM_DRIVES = getNumDrives();
          for (int i = 0; i <NUM_DRIVES>Lines->Add(Now().FormatString("hh:nn:ss'  '") + "*** Unidad " + cadena + ", no hay CD en dispositivo");
               }
               else
                    numTracks = (int)(toc.lastTrack - toc.firstTrack + 1 );

               if (numTracks > 0)
               {
                    static char buf[2048];
                    // calculate the cddbId
                    getDriveDesc(i, buf, 2048);
                    char *cad=(char *) malloc (sizeof(char) * 16);
                    sprintf(cad, "%08lx", genCddbId(&toc));
                    AnsiString cddb_id = cad;
                    AnsiString buffer = buf;
                    Consola->Lines->Add(Now().FormatString("hh:nn:ss'  '") + "Unidad " + buffer + ", " + IntToStr(numTracks) + " canciones, cddbid = " + cddb_id);
                    AnsiString texto = genCddbQuery(&toc, buf, 2048);
                    consulta = texto;
                    Consola->Lines->Add(Now().FormatString("hh:nn:ss'  '") + "CDDB query:" + texto);
               }
          }

          // El primer interfaz que haya disponible será el que se utilize
          if (interfaces[interfaz].avail)
               break;
     }

     Tcp->WriteLn(consulta + "\r\n");
     cCadTcp = Tcp->ReadLn(EOL, 1000, -1);
     Consola->Lines->Add(Now().FormatString("hh:nn:ss'  '") + cCadTcp);           
     Tcp->Disconnect();

     nPos_genero = cCadTcp.AnsiPos(' ');
     cEstado = cCadTcp.SubString(1, nPos_genero - 1);
     nPos_genero ++;
     cCadTcp = cCadTcp.SubString(nPos_genero, cCadTcp.Length() - nPos_genero+1);
}
//---------------------------------------------------------------------------

Cuando me conecto al servidor, en el primer ReadLn la máquina me responde con este mensaje:
Cita:
201 mirror1.freedb.org CDDBP server v1.5.2PL0 ready at Thu Jul 23 11:50:21 2009

con lo que entiendo que efectivamente hay comunicación con el sistema. Con un disco en la bandeja se genera en la función genCddbQuery este texto:
Cita:
cddb query 280d5d14 20 150 13906 26200 36980 56103 72116 83592 96654 107629 118099 128431 141748 154372 170556 180049 194293 208114 219637 232189 241689 3423

que se envía al servidor en el último WriteLn que hay; pero a este envío el sistema contesta con:
Cita:
200 Hello and welcome Angel@172.26.222.80 running MiCddb v.1.

donde, evidentemente, no está la lista de canciones del disco. ¿Me falta algo o alguien puede echarme una mano. Estoy usando, además de Builder 5, Indy 9.

Por otra parte tengo el código, manuales y documentación originales que facilita Gracenote parea acceder a Cddb; incluye código en Visual Basic, VBScript, MFC, Win32, Java y JavaScript. El problema es que no sé que habría de coger de todo esto; imagino que debería ser el código MFC o Win32.

Muchas gracias por todo.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

La adaptación del ejemplo de Gracenote de hace dos años no te sirvió ?

http://telefonica.net/web/ljfg/temp/gracenote_bcb4.rar
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

_Leo escribió:
La adaptación del ejemplo de Gracenote de hace dos años no te sirvió ?

¡Sabía que estab en algún sitio guardada! En este tiempo cambié de PC, de discos... Y en medio se perdió el fichero. Gracias Leo.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.