You must move Open Server application code currently running in the main routine to one or more event handlers. Other routines, such as the srv_run routine are also removed. You must also remove routines that EAServer automatically initiates, and remove properties and handlers that are configured through EAServer Manager.
The following file is a traditional Open Server application that contains a main routine:
#include <ospublic.h>
#include <server.h>
/*
** File server.c containing a typical Open Server main() function. For
** simplicity, there is no error handling here.
**
** This builds into an executable, with the supporting code, such as
** event handlers, ending up as either static libraries that become part 
** of the executable, or as dynamic libraries loaded at run time.
*/
main(int argc, char *argv[])
{
		/*
		** Variables.
		*/
		CS_INT conns;
		CS_INT threads;
		CS_CHAR *name;
		CS_CONTEXT *context;
	
		/*
		** Process command line. Function get_params() is in file appl.c.
		*/
		get_params(argc, argv, &conns, &threads, &name);
		if (name == (CS_CHAR *) NULL)
		{
		    printf("Usage: %s [-os_conns=<conns>] [-os_threads=<threads>] "
		           "-os_name=<name>\n", argv[0]);
		    exit(1);
		}
		/*
		** Initialize server.
		*/
		cs_ctx_alloc(CS_VERSION_100, &context);
		srv_version(context, CS_VERSION_100);
		if (conns > 0)
		    srv_props(context, CS_SET, SRV_S_NUMCONNECTIONS,
		              (CS_VOID *) &conns, sizeof(conns), (CS_INT *) NULL);
		if (threads > 0)
		    srv_props(context, CS_SET, SRV_S_NUMTHREADS,
		              (CS_VOID *) &threads, sizeof(threads), (CS_INT *) NULL)
		srv_init((SRV_CONFIG *) NULL, name, CS_NULLTERM);
	
		/*
		** Register handlers. Files handler1.c and handler2.c contain these
		** functions.
		*/
		srv_handle((SRV_SERVER *) NULL, SRV_START, start_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_ATTENTION, 	attn_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_BULK, bulk_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_CONNECT, conn_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_CURSOR, cur_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_DISCONNECT, disc_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_DYNAMIC, dyn_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_LANGUAGE, lang_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_RPC, rpc_handler);
		srv_handle((SRV_SERVER *) NULL, SRV_OPTION, opt_handler);
	
		/*
		** Start server.
		*/
		srv_run((SRV_SERVER *) NULL);
		exit(0);
}
The main code has been placed in an event handler, other routines and properties have been removed:
#include <ospublic.h>
#include <server.h>
/*
** File server.c. The original main() function becomes init_handler().
**
** Build this into a dynamic library, and register the
** init_handler() function in EAServer Manager. EAServer
** will call the function at runtime.
**
** You may build the supporting code into the same dynamic library, or into
** one or more different dynamic libraries. In either case, you'll need to
** register each handler separately with EAServer, using
** EAServer Manager.
*/CS_RETCODE CS_PUBLIC init_handler(CS_CONTEXT *context, 
		int argc, char *argv[])
{
		/*
		** Variables.
		**
		** EAServer initializes context and passes it to this function.
		*/
		CS_INT conns;
		CS_INT threads;
		CS_CHAR *name;
	
		/*
		** Process command line. Function get_params() is in file appl.c.
		**
		** Do not exit on error.
		*/
		get_params(argc, argv, &conns, &threads, &name);
	
		/*
		** Initialize server.
		**
		** Get rid of cs_ctx_alloc(), srv_version(), etc. Do not call srv_init().
		** Certain properties previously set using srv_props() are now set
		** in EAServer Manager. 
		*/
		if (conns > 0)
		    srv_props(context, CS_SET, SRV_S_NUMCONNECTIONS,
		              (CS_VOID *) &conns, sizeof(conns), (CS_INT *) NULL);
		if (threads > 0)
		    srv_props(context, CS_SET, SRV_S_NUMTHREADS,
		              (CS_VOID *) &threads, sizeof(threads), (CS_INT *) NULL);
	
		/*
		** Register handlers. Files handler1.c and handler2.c contain handler
		** functions.
		**
		** Register all the handlers using EAServer Manager.
		*/
	
		/*
		** Start server.
		**
		** EAServer calls srv_run(); Do not call it yourself.
		*/
	
		/*
		** Return rather than exit.
		*/
		return CS_SUCCEED;
}
| Copyright © 2005. Sybase Inc. All rights reserved. | 
 
 | 
|