Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 684381cc

Von aquamaniac vor etwa 20 Jahren hinzugefügt

  • ID 684381cc09f158ab59fdf4e53464f1ae45f67254
  • Vorgänger 3f3991d0
  • Nachfolger a82e3fbc

- GWEN_WAITCALLBACK:
- added text field to waitcallback
- added function/macro GWEN_WaitCallback_EnterWithText
- fixed GWEN_WaitCallback: If any previously activated callback returns
GWEN_WaitCallbackResult_Abort then all following callbacks will return
this code as well. Also the condition of returning this code is stored.
- introduced GWEN_WAITCALLBACK_ID_SIMPLE_PROGRESS
- introduced GWEN_WAITCALLBACK_ID_FAST
- introduced flags:
- defined flag GWEN_WAITCALLBACK_FLAGS_NO_REUSE
- defined depth level GWEN_WAITCALLBACK_LEVEL_REUSED
- replaced GWEN_BUFFEREDIO_CBID_IO with GWEN_WAITCALLBACK_ID_FAST
- replaced GWEN_NETCONNECTION_CBID_IO with GWEN_WAITCALLBACK_ID_FAST
- replaced GWEN_FSLOCK_CBID_IO with GWEN_WAITCALLBACK_ID_FAST
- README: Added listing of waitcallback ids
- added "LL" to GWEN_WAITCALLBACK_PROGRESS_NONE.
FIXME: We should better define a MAXVALUE, like GWEN_MAXVAL_UINT64 and
let configure determine this type (like the other stuff), because the
suffix "LL" tells the compiler that this is a "long long" value, which isn't
necessarily the case for 64 bit architectures...

git-svn-id: https://devel.aqbanking.de/svn/gwenhywfar/trunk@810 70169cfe-8b10-0410-8925-dcb4b91034d8

Unterschiede anzeigen:

