From e12753d2ec9db83ec08bb9db63902a82fb245cdd Mon Sep 17 00:00:00 2001 From: "Tomas Chvatal (scarabeus)" Date: Wed, 22 Oct 2008 22:50:54 +0200 Subject: X --- src/base/checkFront.c~ | 113 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/base/checkFront.c~ (limited to 'src/base/checkFront.c~') diff --git a/src/base/checkFront.c~ b/src/base/checkFront.c~ new file mode 100644 index 0000000..536de1b --- /dev/null +++ b/src/base/checkFront.c~ @@ -0,0 +1,113 @@ + +#include +#include +#include +#include + +#include "main.h" +#include "list.h" +#include "myTimer.h" +#include "checkFront.h" +#include "idManager.h" +#include "server.h" + +typedef struct struct_checkfront_t +{ + char *msg; + my_time_t time; + int id; + int count; + int type; +} checkfront_t; + +static checkfront_t* newCheck(char *s, int type, int id) +{ + checkfront_t *new; + + assert( s != NULL ); + new = malloc( sizeof(checkfront_t) ); + memset(new, 0, sizeof(checkfront_t)); + new->msg = strdup(s); + new->time = getMyTime(); + new->id = id; + new->type = type; + new->count = 0; + return new; +} + +static void destroyCheck(checkfront_t *p) +{ + assert( p != NULL ); + free(p->msg); + free(p); +} + +list_t* newCheckFront() +{ + return newList(); +} + +void addMsgInCheckFront(list_t *list, char *msg, int type, int id) +{ + if (type == CHECK_FRONT_TYPE_CHECK) + incID(id); + addList(list, newCheck(msg, type, id) ); +} + +void eventMsgInCheckFront(client_t *client) +{ + my_time_t currentTime; + int i; + + currentTime = getMyTime(); + for (i = 0; i < client->listSendMsg->count; i++) { + checkfront_t *this; + + this = (checkfront_t *)client->listSendMsg->list[i]; + switch (this->type) { + case CHECK_FRONT_TYPE_SIMPLE : + sendClient(client, this->msg); + delListItem(client->listSendMsg, i, destroyCheck); + i--; + break; + case CHECK_FRONT_TYPE_CHECK : + if (this->count == 0 || currentTime - this->time > CHECK_FRONT_SEND_TIME_INTERVAL) { + sendClient(client, this->msg); + this->time = currentTime; + this->count++; + } + if (this->count > CHECK_FRONT_MAX_COUNT_SEND) { + delID(this->id); + delListItem(client->listSendMsg, i, destroyCheck); + i--; + } + break; + default : + assert(! _("Bad type of front!")); + break; + } + } +} + +void delMsgInCheckFront(list_t *listCheckFront, int id) +{ + int i; + + for (i = 0 ; i < listCheckFront->count ; i++ ) { + checkfront_t *this; + + this = (checkfront_t *)listCheckFront->list[i]; + if (this->id == id) { + delID(this->id); + delListItem(listCheckFront, i, destroyCheck); + return; + } + } +} + +void destroyCheckFront(list_t *p) +{ + assert( p != NULL ); + destroyListItem(p, destroyCheck); +} + -- cgit v1.2.3