summaryrefslogtreecommitdiff
path: root/src/base/checkFront.c~
diff options
context:
space:
mode:
authorTomas Chvatal (scarabeus) <tomas.chvatal@gmail.com>2008-10-22 22:50:54 +0200
committerTomas Chvatal (scarabeus) <tomas.chvatal@gmail.com>2008-10-22 22:50:54 +0200
commite12753d2ec9db83ec08bb9db63902a82fb245cdd (patch)
tree6e4a63b790d6335f969f88b797a927e0fb25f37a /src/base/checkFront.c~
parent0b4d9821c7333b8c4bdf7e0eeb750aef502a1137 (diff)
X
Diffstat (limited to 'src/base/checkFront.c~')
-rw-r--r--src/base/checkFront.c~113
1 files changed, 113 insertions, 0 deletions
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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#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);
+}
+