Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Recompilar Exodus (https://www.clubdelphi.com/foros/showthread.php?t=66826)

fide_uci 16-03-2010 00:49:11

El primerito que me da es teste.

"Ancestor for TExForm not found."

Casimiro Noteví 16-03-2010 00:50:26

Por si acaso quieres probar otro más sencillo, aquí tienes este más pequeñito :).

Olvídalo... no viene el código fuente...

Casimiro Noteví 16-03-2010 01:19:17

He encontrado varios, pero son para Linux.

fide_uci 16-03-2010 02:27:31

uff entonces estoy jod ??
Intenta compilarlo tu a ver, el Exodus.

fide_uci 16-03-2010 02:30:13

O sino habla con neftali o Roman para que me ayuden con eso que es de vida o muerte.

Casimiro Noteví 16-03-2010 11:33:58

Siento no poder ayudarte en eso :(

Intenta compilar y cuando encuentres el primer error lo comentas aquí, por si acaso podemos ayudar alguno. Y así paso a paso.

fide_uci 16-03-2010 18:23:59

Okok deja ver. Es que cuando intento compilarlo me dice el error ese de que no encuentra la clase base ExForm. Para mi que eso es problema con los componentes Exodus. O sea el paquete ese que se distribuye con el programa para su compilacion. Dejame buscar mas informacion y luego te cuento.

fide_uci 16-03-2010 20:37:54

Necesito saber si alguien tiene el conocimiento para desarrollar un cliente jabber con las funcionalidades basicas desde 0. Por favor alguien me pudiera ayudar?

Usando delphi 7 claro esta !

Casimiro Noteví 16-03-2010 21:00:12

Cita:

Empezado por fide_uci (Mensaje 357166)
Necesito saber si alguien tiene el conocimiento para desarrollar un cliente jabber con las funcionalidades basicas desde 0. Por favor alguien me pudiera ayudar?
Usando delphi 7 claro esta !

Amigo fide_uci, el problema no es simplemente si se tiene el conocimiento, el problema es el tiempo y recursos necesarios para llevarlo a cabo, estudio, documentación, análisis, etc...
Lo más "simple" es hacer lo que estás haciendo tú, coger un código fuente de otro que sea libre y ahora debes analizarlo, estudiarlo, eliminar lo que no te interese, etc. y así poco a poco hasta dejarlo con lo mínimo que necesitas.
Eso o tratar de resolver los errores que te salen al compilar.

También puede que en algún paquete de componentes encuentres uno que implemente jabber, no sé si la JVCL, la Indy, etc.

roman 16-03-2010 21:59:47

Hola,

Yo realmente no sé nada de Exodus o Jabber. Es más, ni siquiera de mensajería instantánea porque no la uso.

Sin embargo, creo que también se podría optar por hacer lo inverso. Es decir, en lugar de partir de un cliente hecho, ¿por qué no partir de cero aun cuando no se pretenda implementar todas las funciones?

Es decir, dado que esto es para una tarea de Facultad o algo similar; creo que es válido plantearse la implementación de un cliente sencillo que ejecute funciones básicas. Y en ese sentido puede ser algo asequible sin tener que enredarse en el código fuente de un cliente completo y maduro.

Este documento, parece describir de buena manera el protocolo XMPP en el que se basa Jabber. Y dado que este protocolo está basado (o eso creo) en XML, es algo relativamente sencillo de manejar con Delphi.

El documento (parece que es la tesis de alguien) comienza mostrando, de manera muy clara, lo básico para registro, autenticación y envío de un mensaje. Todo el documento consta de sesenta páginas, así que es digerible, sobre todo porque no parece ser la especificación IETF -que nadie entiende :D- sino algo mucho más claro.

En fin, yo consideraría darle una revisada y ver si se puede partir de cero con miras a hacer algo sencillo.

// Saludos

fide_uci 17-03-2010 14:36:22

Amigos yo los entiendo. Pero el problema es que yo conozco muchisimas cosas sobre el protocolo y tambien sobre la Indy. Pero cuando intento enviar cosas al servidor las envio sin problemas, pero lo que no logro es recibir nada de el.

aqui algo de codigo
Código Delphi [-]
  TCPClient.Host := 'jabber.uci.cu';
  TCPClient.Port := 5223;
  TCPClient.Connect;
  ClientHandleThread := TClientHandleThread.Create(True);
  ClientHandleThread.FreeOnTerminate := True;
  ClientHandleThread.Resume;
Eso en el Boton conectar.
Lo que tengo dudas es aqui. Es decir como le debo enviar los comandos al servidor y como recibirlos.
Código Delphi [-]
TCPClient.WriteStrings(Memo2.Lines);

fide_uci 17-03-2010 14:37:24

Asi seria como deberia enviar cosas, o por ejemplo con algun otro metodo?
Como hago para recibir lo que el me envia para atras?

roman 17-03-2010 14:49:57

Entonces, antes de plantearte lo grande, comienza con lo básico. Es decir, antes de liarte con el protocolo XMPP revisa cómo mandas datos (ya sea con GET o con POST) y cómo recibes la respuesta. Aquí en los foros puedes encontrar muchas referencias (busca Indy, IdHttp, etc. o bien WinInet). Una vez que tengas eso resuelto, posiblemente te convenga seguir con XMLDocument, para poder extraer la información del xml que recibas o incluso para armar el xml que mandes.

El punto, en mi opinión, es que es un poco descabellado lanzarte a un proyecto complejo sin recorrer el camino paso a pasito.

// Saludos

fide_uci 17-03-2010 23:45:44

Exactamente eso es lo que tengo pensado ggg.
Entonses solo queda ponerme en marcha a analizar como enviar y recibir esos datos desde un componente de la Indy. Muchisimas gracias desde ya !

fide_uci 01-04-2010 07:23:53

Weno ya que he avanzado tanto, tengo que darles noticia.
Ya logré enviar cosas al servidor, recibir cosas del servidor XMPP y actualmente me encuentro diseñando las funciones para escribir y leer los datos en los XML que intercambio con el servidor.
Estoy pensando en hacer una dll con todas las funciones de manipulacion del XML para que otros usuarios la puedan usar y ademas no solo con delphi sino con cualquier lenguaje.
Cuando tenga algo convincente lo pongo aqui para que lo revisen y me digan que tal.

Casimiro Noteví 01-04-2010 11:41:13

Estupendo! :)

