Type | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|
character(len=ESMF_MAXSTR) | :: | failMsg | ||||
character(len=ESMF_MAXSTR) | :: | testname | ||||
integer | :: | finalrc | ||||
integer | :: | portNum | ||||
integer | :: | rc | ||||
integer | :: | result | ||||
type(ESMF_GridComp) | :: | comp1 |
program WebServicesEx #include "ESMF.h" ! ESMF Framework module use ESMF use ESMF_TestMod use ESMF_WebServMod use ESMF_WebServUserModel implicit none ! Local variables type(ESMF_GridComp) :: comp1 !! Grid Component integer :: rc !! Return Code integer :: finalrc !! Final return code integer :: portNum !! The port number for the listening socket !EOC integer :: result character(ESMF_MAXSTR) :: testname character(ESMF_MAXSTR) :: failMsg !------------------------------------------------------------------------- !------------------------------------------------------------------------- write(failMsg, *) "Example failure" write(testname, *) "Example ESMF_WebServicesEx" ! ------------------------------------------------------------------------------ ! ------------------------------------------------------------------------------ !BOE ! A listening socket will be created on the local machine with the specified ! port number. This socket is used by the service to ! wait for and receive requests from the client. Check with your system ! administrator to determine an appropriate port to use for your service. !EOE !BOC finalrc = ESMF_SUCCESS call ESMF_Initialize(defaultlogfilename="WebServicesEx.Log", & logkindflag=ESMF_LOGKIND_MULTI, rc=rc) !EOC if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT) !BOC ! create the grid component comp1 = ESMF_GridCompCreate(name="My Component", rc=rc) !EOC if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT) !BOC ! Set up the register routine call ESMF_GridCompSetServices(comp1, & userRoutine=ESMF_WebServUserModelRegister, rc=rc) !EOC if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT) !!!!!!! !! KDS: I've commented out the call to ESMF_WebServicesLoop so that it won't !! enter the infinite loop and hold up the examples run. I'll keep it !! commented out until I create an example client that will send an EXIT !! to the loop. !!!!!!! !BOC portNum = 27060 ! Call the Web Services Loop and wait for requests to come in !call ESMF_WebServicesLoop(comp1, portNum, rc=rc) !EOC if (rc /= ESMF_SUCCESS) call ESMF_Finalize(endflag=ESMF_END_ABORT) !BOE ! The call to ESMF\_WebServicesLoop will setup the listening socket for your ! service and will wait for requests from a client. As requests are received, ! the Web Services software will process the requests and then return to the ! loop to continue to wait. !EOE !BOE ! The 3 main requests processed are INIT, RUN, and FINAL. These requests ! will then call the appropriate callback routine as specified in your ! register routine (as specified in the ESMF\_GridCompSetServices call). ! In this example, when the INIT request is received, the user\_init routine ! found in the ESMF\_WebServUserModel module is called. !EOE !BOE ! One other request is also processed by the Component Service, and that is ! the EXIT request. When this request is received, the Web Services loop ! is terminated and the remainder of the code after the ESMF\_WebServicesLoop ! call is executed. !EOE 10 continue ! IMPORTANT: ESMF_STest() prints the PASS string and the # of processors in the log ! file that the scripts grep for. call ESMF_STest((finalrc.eq.ESMF_SUCCESS), testname, failMsg, result, ESMF_SRCLINE) !BOC call ESMF_Finalize(rc=rc) !EOC if (rc/=ESMF_SUCCESS) finalrc = ESMF_FAILURE if (finalrc==ESMF_SUCCESS) then print *, "PASS: ESMF_WebServicesEx.F90" else print *, "FAIL: ESMF_WebServicesEx.F90" endif !BOC end program WebServicesEx