Merge pull request #689 from OpenWaterAnalytics/683-request-better-logging-functionality

adds client callback API function
This commit is contained in:
Sam Hatchett
2023-01-19 09:02:02 -05:00
committed by GitHub
7 changed files with 101 additions and 51 deletions

View File

@@ -159,6 +159,10 @@ extern "C" {
int DLLEXPORT ENgetresultindex(int type, int index, int *value);
int DLLEXPORT ENsetreportcallback(void (*callback)(void *userData, void *EN_projectHandle, char*));
int DLLEXPORT ENsetreportcallbackuserdata(void *userData);
/********************************************************************
Analysis Options Functions

View File

@@ -517,6 +517,18 @@ typedef struct Project *EN_Project;
********************************************************************/
/**
@brief Set a user-supplied callback function for reporting
@param ph an EPANET project handle.
@param callback a function pointer with declared signature, which gets called by EPANET for reporting.
@return an error code.
@details The report callback function must have the signature specified - void(void* userData, EN_Project, char*) -
use the userData parameter to pass any client context necessary (a context pointer or wrapper object perhaps).
Leave un-set or set the report callback to NULL to revert to EPANET's default behavior.
**/
int DLLEXPORT EN_setreportcallback(EN_Project ph, void (*callback)(void *userData, void *EN_projectHandle, char*));
int DLLEXPORT EN_setreportcallbackuserdata(EN_Project ph, void *userData);
/**
@brief Writes a line of text to a project's report file.
@param ph an EPANET project handle.

View File

@@ -841,6 +841,19 @@ int DLLEXPORT EN_closeQ(EN_Project p)
********************************************************************/
int DLLEXPORT EN_setreportcallback(EN_Project p, void (*callback)(void*,void*,char*))
{
p->report.reportCallback = callback;
return 0;
}
int DLLEXPORT EN_setreportcallbackuserdata(EN_Project p, void *userData)
{
p->report.reportCallbackUserData = userData;
return 0;
}
int DLLEXPORT EN_writeline(EN_Project p, char *line)
/*----------------------------------------------------------------
** Input: line = line of text

View File

@@ -212,6 +212,16 @@ int DLLEXPORT ENsetstatusreport(int level)
return EN_setstatusreport(_defaultProject, level);
}
int DLLEXPORT ENsetreportcallback(void (*callback)(void *userData, void *EN_projectHandle, char*))
{
return EN_setreportcallback(_defaultProject, callback);
}
int DLLEXPORT ENsetreportcallbackuserdata(void *userData)
{
return EN_setreportcallbackuserdata(_defaultProject, userData);
}
int DLLEXPORT ENgetversion(int *version) { return EN_getversion(version); }
int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen)

View File

@@ -281,6 +281,8 @@ void initpointers(Project *pr)
pr->hydraul.smatrix.NZSUB = NULL;
pr->hydraul.smatrix.LNZ = NULL;
pr->report.reportCallback = NULL;
initrules(pr);
}

View File

@@ -885,6 +885,12 @@ void writeline(Project *pr, char *s)
**--------------------------------------------------------------
*/
{
if (pr->report.reportCallback != NULL)
{
pr->report.reportCallback(pr->report.reportCallbackUserData, pr, s);
return;
}
Report *rpt = &pr->report;
if (rpt->RptFile == NULL) return;

View File

@@ -634,6 +634,9 @@ typedef struct {
SField Field[MAXVAR]; // Output reporting fields
void (*reportCallback)(void*,void*,char*); // user-supplied reporting callback
void *reportCallbackUserData; // user-supplied reporting context
} Report;
// Output File Wrapper