Save
This commit is contained in:
+92
-8
@@ -1,14 +1,28 @@
|
||||
#include <zmq.h>
|
||||
#include <ctype.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "key_value_pair.h"
|
||||
#include "transfer_defines.h"
|
||||
|
||||
#define tolower_str(word) for(int i = 0; i < strlen(word); i++) word[i] = tolower(word[i]);
|
||||
|
||||
bool run = true;
|
||||
char *map(char*);
|
||||
char *reduce(char*);
|
||||
void rip();
|
||||
|
||||
TYPE get_request_type(const char *request)
|
||||
{
|
||||
char type_str[4];
|
||||
strncpy(type_str, request, 3);
|
||||
|
||||
if (strcmp(type_str, "map") == 0) return MAP;
|
||||
if (strcmp(type_str, "red") == 0) return RED;
|
||||
if (strcmp(type_str, "rip") == 0) return RIP;
|
||||
|
||||
return UNSUPPORTED;
|
||||
}
|
||||
|
||||
void main(int argc, char **argv)
|
||||
{
|
||||
@@ -16,31 +30,101 @@ void main(int argc, char **argv)
|
||||
// TODO: Wait on calls
|
||||
// TODO: Handle calls
|
||||
// TODO: Reply to requester
|
||||
|
||||
char *ret;
|
||||
|
||||
switch (get_request_type(argv[1]))
|
||||
{
|
||||
case MAP:
|
||||
perror("Handling MAP\n");
|
||||
ret = map(argv[1]);
|
||||
break;
|
||||
case RED:
|
||||
perror("Handling RED\n");
|
||||
ret = reduce(argv[1]);
|
||||
break;
|
||||
case RIP:
|
||||
perror("Handling RIP\n");
|
||||
rip();
|
||||
break;
|
||||
case UNSUPPORTED:
|
||||
perror("Got unsupported request\n");
|
||||
break;
|
||||
}
|
||||
|
||||
// TODO: just send ret
|
||||
}
|
||||
|
||||
void count_word(const char *word)
|
||||
void add_word(const char *word)
|
||||
{
|
||||
char *word_copy = strdup(word);
|
||||
tolower_str(word);
|
||||
tolower_str(word_copy);
|
||||
|
||||
find_key_value_pair(word);
|
||||
key_value_pair *kv = init_key_value_pair(word, "1");
|
||||
if (kv == NULL)
|
||||
{
|
||||
fprintf(stderr, "Failed to allocate memory for key: %s\n", word);
|
||||
free(word_copy);
|
||||
return;
|
||||
}
|
||||
if (add_key_value_pair(kv) != 0)
|
||||
{
|
||||
fprintf(stderr, "Failed to add key value: %s\n", word);
|
||||
free(word_copy);
|
||||
return;
|
||||
}
|
||||
|
||||
free(word_copy);
|
||||
}
|
||||
|
||||
char *map(char *args)
|
||||
char *get_word(const char *request)
|
||||
{
|
||||
static char *iterator = (char*)request;
|
||||
int word_length = 0;
|
||||
char *word = (char*)malloc(sizeof(char) * 1);
|
||||
if (word == NULL) return NULL;
|
||||
*word = '\0';
|
||||
|
||||
while (*iterator)
|
||||
{
|
||||
char *word_bak = word;
|
||||
word = (char*)realloc(word, ++word_length);
|
||||
if (word == NULL)
|
||||
{
|
||||
free(word_bak);
|
||||
return NULL;
|
||||
}
|
||||
if (!isalpha(*iterator))
|
||||
{
|
||||
word[word_length] = '\0';
|
||||
return word;
|
||||
}
|
||||
word[word_length] = *iterator;
|
||||
iterator++;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *reduce(char *args)
|
||||
char *map(const char *content)
|
||||
{
|
||||
char *content_iterator = content;
|
||||
|
||||
|
||||
free_key_value_pairs();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char *rip()
|
||||
char *reduce(char *content)
|
||||
{
|
||||
|
||||
free_key_value_pairs();
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void rip()
|
||||
{
|
||||
free_key_value_pairs(); // nothing should be allocated
|
||||
// TODO: Return RIP on zmq sock;
|
||||
perror("---RIP---\n");
|
||||
exit(0);
|
||||
}
|
||||
Reference in New Issue
Block a user