src/net/netconnection.c
#define GWEN_EXTEND_NETCONNECTION
#include "netconnection_p.h"
#include "i18n_l.h"
#include <gwenhywfar/misc.h>
#include <gwenhywfar/debug.h>
#include <gwenhywfar/waitcallback.h>
......
distance=750;
}
GWEN_WaitCallback_Enter(GWEN_NETCONNECTION_CBID_IO);
GWEN_WaitCallback_EnterWithText(GWEN_WAITCALLBACK_ID_FAST,
I18N("Reading from network..."),
I18N("second(s)"),
0);
GWEN_WaitCallback_SetProgressTotal(GWEN_WAITCALLBACK_PROGRESS_NONE);
lastHadNoWaitFlags=0;
for (count=0;;) {
/* actually try to read */
......
for (;;count++) {
GWEN_TYPE_UINT32 waitFlags;
double d;
if (GWEN_WaitCallback()==GWEN_WaitCallbackResult_Abort) {
DBG_ERROR(GWEN_LOGDOMAIN, "User aborted via waitcallback");
......
/* found activity, break */
break;
d=difftime(time(0), startt);
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
/* check timeout */
if (timeout!=GWEN_NETCONNECTION_TIMEOUT_FOREVER) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
difftime(time(0), startt)>timeout) {
DBG_INFO(GWEN_LOGDOMAIN, "Could not read within %d seconds, giving up",
timeout);
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
d>timeout) {
DBG_INFO(GWEN_LOGDOMAIN,
"Could not read within %d seconds, giving up",
timeout);
GWEN_WaitCallback_Leave();
return 1;
}
return 1;
}
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
}
} /* for */
......
distance=750;
}
GWEN_WaitCallback_Enter(GWEN_NETCONNECTION_CBID_IO);
GWEN_WaitCallback_EnterWithText(GWEN_WAITCALLBACK_ID_FAST,
I18N("Writing to network..."),
I18N("second(s)"),
0);
GWEN_WaitCallback_SetProgressTotal(GWEN_WAITCALLBACK_PROGRESS_NONE);
lastHadNoWaitFlags=0;
for (count=0;;) {
/* actually try to write */
......
for (;;count++) {
GWEN_TYPE_UINT32 waitFlags;
double d;
if (GWEN_WaitCallback()==GWEN_WaitCallbackResult_Abort) {
DBG_ERROR(GWEN_LOGDOMAIN, "User aborted via waitcallback");
......
/* found activity, break */
break;
d=difftime(time(0), startt);
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
/* check timeout */
if (timeout!=GWEN_NETCONNECTION_TIMEOUT_FOREVER) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
difftime(time(0), startt)>timeout) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
d>timeout) {
DBG_INFO(GWEN_LOGDOMAIN, "Could not read within %d seconds, giving up",
timeout);
GWEN_WaitCallback_Leave();
......
distance=750;
}
GWEN_WaitCallback_Enter(GWEN_NETCONNECTION_CBID_IO);
GWEN_WaitCallback_EnterWithText(GWEN_WAITCALLBACK_ID_FAST,
I18N("Flushing connection data..."),
I18N("second(s)"),
0);
GWEN_WaitCallback_SetProgressTotal(GWEN_WAITCALLBACK_PROGRESS_NONE);
for (count=0;;) {
/* let the connection work */
rv=GWEN_NetConnection_Work(conn);
......
for (;;count++) {
GWEN_TYPE_UINT32 waitFlags;
GWEN_NETTRANSPORT_STATUS st;
double d;
st=GWEN_NetTransport_GetStatus(conn->transportLayer);
if (st==GWEN_NetTransportStatusUnconnected ||
......
/* found activity, break */
break;
d=difftime(time(0), startt);
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
/* check timeout */
if (timeout!=GWEN_NETCONNECTION_TIMEOUT_FOREVER) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
difftime(time(0), startt)>timeout) {
d>timeout) {
DBG_INFO(GWEN_LOGDOMAIN, "Could not write within %d seconds, giving up (%d)",
waitFlags,
timeout);
......
distance=750;
}
GWEN_WaitCallback_Enter(GWEN_NETCONNECTION_CBID_IO);
for (count=0;;) {
GWEN_WaitCallback_EnterWithText(GWEN_WAITCALLBACK_ID_FAST,
I18N("Waiting for connection status change..."),
I18N("second(s)"),
0);
GWEN_WaitCallback_SetProgressTotal(GWEN_WAITCALLBACK_PROGRESS_NONE);
for (count=0;;) {
/* let the connection work */
rv=GWEN_NetConnection_Work(conn);
if (rv==GWEN_NetConnectionWorkResult_Error) {
......
for (;;count++) {
GWEN_TYPE_UINT32 waitFlags;
GWEN_NETTRANSPORT_STATUS st;
double d;
st=GWEN_NetConnection_GetStatus(conn);
if (GWEN_WaitCallback()==GWEN_WaitCallbackResult_Abort) {
......
/* found activity, break */
break;
d=difftime(time(0), startt);
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
/* check timeout */
if (timeout!=GWEN_NETCONNECTION_TIMEOUT_FOREVER) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
difftime(time(0), startt)>timeout) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
d>timeout) {
DBG_INFO(GWEN_LOGDOMAIN,
"Timeout (%d) while waiting for status %d, giving up (%d)",
timeout,
......
distance=750;
}
GWEN_WaitCallback_Enter(GWEN_NETCONNECTION_CBID_IO);
GWEN_WaitCallback_EnterWithText(GWEN_WAITCALLBACK_ID_FAST,
I18N("Waiting for incoming messages..."),
I18N("second(s)"),
0);
GWEN_WaitCallback_SetProgressTotal(GWEN_WAITCALLBACK_PROGRESS_NONE);
for (count=0;;) {
for (;;count++) {
GWEN_TYPE_UINT32 waitFlags;
double d;
if (GWEN_WaitCallback()==GWEN_WaitCallbackResult_Abort) {
DBG_ERROR(GWEN_LOGDOMAIN, "User aborted via waitcallback");
......
/* found activity, break */
break;
d=difftime(time(0), startt);
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
/* check timeout */
if (timeout!=GWEN_NETCONNECTION_TIMEOUT_FOREVER) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
difftime(time(0), startt)>timeout) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
d>timeout) {
DBG_INFO(GWEN_LOGDOMAIN, "Timeout while waiting for connection, giving up");
GWEN_WaitCallback_Leave();
return 0;
......
return 0;
}
GWEN_WaitCallback_Enter(GWEN_NETCONNECTION_CBID_IO);
GWEN_WaitCallback_EnterWithText(GWEN_WAITCALLBACK_ID_FAST,
I18N("Waiting for incoming message..."),
I18N("second(s)"),
0);
GWEN_WaitCallback_SetProgressTotal(GWEN_WAITCALLBACK_PROGRESS_NONE);
for (count=0;;) {
for (;;count++) {
GWEN_TYPE_UINT32 waitFlags;
double d;
if (GWEN_WaitCallback()==GWEN_WaitCallbackResult_Abort) {
DBG_ERROR(GWEN_LOGDOMAIN, "User aborted via waitcallback");
......
break;
#endif
d=difftime(time(0), startt);
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
/* check timeout */
if (timeout!=GWEN_NETCONNECTION_TIMEOUT_FOREVER) {
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE ||
difftime(time(0), startt)>timeout) {
d>timeout) {
DBG_INFO(GWEN_LOGDOMAIN, "Timeout while waiting for connection, giving up");
GWEN_WaitCallback_Leave();
return 0;
......
int distance;
int count;
GWEN_NETCONNECTION_WORKRESULT rv;
time_t startt;
t0=GWEN_CurrentTime();
assert(t0);
GWEN_WaitCallback_Enter(GWEN_NETCONNECTION_CBID_IO);
startt=time(0);
GWEN_WaitCallback_EnterWithText(GWEN_WAITCALLBACK_ID_FAST,
I18N("Waiting for network traffic..."),
I18N("second(s)"),
0);
GWEN_WaitCallback_SetProgressTotal(GWEN_WAITCALLBACK_PROGRESS_NONE);
if (timeout==GWEN_NETCONNECTION_TIMEOUT_NONE)
distance=GWEN_NETCONNECTION_TIMEOUT_NONE;
......
GWEN_Time_free(t1);
if (d>=timeout) {
DBG_DEBUG(GWEN_LOGDOMAIN, "Could not walk within %d milliseconds, giving up",
DBG_DEBUG(GWEN_LOGDOMAIN,
"Could not walk within %d milliseconds, giving up",
timeout);
GWEN_Time_free(t0);
GWEN_WaitCallback_Leave();
return GWEN_NetConnectionWorkResult_NoChange;
}
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
}
else {
double d;
d=difftime(time(0), startt);
GWEN_WaitCallback_SetProgressPos((GWEN_TYPE_UINT64)d);
}
}
} /* for */

Auch abrufbar als: Unified diff