#include #include #include #include #include #include #include #include #include #include "Strategy.h" using namespace std; int main(int argc, char **argv) { int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sockfd == -1) { perror("socket()"); return -1; } sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(3030); addr.sin_addr.s_addr = inet_addr(argc >= 2 ? argv[1] : "127.0.0.1"); if (connect(sockfd, (sockaddr*)&addr, sizeof(addr)) == -1) { perror("connect()"); return -1; } fprintf(stderr, "Connected to server.\n"); FILE *fserverr = fdopen(sockfd, "r"); FILE *fserverw = fdopen(dup(sockfd), "w"); static char buf[128]; while (true) { if (fscanf(fserverr, "%s", buf) == -1) break; string method(buf); if (method == "init") { int n; fscanf(fserverr, "%d", &n); vector> B(n, vector(n)); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) fscanf(fserverr, "%d", &B[i][j]); } initStrategy(n, B); fprintf(stderr, "init() called\n"); } else if (method == "getMove") { int lstX, lstY; fscanf(fserverr, "%d %d", &lstX, &lstY); fprintf(stderr, "getMove(%d, %d) called\n", lstX, lstY); auto [x, y] = getMove(lstX, lstY); if (fprintf(fserverw, "%d %d\n", x, y) == -1) { perror("send(getMove)"); return -1; } fflush(fserverw); fprintf(stderr, "getMove(%d, %d): (%d, %d)\n", lstX, lstY, x, y); } else { fprintf(stderr, "Unknown method: %s\n", method.c_str()); return -1; } } close(sockfd); return 0; }