fide_uci 02-04-2010 20:06:40

Anoche me encontraba leyendo la documentacion de los RFC del XMPP para poder implementar las funciones que estoy haciendo para manipular los XML que envio y recibo del servidor XMPP. Dado que las voy a poner dentro de una DLL para que otros usuarios la utilizen desde cualquier lenguaje de programacion me surge una duda. ¿Como podria declarar yo una funcion dentro de la DLL para que no tenga problemas al usarlo con algun otro lenguaje de programacion?. O sea con que tipo de datos declaro los parametros?. Estuve pensando en declarar los parametros como PChar para la compatibilidad y que todas las funciones sean con stdcall al final.

Diganme que creen de esto. Por ejemplo como seria la forma correcta de declarar esta funcion en una DLL para poder utilizarla en otros lenguajes??

Código Delphi [-]
function xmpp_login(pUserName, pPassword, pResource: String): WideString;
var
  cXMLDoc: TXMLDocument;
begin

  cXMLDoc := TXMLDocument.Create(Form1);
  try
    cXMLDoc.XML.Text := xmpp_res_login;
    cXMLDoc.Active := True;
    cXMLDoc.DocumentElement.ChildNodes['query'].ChildNodes['username'].Text := pUserName;
    cXMLDoc.DocumentElement.ChildNodes['query'].ChildNodes['password'].Text := pPassword;
    cXMLDoc.DocumentElement.ChildNodes['query'].ChildNodes['resource'].Text := pResource;
    Result := cXMLDoc.XML.Text;
  finally
    cXMLDoc.Free;
  end;

end;

Esa funcion actualmente con una llamada como esta

Código Delphi [-]
Memo1.Text := xmpp_login('fide_uci', 'myP@sSw0rd', 'nombre_pc');


me devuelve esto.

Código:

