/*
- * Copyright (c) 1998-1999, Index Data.
+ * Copyright (c) 1998-2000, Index Data.
* See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
*
* $Log: yaz-server.cpp,v $
- * Revision 1.7 1999-12-06 13:52:45 adam
+ * Revision 1.11 2000-09-12 16:23:49 adam
+ * Updated server example.
+ *
+ * Revision 1.10 2000/09/12 16:04:17 adam
+ * Added comstack method for Yaz_PDU_Assoc..
+ *
+ * Revision 1.9 2000/09/12 12:09:53 adam
+ * More work on high-level server.
+ *
+ * Revision 1.8 2000/09/08 10:23:42 adam
+ * Added skeleton of yaz-z-server.
+ *
+ * Revision 1.7 1999/12/06 13:52:45 adam
* Modified for new location of YAZ header files. Experimental threaded
* operation.
*
*/
#include <yaz/log.h>
-#include <yaz-z-assoc.h>
+#include <yaz-z-server.h>
#include <yaz-pdu-assoc.h>
#include <yaz-socket-manager.h>
-class MyServer : public Yaz_Z_Assoc {
+class MyServer : public Yaz_Z_Server {
public:
MyServer(IYaz_PDU_Observable *the_PDU_Observable);
- void recv_Z_PDU(Z_APDU *apdu);
+ void recv_Z_init (Z_InitRequest *initRequest,
+ Z_InitResponse *initResponse);
+ void recv_Z_search (Z_SearchRequest *searchRequest,
+ Z_SearchResponse *searchResponse);
+ void recv_Z_present (Z_PresentRequest *presentRequest,
+ Z_PresentResponse *presentResponse);
+
+ void recv_Z_record (const char *resultSetName,
+ int position,
+ int *format,
+ Z_RecordComposition *comp,
+ Z_NamePlusRecord *namePlusRecord,
+ Z_DefaultDiagFormat *diagnostics);
IYaz_PDU_Observer* clone(IYaz_PDU_Observable *the_PDU_Observable);
void failNotify();
void timeoutNotify();
int m_no;
};
-static int stop = 0;
+void MyServer::recv_Z_init (Z_InitRequest *initRequest,
+ Z_InitResponse *initResponse)
+{
+ logf (LOG_LOG, "MyServer::recv_Z_init");
+}
+
+static MyServer *myServer = 0;
-void MyServer::recv_Z_PDU(Z_APDU *apdu)
+void MyServer::recv_Z_search (Z_SearchRequest *searchRequest,
+ Z_SearchResponse *searchResponse)
{
- logf (LOG_LOG, "recv_Z_PDU");
- switch (apdu->which)
- {
- case Z_APDU_initRequest:
- logf (LOG_LOG, "got InitRequest");
- apdu = create_Z_PDU(Z_APDU_initResponse);
- send_Z_PDU(apdu);
- break;
- case Z_APDU_searchRequest:
- logf (LOG_LOG, "got searchRequest");
- apdu = create_Z_PDU(Z_APDU_searchResponse);
- send_Z_PDU(apdu);
- break;
- case Z_APDU_presentRequest:
- logf (LOG_LOG, "got presentRequest");
- apdu = create_Z_PDU(Z_APDU_presentResponse);
- send_Z_PDU(apdu);
- // stop = 1;
- break;
- }
+ logf (LOG_LOG, "MyServer::recv_Z_search");
+ myServer->close();
+}
+
+void MyServer::recv_Z_present (Z_PresentRequest *presentRequest,
+ Z_PresentResponse *presentResponse)
+{
+ logf (LOG_LOG, "MyServer::recv_Z_present");
+}
+
+void MyServer::recv_Z_record (const char *resultSetName,
+ int position,
+ int *format,
+ Z_RecordComposition *comp,
+ Z_NamePlusRecord *namePlusRecord,
+ Z_DefaultDiagFormat *diagnostics)
+{
+
}
IYaz_PDU_Observer *MyServer::clone(IYaz_PDU_Observable *the_PDU_Observable)
}
MyServer::MyServer(IYaz_PDU_Observable *the_PDU_Observable) :
- Yaz_Z_Assoc (the_PDU_Observable)
+ Yaz_Z_Server (the_PDU_Observable)
{
m_no = 0;
}
int main(int argc, char **argv)
{
- Yaz_SocketManager mySocketManager;
- Yaz_PDU_Assoc *my_PDU_Assoc = new Yaz_PDU_Assoc(&mySocketManager);
+ while (1)
+ {
+ Yaz_SocketManager mySocketManager;
+ Yaz_PDU_Assoc *my_PDU_Assoc = new Yaz_PDU_Assoc(&mySocketManager);
+
+ myServer = new MyServer(my_PDU_Assoc);
- MyServer z(my_PDU_Assoc);
+ MyServer *z = myServer;
- if (argc <= 1)
- z.server("@:9999");
- else
- {
- for (int i = 1; i < argc; i++)
- z.server(argv[i]);
+ if (argc <= 1)
+ z->server("@:9999");
+ else
+ {
+ for (int i = 1; i < argc; i++)
+ z->server(argv[i]);
+ }
+ COMSTACK cs = my_PDU_Assoc->comstack();
+ if (cs)
+ printf ("fd=%d\n", cs_fileno(cs));
+ while (mySocketManager.processEvent() > 0)
+ ;
+ logf (LOG_LOG, "bailing out");
+ delete z;
+ break;
}
- while (!stop && mySocketManager.processEvent() > 0)
- ;
return 0;
}