Compare commits
No commits in common. "d09b991771f7cc796fdff7ad03915ffec61b72ce" and "47369a86e9ff2cbb12e3c325cc45ab0bcd9cabd1" have entirely different histories.
d09b991771
...
47369a86e9
208
src2/server.c
208
src2/server.c
@ -25,7 +25,6 @@ enum event_type {
|
|||||||
SKIP,
|
SKIP,
|
||||||
PAUSE,
|
PAUSE,
|
||||||
RESUME,
|
RESUME,
|
||||||
RESET,
|
|
||||||
STOP
|
STOP
|
||||||
};
|
};
|
||||||
struct run_event {
|
struct run_event {
|
||||||
@ -39,8 +38,8 @@ struct segment {
|
|||||||
};
|
};
|
||||||
struct route {
|
struct route {
|
||||||
char *name;
|
char *name;
|
||||||
int segment_count;
|
|
||||||
struct segment *segments;
|
struct segment *segments;
|
||||||
|
int segment_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct run_event *run;
|
struct run_event *run;
|
||||||
@ -54,7 +53,7 @@ char *default_file_name = "untitled.quest";
|
|||||||
int run_count = 0;
|
int run_count = 0;
|
||||||
int files = 0;
|
int files = 0;
|
||||||
char **filePaths = NULL;
|
char **filePaths = NULL;
|
||||||
char **meta_keys, **meta_values;
|
char **names, **values;
|
||||||
int valuecount;
|
int valuecount;
|
||||||
struct segment *segments;
|
struct segment *segments;
|
||||||
int segment_count = 0;
|
int segment_count = 0;
|
||||||
@ -76,11 +75,9 @@ void addFile(char *path);
|
|||||||
void sendInt(int sock, int value);
|
void sendInt(int sock, int value);
|
||||||
void sendValue(int sock, char* name);
|
void sendValue(int sock, char* name);
|
||||||
void sendString(int sock, char* str);
|
void sendString(int sock, char* str);
|
||||||
void process_socket_input(int sock);
|
void doprocessing (int sock);
|
||||||
void addPauseTime();
|
void addPauseTime();
|
||||||
void subtractPauseTime();
|
void subtractPauseTime();
|
||||||
void set_metadata(char *key, char *value);
|
|
||||||
void save_metadata_to_file(char *token, char *token2);
|
|
||||||
int current_ms();
|
int current_ms();
|
||||||
|
|
||||||
//basic timer commands
|
//basic timer commands
|
||||||
@ -157,7 +154,6 @@ void add_event(enum event_type t)
|
|||||||
|
|
||||||
void reset_timer()
|
void reset_timer()
|
||||||
{
|
{
|
||||||
pausedTime = 0;
|
|
||||||
runMarker = 0;
|
runMarker = 0;
|
||||||
runMarker2 = 0;
|
runMarker2 = 0;
|
||||||
}
|
}
|
||||||
@ -370,9 +366,6 @@ void appendRunToFile()
|
|||||||
case RESUME:
|
case RESUME:
|
||||||
fprintf(fp, "\t%s\n", "Resume");
|
fprintf(fp, "\t%s\n", "Resume");
|
||||||
break;
|
break;
|
||||||
case RESET:
|
|
||||||
fprintf(fp, "\t%s\n", "Reset");
|
|
||||||
break;
|
|
||||||
case STOP:
|
case STOP:
|
||||||
fprintf(fp, "\t%s\n", "Stop");
|
fprintf(fp, "\t%s\n", "Stop");
|
||||||
break;
|
break;
|
||||||
@ -456,9 +449,17 @@ void loadFiles()
|
|||||||
if (!fgets(buff2, 255, fp))
|
if (!fgets(buff2, 255, fp))
|
||||||
break;
|
break;
|
||||||
if (buff2[0] == '\t') {
|
if (buff2[0] == '\t') {
|
||||||
buff[strlen(buff) - 1] = '\0';
|
valuecount++;
|
||||||
buff2[strlen(buff2) - 1] = '\0';
|
|
||||||
set_metadata(buff, buff2 + 1);
|
names = realloc(names, sizeof(char*) * valuecount);
|
||||||
|
names[valuecount - 1] = malloc(strlen(buff));
|
||||||
|
strncpy(names[valuecount - 1], buff, strlen(buff) - 1);
|
||||||
|
names[valuecount - 1][strlen(buff)] = '\0';
|
||||||
|
|
||||||
|
values = realloc(values, sizeof(char*) * valuecount);
|
||||||
|
values[valuecount - 1] = malloc(strlen(buff2) - 1);
|
||||||
|
strncpy(values[valuecount - 1], buff2 + 1, strlen(buff2) - 1);
|
||||||
|
values[valuecount - 1][strlen(buff2)] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -512,20 +513,16 @@ void sendValue(int sock, char* name)
|
|||||||
char buffer[256];
|
char buffer[256];
|
||||||
int n, x;
|
int n, x;
|
||||||
bool namefound = false;
|
bool namefound = false;
|
||||||
if (name == NULL) {
|
for(int i = 0; i < valuecount; i++) {
|
||||||
strcpy(buffer, "DATA NOT PRESENT");
|
if (!strcmp(names[i], name)) {
|
||||||
} else {
|
x = i;
|
||||||
for(int i = 0; i < valuecount; i++) {
|
namefound = true;
|
||||||
if (!strcmp(meta_keys[i], name)) {
|
|
||||||
x = i;
|
|
||||||
namefound = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (namefound)
|
|
||||||
strcpy(buffer, meta_values[x]);
|
|
||||||
else
|
|
||||||
strcpy(buffer, "DATA NOT PRESENT");
|
|
||||||
}
|
}
|
||||||
|
if (namefound)
|
||||||
|
strcpy(buffer, values[x]);
|
||||||
|
else
|
||||||
|
strcpy(buffer, "DATA NOT PRESENT");
|
||||||
n = write(sock, &buffer, 256);
|
n = write(sock, &buffer, 256);
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
perror("ERROR writing to socket");
|
perror("ERROR writing to socket");
|
||||||
@ -544,59 +541,19 @@ void sendString(int sock, char* str)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_metadata(char *key, char *value)
|
void doprocessing (int sock)
|
||||||
{
|
|
||||||
char key_pos = -1;
|
|
||||||
for (int i = 0; i < valuecount; i++)
|
|
||||||
if (!strcmp(meta_keys[i], key))
|
|
||||||
key_pos = i;
|
|
||||||
if (key_pos > -1) {
|
|
||||||
meta_values[key_pos] = realloc(meta_values[key_pos], strlen(value));
|
|
||||||
strncpy(meta_values[key_pos], value, strlen(value));
|
|
||||||
meta_values[key_pos][strlen(value)] = '\0';
|
|
||||||
} else {
|
|
||||||
valuecount++;
|
|
||||||
|
|
||||||
meta_keys = realloc(meta_keys, sizeof(char*) * valuecount);
|
|
||||||
meta_keys[valuecount - 1] = malloc(strlen(key));
|
|
||||||
strncpy(meta_keys[valuecount - 1], key, strlen(key));
|
|
||||||
meta_keys[valuecount - 1][strlen(key)] = '\0';
|
|
||||||
|
|
||||||
meta_values = realloc(meta_values, sizeof(char*) * valuecount);
|
|
||||||
meta_values[valuecount - 1] = malloc(strlen(value));
|
|
||||||
strncpy(meta_values[valuecount - 1], value, strlen(value));
|
|
||||||
meta_values[valuecount - 1][strlen(value)] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void save_metadata_to_file(char *token, char *token2)
|
|
||||||
{
|
|
||||||
char* save_path = NULL;
|
|
||||||
if (files <= 0)
|
|
||||||
save_path = default_file_name;
|
|
||||||
else
|
|
||||||
save_path = filePaths[0];
|
|
||||||
FILE* fp;
|
|
||||||
|
|
||||||
fp = fopen(save_path, "r+");
|
|
||||||
fprintf(fp, "%s\n", token);
|
|
||||||
fprintf(fp, "\t%s\n\n", token2);
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
void process_socket_input(int sock)
|
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
n = read(sock, &buffer, 256);
|
n = read(sock, &buffer, 256);
|
||||||
|
char *token = strtok(buffer, " ");
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
perror("ERROR reading from socket");
|
perror("ERROR reading from socket");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
char *token = strtok(buffer, " ");
|
if (!strcmp(token, "current_time")) {
|
||||||
|
sendInt(sock, current_ms());
|
||||||
//Imperative commands
|
} else if (!strcmp(token, "start")) {
|
||||||
if (!strcmp(token, "start")) {
|
|
||||||
start();
|
start();
|
||||||
} else if (!strcmp(token, "stop")) {
|
} else if (!strcmp(token, "stop")) {
|
||||||
stop();
|
stop();
|
||||||
@ -616,6 +573,10 @@ void process_socket_input(int sock)
|
|||||||
redo();
|
redo();
|
||||||
} else if (!strcmp(token, "save")) {
|
} else if (!strcmp(token, "save")) {
|
||||||
appendRunToFile();
|
appendRunToFile();
|
||||||
|
} else if (!strcmp(token, "run_count")) {
|
||||||
|
sendInt(sock, run_count);
|
||||||
|
} else if (!strcmp(token, "segment_count")) {
|
||||||
|
sendInt(sock, segment_count);
|
||||||
} else if (!strcmp(token, "start-split-stop")) {
|
} else if (!strcmp(token, "start-split-stop")) {
|
||||||
start_split_stop();
|
start_split_stop();
|
||||||
} else if (!strcmp(token, "pause-resume")) {
|
} else if (!strcmp(token, "pause-resume")) {
|
||||||
@ -628,106 +589,15 @@ void process_socket_input(int sock)
|
|||||||
split_stop();
|
split_stop();
|
||||||
} else if (!strcmp(token, "undo-redo")) {
|
} else if (!strcmp(token, "undo-redo")) {
|
||||||
undo_redo();
|
undo_redo();
|
||||||
|
} else if (!strcmp(token, "segment_name")) {
|
||||||
//Getters
|
|
||||||
} else if (!strcmp(token, "get")) {
|
|
||||||
token = strtok(NULL, " ");
|
token = strtok(NULL, " ");
|
||||||
if (!strcmp(token, "current_time")) {
|
int x = atoi(token);
|
||||||
sendInt(sock, current_ms());
|
sendString(sock, segments[x].shortname);
|
||||||
} else if (!strcmp(token, "run_count")) {
|
} else if (!strcmp(token, "meta")) {
|
||||||
sendInt(sock, run_count);
|
|
||||||
} else if (!strcmp(token, "segment_count")) {
|
|
||||||
sendInt(sock, segment_count);
|
|
||||||
} else if (!strcmp(token, "route_count")) {
|
|
||||||
sendInt(sock, route_count);
|
|
||||||
} else if (!strcmp(token, "event_count")) {
|
|
||||||
sendInt(sock, runMarker);
|
|
||||||
} else if (!strcmp(token, "segment_shortname")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int x = atoi(token);
|
|
||||||
sendString(sock, segments[x].shortname);
|
|
||||||
} else if (!strcmp(token, "segment_longname")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int x = atoi(token);
|
|
||||||
sendString(sock, segments[x].longname);
|
|
||||||
} else if (!strcmp(token, "segment_description")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int x = atoi(token);
|
|
||||||
sendString(sock, segments[x].description);
|
|
||||||
} else if (!strcmp(token, "route_name")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int x = atoi(token);
|
|
||||||
sendString(sock, routes[x].name);
|
|
||||||
} else if (!strcmp(token, "route_segment_count")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int x = atoi(token);
|
|
||||||
sendInt(sock, routes[x].segment_count);
|
|
||||||
} else if (!strcmp(token, "route_segment_shortname")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int x = atoi(token);
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int y = atoi(token);
|
|
||||||
sendString(sock, routes[x].segments[y].shortname);
|
|
||||||
} else if (!strcmp(token, "event_time")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int x;
|
|
||||||
if (!strcmp(token, "last"))
|
|
||||||
x = runMarker - 1;
|
|
||||||
else if (!strcmp(token, "first"))
|
|
||||||
x = 0;
|
|
||||||
else
|
|
||||||
x = atoi(token);
|
|
||||||
struct timespec t;
|
|
||||||
sub_timespec(run[0].time, run[x].time, &t);
|
|
||||||
sendInt(sock, timespecToMS(t));
|
|
||||||
} else if (!strcmp(token, "event_type")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
int x;
|
|
||||||
if (!strcmp(token, "last"))
|
|
||||||
x = runMarker - 1;
|
|
||||||
else if (!strcmp(token, "first"))
|
|
||||||
x = 0;
|
|
||||||
else
|
|
||||||
x = atoi(token);
|
|
||||||
char *reply;
|
|
||||||
switch (run[x].type) {
|
|
||||||
case START:
|
|
||||||
reply = "START";
|
|
||||||
break;
|
|
||||||
case SPLIT:
|
|
||||||
reply = "SPLIT";
|
|
||||||
break;
|
|
||||||
case SKIP:
|
|
||||||
reply = "SKIP";
|
|
||||||
break;
|
|
||||||
case PAUSE:
|
|
||||||
reply = "PAUSE";
|
|
||||||
break;
|
|
||||||
case RESUME:
|
|
||||||
reply = "RESUME";
|
|
||||||
break;
|
|
||||||
case RESET:
|
|
||||||
reply = "RESET";
|
|
||||||
break;
|
|
||||||
case STOP:
|
|
||||||
reply = "STOP";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sendString(sock, reply);
|
|
||||||
} else if (!strcmp(token, "meta")) {
|
|
||||||
token = strtok(NULL, " ");
|
|
||||||
sendValue(sock, token);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Setters
|
|
||||||
} else if (!strcmp(token, "set")) {
|
|
||||||
token = strtok(NULL, " ");
|
token = strtok(NULL, " ");
|
||||||
if (!strcmp(token, "meta")) {
|
sendValue(sock, token);
|
||||||
token = strtok(NULL, " ");
|
} else {
|
||||||
char *token2 = strtok(NULL, " ");
|
printf("Recieved invalid command, ignoring...\n");
|
||||||
set_metadata(token, token2);
|
|
||||||
save_metadata_to_file(token, token2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -774,7 +644,7 @@ int main(int argc, char *argv[])
|
|||||||
perror("ERROR on accept");
|
perror("ERROR on accept");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
process_socket_input(newsockfd);
|
doprocessing(newsockfd);
|
||||||
close(newsockfd);
|
close(newsockfd);
|
||||||
}
|
}
|
||||||
free(run);
|
free(run);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user