<iq type="set" id="auth_id"><query xmlns="jabber:iq:auth"><username>fide_uci</username><password>myP@sSw0rd</password><resource>nombre_pc</resource></query></iq>
Alguien que me diga que cree de esto y como seria la mejor manera de declararla dentro de una DLL para que no tenga problema alguno de compatibilidad.

fide_uci 02-04-2010 21:34:35

Amigos ya he implementado las funciones con todos los parametros en PChar y con la llamada stdcall pero ahora me sale un error que es EDivByZero que no tiene nada que ver con lo que estoy haciendo.

Creo que el error se debe a que cuando creo el componente para leer y establecer los XML el parent se lo estoy poniendoa nil.

Código Delphi [-]
cXMLDoc := TXMLDocument.Create(nil);

Cuando yo lo estaba haciendo directamente en el formulario lo creaba asi.

Código Delphi [-]
cXMLDoc := TXMLDocument.Create(Form1);

Pero como en la DLL no tengo ningun componente para darle de parent parece que me esta dando ese error.

¿Alguien sabe como podria solucionar eso?

O sea como puedo crear un componente dentro de una Dll si no tengo un parent para darle ?

fide_uci 02-04-2010 21:38:26

Asi es como me va quedando la DLL. Por favor que alguien me la revise a ver que error le encuentra.

Código Delphi [-]
library XMPPCore;

{********************************************************************************
*  XMPPCore.dll es la dll que contiene todas las funciones para la manipulacion *
*  de todos los stream XML que se envian y reciben con el cliente y el servidor.*
*********************************************************************************}

uses
  SysUtils, Classes, xmldom, XMLIntf, msxmldom, XMLDoc, XMPP_Res;

{$R *.res}

function xmpp_initialization(pTo: PChar): PChar; stdcall;
begin
    xmpp_res_Initialization;
    Result := PChar(Format(xmpp_res_initialization, [pTo]));
end;

function xmpp_login(pUserName, pPassword, pResource: PChar): PChar; stdcall;
var
  cXMLDoc: TXMLDocument;
begin

  cXMLDoc := TXMLDocument.Create(nil);
  try
    cXMLDoc.XML.Text := xmpp_res_login;
    cXMLDoc.Active := True;
    cXMLDoc.DocumentElement.ChildNodes['query'].ChildNodes['username'].Text := pUserName;
    cXMLDoc.DocumentElement.ChildNodes['query'].ChildNodes['password'].Text := pPassword;
    cXMLDoc.DocumentElement.ChildNodes['query'].ChildNodes['resource'].Text := pResource;
    Result := PChar(cXMLDoc.XML.Text);
  finally
    cXMLDoc.Free;
  end;

end;

function xmpp_presence(pType, pMsg, pShow: PChar): PChar; stdcall;
var
  cXMLDoc: TXMLDocument;
  vStrUtils: String;
begin

  cXMLDoc := TXMLDocument.Create(nil);
  try
    cXMLDoc.XML.Text := xmpp_res_presence;
    cXMLDoc.Active := True;
    vStrUtils := pType;
    if pMsg <> '' then
      cXMLDoc.DocumentElement.SetAttributeNS('type', '', vStrUtils)
    else
      cXMLDoc.DocumentElement.SetAttributeNS('type', '', 'avaliable');
    if pMsg <> '' then
      cXMLDoc.DocumentElement.ChildNodes['status'].Text := pMsg;
    if pShow <> '' then
      cXMLDoc.DocumentElement.ChildNodes['show'].Text := pShow;
    Result := PChar(cXMLDoc.XML.Text);
  finally
    cXMLDoc.Free;
  end;

end;

exports
   xmpp_initialization, xmpp_login, xmpp_presence;

begin
end.

fide_uci 02-04-2010 21:40:53

Les digo que el error es con la creacion del componente de XML por que cuando llamo a la funcion

Código Delphi [-]
function xmpp_initialization(pTo: PChar): PChar; stdcall;

La cual no crea ningun componente XML, me devuelve el resultado sin ningun problema.
Pero cuando intento llamar a algunas de las otras entonces me da ese error.

EDivByZero que es la excepcion matematica de cuando se hace una division x 0.


La franja horaria es GMT +2. Ahora son las 15:37:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi