• Sábado 11 de Mayo de 2024, 14:25

Autor Tema:  Problema Con Un Callback  (Leído 1193 veces)

hitman47

  • Miembro activo
  • **
  • Mensajes: 81
  • Nacionalidad: pa
    • Ver Perfil
    • http://softwareistmenio.blogspot.com
Problema Con Un Callback
« en: Martes 22 de Enero de 2008, 16:08 »
0
Hola amigos, mi problema consiste en que creo dos funciones callback
Código: Text
  1. static void EventCallback  (const CMS_MessageId&  i_lClientMsgId,
  2.                                 const CMS_ClientId&   i_ClientSeqNum,
  3.                                 const CMS_Event&    i_eEventType,
  4.                                 const CMS_EventInfo&  i_RetEvent)
  5. {
  6.   i_SessionId=i_RetEvent.SessionId;
  7. i_QuestionId=i_RetEvent.NextQuestionId;
  8. printf("\neventcallback\n");
  9. //if (i_eEventType == CMS_GET_USER_DETAILS)
  10.  
  11. }
  12. static void StatusCallback (const CMS_MessageId&  i_lClientMsgId,
  13.                                 const CMS_ClientId&   i_ClientSeqNum,
  14.                                 const CMS_StatusMajorCode&  i_iMajorCode,
  15.                                 const CMS_StatusEvent&  i_StatusEvent)
  16. {
  17.   printf("\nstatuscallback\n");
  18. }
  19.  

las cuales debo enviar su direccion a un server atravez de una funcion API que se encuentra en una dll
Código: Text
  1.   // Opens a loosely CSConnection
  2.   CMS_API CMS_TReturnCode CMS_OpenLooselyClient (
  3.       const  char*      i_pszServerIPAddr,
  4.       const CMS_PortId&    i_lServerListenPort,
  5.       const  CMS_ClientId&  i_iCSConnectionId,
  6.         CMS_ClientId&        io_ClientSeqNum,
  7.       void (*EventCallback)  (const CMS_MessageId&  i_lClientMsgId,
  8.                                 const CMS_ClientId&   i_ClientSeqNum,
  9.                                 const CMS_Event&    i_eEventType,
  10.                                 const CMS_EventInfo&  i_RetEvent),
  11.       void (*StatusCallback) (const CMS_MessageId&  i_lClientMsgId,
  12.                                 const CMS_ClientId&   i_ClientSeqNum,
  13.                                 const CMS_StatusMajorCode&  i_iMajorCode,
  14.                                 const CMS_StatusEvent&  i_StatusEvent)
  15.     );
  16.  
en el main se lo envio asi
Código: Text
  1. resp=CMS_OpenLooselyClient("127.0.0.1\n",10100,5,ClientSeqNum,&EventCallback,&StatusCallback);
  2.  
  3.  
pero cuando invoco a otra funcion de la API que debe hacer que el server me envie un mensaje de respuesta
Código: Text
  1. resp=CMS_OpenSession (ClientSeqNum,AppType,UserGroupId,ProductId,SessionType,ClientMsgId,UserInfoElem);
  2.  
  3.  
pero la callback no se dispara ademas no se como meterle un ciclo para que el main espere a que se dispare el callback para seguir con la siguiente linea de codigo. Ayudenme  porfavor amigos o si hay algun MVP q me de una pista. lo que pienso es que como el server es un proceso aparte no puede acceder al area de memoria de mi programa cliente y debo enviarle ademas de la &eventcallback la direccion de mi programa cliente????

hitman47

  • Miembro activo
  • **
  • Mensajes: 81
  • Nacionalidad: pa
    • Ver Perfil
    • http://softwareistmenio.blogspot.com
Re: Problema Con Un Callback
« Respuesta #1 en: Martes 22 de Enero de 2008, 16:33 »
0
bueno ya se que no es que el server no accesa a la memoria porque segui con la implementacion y se dispara la funcion StatusCallback  solo que me dice que hay error fail ocurred in listening socket o fallo en el puesto escucha lo cual me hace pensar que al invocarl la sig funcion API lo hago antes de haber recibido la respuesta del primer mensaje que envie en la funcion opensession. io puse un ciclo while en el meain luego de invocar a opensession que valide una bandera en la funcion eventcallback pero parece que esto no funciona porque impide que la eventcallback se dispare como hago para espera la respuesta? WaiForMessage o GetMessage creo que no me servirian