some cleanup
このコミットが含まれているのは:
コミット
2ccce9c493
75
uttt.c
75
uttt.c
|
@ -288,15 +288,6 @@ void ut_sockdraw(const struct ut_state *state, int fd)
|
|||
}
|
||||
}
|
||||
|
||||
/*void ut_show_boards(const struct ut_state *state) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
putchar(state->boards[j][i] ? state->boards[j][i] : ' ');
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
}*/
|
||||
|
||||
int ut_readfill(int fd, char *x, size_t l)
|
||||
{
|
||||
while(l > 0)
|
||||
|
@ -411,36 +402,6 @@ int ut_cursgetpos(const struct ut_state *state, int *r, int *c)
|
|||
#undef P
|
||||
}
|
||||
|
||||
/*bool getpos(const struct ut_state *state, int *x, int *y) {
|
||||
while (true) {
|
||||
printf("Place token %c at position x,y: ", state->player);
|
||||
char line[5] = {0};
|
||||
if (fgets(line, 5, stdin) == NULL)
|
||||
return false;
|
||||
// line was too short
|
||||
if (line[3] == '\0')
|
||||
continue;
|
||||
// line was too long
|
||||
if (line[3] != '\n') {
|
||||
// consume rest of line
|
||||
while (true) {
|
||||
int garbage = getchar();
|
||||
if (garbage == EOF)
|
||||
return false;
|
||||
if (garbage == '\n')
|
||||
break;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
int sscanf_result = sscanf(line, "%d,%d", x, y);
|
||||
if (sscanf_result == EOF)
|
||||
return false;
|
||||
if (sscanf_result != 2)
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}*/
|
||||
|
||||
int ut_ignore_line(int sock) {
|
||||
char byte;
|
||||
|
@ -453,7 +414,7 @@ int ut_ignore_line(int sock) {
|
|||
return 2;
|
||||
}
|
||||
|
||||
int ut_sockgetpos(const struct ut_state *state, int sock, int *y, int *x, bool readable) { // TODO
|
||||
int ut_sockgetpos(const struct ut_state *state, int sock, int *y, int *x, bool readable) {
|
||||
int index = 0;
|
||||
char byte;
|
||||
while (true) {
|
||||
|
@ -509,7 +470,7 @@ int ut_local_game(struct ut_state *state) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
int ut_network_game(struct ut_state *state, int sock, char player, bool readable) { // TODO
|
||||
int ut_network_game(struct ut_state *state, int sock, char player, bool readable) {
|
||||
while (true) {
|
||||
int r = 4, c = 4;
|
||||
ut_curserase();
|
||||
|
@ -571,7 +532,7 @@ char ut_random_player(void) {
|
|||
int ut_host_game(struct ut_state *state) {
|
||||
int sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (sock == -1) {
|
||||
printf("error %d\n", errno);
|
||||
ut_cursprintf("error %d\n", errno);
|
||||
return 1;
|
||||
}
|
||||
const struct sockaddr_in addr = {
|
||||
|
@ -581,19 +542,21 @@ int ut_host_game(struct ut_state *state) {
|
|||
};
|
||||
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int));
|
||||
if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
|
||||
printf("error %d\n", errno);
|
||||
ut_cursprintf("error %d\n", errno);
|
||||
return 1;
|
||||
}
|
||||
if (listen(sock, 128) == -1) {
|
||||
printf("error %d\n", errno);
|
||||
ut_cursprintf("error %d\n", errno);
|
||||
return 1;
|
||||
}
|
||||
ut_cursprintf("Waiting for game partner at 127.0.0.1:6669 ...\n");
|
||||
refresh();
|
||||
int conn = accept(sock, NULL, NULL);
|
||||
if (conn == -1) {
|
||||
printf("error %d\n", errno);
|
||||
ut_cursprintf("error %d\n", errno);
|
||||
return 1;
|
||||
}
|
||||
close(sock);
|
||||
|
||||
// decide X or O
|
||||
char player;
|
||||
|
@ -603,17 +566,17 @@ int ut_host_game(struct ut_state *state) {
|
|||
char byte;
|
||||
ut_dprintf(conn, "| Press enter to start.\n");
|
||||
if (ut_readfill(conn, &byte, 1)) {
|
||||
printf("Connection closed.\n");
|
||||
ut_cursprintf("Connection closed.\n");
|
||||
return 1;
|
||||
}
|
||||
bool readable = byte != '\0';
|
||||
bool readable = (byte != '\0');
|
||||
if (byte != '\n') {
|
||||
int err = ut_ignore_line(conn);
|
||||
if (err == 1) {
|
||||
printf("Connection closed.\n");
|
||||
ut_cursprintf("Connection closed.\n");
|
||||
return 1;
|
||||
} else if (err == 2) {
|
||||
printf("Partner sent too much data - exiting\n");
|
||||
ut_cursprintf("Partner sent too much data - exiting\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -630,7 +593,7 @@ int ut_host_game(struct ut_state *state) {
|
|||
int ut_join_game(struct ut_state *state) {
|
||||
int sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (sock == -1) {
|
||||
printf("error %d\n", errno);
|
||||
ut_cursprintf("error %d\n", errno);
|
||||
return 1;
|
||||
}
|
||||
const struct sockaddr_in addr = {
|
||||
|
@ -639,9 +602,10 @@ int ut_join_game(struct ut_state *state) {
|
|||
.sin_addr = { .s_addr = htonl(0x7f000001) },
|
||||
};
|
||||
ut_cursprintf("Connecting to game host at 127.0.0.1:6669 ...\n");
|
||||
refresh();
|
||||
if(connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1)
|
||||
{
|
||||
printf("error %d\n", errno);
|
||||
ut_cursprintf("error %d\n", errno);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -649,20 +613,19 @@ int ut_join_game(struct ut_state *state) {
|
|||
ut_writefill(sock, "\0\n", 2);
|
||||
|
||||
// host decides X or O
|
||||
char player_buf[2];
|
||||
char *player = player_buf;
|
||||
char player[2];
|
||||
for (int i = 0; i < 10; i++) {
|
||||
int r = ut_readfill(sock, player_buf, 1);
|
||||
int r = ut_readfill(sock, player, 1);
|
||||
ut_ignore_line(sock);
|
||||
if (*player == '|') {
|
||||
continue;
|
||||
}
|
||||
if (r == 2) {printf("Connection closed.\n");}
|
||||
if (r == 2) {ut_cursprintf("Connection closed.\n");}
|
||||
if (r != 0) {return 1;}
|
||||
break;
|
||||
}
|
||||
if (*player != 'X' && *player != 'O') {
|
||||
printf("Host is retarded.\n");
|
||||
ut_cursprintf("Host is retarded.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
読み込み中…
新しいイシューから参照