commit f8f04bd973c52748e7cd9eaa8076d265d671fbdd
parent 2784d97b7daa9f0560934fb511474101e3bbaeb4
Author: Yersa Nordman <yersa@finwo.nl>
Date: Wed, 2 Aug 2023 00:10:24 +0200
Added onTick support
Diffstat:
3 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/src/fnet.c b/src/fnet.c
@@ -79,6 +79,7 @@ struct fnet_internal_t * _fnet_init(const struct fnet_options_t *options) {
conn->flags = options->flags;
conn->ext.onConnect = options->onConnect;
conn->ext.onData = options->onData;
+ conn->ext.onTick = options->onTick;
conn->ext.onClose = options->onClose;
conn->nfds = 0;
conn->fds = NULL;
@@ -245,7 +246,6 @@ FNET_RETURNCODE fnet_process(const struct fnet_t *connection) {
socklen_t addrlen = sizeof(addr);
struct buf *rbuf = NULL;
-
// Checking arguments are given
if (!conn) {
fprintf(stderr, "fnet_process: connection argument is required\n");
@@ -289,6 +289,7 @@ FNET_RETURNCODE fnet_process(const struct fnet_t *connection) {
}));
}
}
+
buf_clear(rbuf);
free(rbuf);
return FNET_RETURNCODE_OK;
@@ -321,6 +322,7 @@ FNET_RETURNCODE fnet_process(const struct fnet_t *connection) {
.flags = conn->flags & (~FNET_FLAG_RECONNECT),
.onConnect = NULL,
.onData = NULL,
+ .onTick = NULL,
.onClose = NULL,
.udata = NULL,
}));
@@ -457,6 +459,14 @@ FNET_RETURNCODE fnet_tick() {
while(conn) {
ret = fnet_process((struct fnet_t *)conn);
if (ret < 0) return ret;
+ if (conn->ext.onTick) {
+ conn->ext.onTick(&((struct fnet_ev){
+ .connection = (struct fnet_t *)conn,
+ .type = FNET_EVENT_TICK,
+ .buffer = NULL,
+ .udata = conn->ext.udata,
+ }));
+ }
conn = conn->next;
}
return FNET_RETURNCODE_OK;
@@ -487,8 +497,6 @@ FNET_RETURNCODE fnet_main() {
return FNET_RETURNCODE_OK;
}
-
-
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/src/fnet.h b/src/fnet.h
@@ -35,7 +35,8 @@ extern "C" {
#define FNET_EVENT int
#define FNET_EVENT_CONNECT 1
#define FNET_EVENT_DATA 2
-#define FNET_EVENT_CLOSE 3
+#define FNET_EVENT_TICK 3
+#define FNET_EVENT_CLOSE 4
#define FNET_CALLBACK(NAME) void (*(NAME))(struct fnet_ev *event)
@@ -51,6 +52,7 @@ struct fnet_t {
FNET_STATUS status;
FNET_CALLBACK(onConnect);
FNET_CALLBACK(onData);
+ FNET_CALLBACK(onTick);
FNET_CALLBACK(onClose);
void *udata;
};
@@ -60,6 +62,7 @@ struct fnet_options_t {
FNET_FLAG flags;
FNET_CALLBACK(onConnect);
FNET_CALLBACK(onData);
+ FNET_CALLBACK(onTick);
FNET_CALLBACK(onClose);
void *udata;
};
diff --git a/test.c b/test.c
@@ -22,6 +22,10 @@ void onConnect(struct fnet_ev *ev) {
ev->connection->onClose = onClose;
}
+void onTick(struct fnet_ev *ev) {
+ printf("tick\n");
+}
+
int main(int argc, const char *argv[]) {
int i, n;
@@ -89,6 +93,7 @@ int main(int argc, const char *argv[]) {
.flags = 0,
.onConnect = onConnect,
.onData = NULL,
+ .onTick = onTick,
.onClose = NULL,
.udata = &mode,
};