void imcs_ratings() { { assert(imcs_connected() == true); } { webserver_broadcast("imcs_buffer", ">>> ratings\n"); } { imcs_charBuffer[0] = '\0'; sprintf(imcs_charOperation, "imcs_ratings"); sprintf(imcs_charTermination, ".\r\n"); mg_printf(imcs_mgconnectionHandle, "ratings\n"); } }
void imcs_offer() { { assert(imcs_connected() == true); } { webserver_broadcast("imcs_buffer", ">>> offer\n"); } { imcs_charBuffer[0] = '\0'; sprintf(imcs_charOperation, "imcs_offer"); imcs_charTermination[0] = '\0'; mg_printf(imcs_mgconnectionHandle, "offer W\n"); } }
void imcs_accept(int intIdent) { { assert(imcs_connected() == true); } { char charBuffer[1024] = { }; sprintf(charBuffer, ">>> accept %d\n", intIdent); webserver_broadcast("imcs_buffer", charBuffer); } { imcs_charBuffer[0] = '\0'; sprintf(imcs_charOperation, "imcs_accept"); imcs_charTermination[0] = '\0'; mg_printf(imcs_mgconnectionHandle, "accept %d B\n", intIdent); } }
void imcs_login(char* charUser, char* charPass) { { assert(imcs_connected() == true); } { char charBuffer[1024] = { }; sprintf(charBuffer, ">>> me %s\n", charUser); webserver_broadcast("imcs_buffer", charBuffer); } { imcs_charBuffer[0] = '\0'; sprintf(imcs_charOperation, "imcs_login"); sprintf(imcs_charTermination, "\r\n"); mg_printf(imcs_mgconnectionHandle, "me %s %s\n", charUser, charPass); } }
void zeromq_thread() { { void* objectContext = zmq_ctx_new(); void* objectSocket = zmq_socket(objectContext, ZMQ_PAIR); { char charZeromq[1024] = { }; sprintf(charZeromq, "tcp://localhost:%d", main_intZeromq); if (zmq_connect(objectSocket, charZeromq) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } } { zeromq_objectSocket = objectSocket; } { void* objectMonitor = zmq_socket(objectContext, ZMQ_PAIR); { if (zmq_socket_monitor(objectSocket, "inproc://minichess-zeromq-monitor", ZMQ_EVENT_ALL) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } if (zmq_connect(objectMonitor, "inproc://minichess-zeromq-monitor") == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } } { do { int intEventspecifier = 0; int intEventvalue = 0; char charEventaddress[256] = { }; #if (ZMQ_VERSION_MAJOR == 3) { zmq_msg_t objectMessage = { }; zmq_msg_init(&objectMessage); if (zmq_recvmsg(objectMonitor, &objectMessage, 0) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } zmq_event_t objectEvent = { }; memcpy(&objectEvent, zmq_msg_data(&objectMessage), sizeof(objectEvent)); intEventspecifier = objectEvent.event; intEventvalue = 0 charEventaddress[0] = '\0'; zmq_msg_close(&objectMessage); } #elif (ZMQ_VERSION_MAJOR == 4) { zmq_msg_t objectMessage = { }; zmq_msg_init(&objectMessage); if (zmq_recvmsg(objectMonitor, &objectMessage, 0) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } uint8_t* intData = (uint8_t*) (zmq_msg_data(&objectMessage)); intEventspecifier = *(uint16_t*) (intData + 0); intEventvalue = *(uint32_t*) (intData + 2); zmq_msg_close(&objectMessage); } { zmq_msg_t objectMessage = { }; zmq_msg_init(&objectMessage); if (zmq_recvmsg(objectMonitor, &objectMessage, 0) == -1) { printf("zeromq: %s\n", zmq_strerror(zmq_errno())); } charEventaddress[0] = '\0'; zmq_msg_close(&objectMessage); } #endif { if (intEventspecifier == ZMQ_EVENT_CONNECTED) { { zeromq_boolConnected = true; webserver_broadcast("zeromq_status", NULL); } { cJSON* objectOut = cJSON_CreateObject(); cJSON* objectIn = NULL; { cJSON_AddStringToObject(objectOut, "strFunction", "ping"); } { zeromq_send(objectOut); objectIn = zeromq_recv(); } { strcpy(zeromq_charClient, cJSON_GetObjectItem(objectIn, "strOut")->valuestring); webserver_broadcast("zeromq_name", NULL); } cJSON_Delete(objectOut); cJSON_Delete(objectIn); } { printf("zeromq: connected to %s\n", zeromq_charClient); } } else if (intEventspecifier == ZMQ_EVENT_DISCONNECTED) { { zeromq_boolConnected = false; webserver_broadcast("zeromq_status", NULL); } { printf("zeromq: disconnected from %s\n", zeromq_charClient); } } } { if (intEventspecifier == ZMQ_EVENT_CONNECTED) { int intTest = 0; if (intTest > 0) { setbuf(stdout, NULL); } if (intTest > 0) { printf("test_board: "); printf("%d\n", test_board()); } if (intTest > 1) { printf("test_winner: "); printf("%d\n", test_winner()); } if (intTest > 2) { printf("test_isValid: "); printf("%d\n", test_isValid()); } if (intTest > 3) { printf("test_isEnemy: "); printf("%d\n", test_isEnemy()); } if (intTest > 4) { printf("test_isOwn: "); printf("%d\n", test_isOwn()); } if (intTest > 5) { printf("test_isNothing: "); printf("%d\n", test_isNothing()); } if (intTest > 6) { printf("test_eval: "); printf("%d\n", test_eval()); } if (intTest > 7) { printf("test_moves: "); printf("%d\n", test_moves()); } if (intTest > 8) { printf("test_move: "); printf("%d\n", test_move()); } if (intTest > 9) { printf("test_undo: "); printf("%d\n", test_undo()); } if (intTest > 10) { printf("test_movesShuffled: "); printf("%d\n", test_movesShuffled()); } if (intTest > 11) { printf("test_movesEvaluated: "); printf("%d\n", test_movesEvaluated()); } if (intTest > 12) { printf("test_moveRandom: "); printf("%d\n", test_moveRandom()); } if (intTest > 13) { printf("test_moveGreedy: "); printf("%d\n", test_moveGreedy()); } if (intTest > 14) { printf("test_moveNegamax: "); printf("%d\n", test_moveNegamax()); } if (intTest > 15) { printf("test_moveAlphabeta: "); printf("%d\n", test_moveAlphabeta()); } } } } while (pthread_mutex_trylock(&zeromq_objectRunning) != 0); pthread_mutex_unlock(&zeromq_objectRunning); } zmq_close(objectMonitor); } zmq_close(objectSocket); zmq_ctx_destroy(objectContext); } }
void imcs_handler(struct mg_connection* mgconnectionHandle, int intEvent, void* voidData) { if (intEvent == MG_EV_CONNECT) { { printf("imcs: connected\n"); } { imcs_boolConnected = true; imcs_boolAuthorized = false; webserver_broadcast("imcs_status", NULL); } } else if (intEvent == MG_EV_CLOSE) { { printf("imcs: disconnected\n"); } { imcs_boolConnected = false; imcs_boolAuthorized = false; webserver_broadcast("imcs_status", NULL); } { imcs_mgconnectionHandle = mg_connect(imcs_mgmgrHandle, imcs_charServer, imcs_handler); } } else if (intEvent == MG_EV_RECV) { { mgconnectionHandle->recv_mbuf.buf[mgconnectionHandle->recv_mbuf.len] = '\0'; } { if (strstr(mgconnectionHandle->recv_mbuf.buf, "201 hello") != NULL) { imcs_boolAuthorized = true; webserver_broadcast("imcs_status", NULL); } else if (strstr(mgconnectionHandle->recv_mbuf.buf, "202 hello new user") != NULL) { imcs_boolAuthorized = true; webserver_broadcast("imcs_status", NULL); } } { webserver_broadcast("imcs_buffer", mgconnectionHandle->recv_mbuf.buf); } { strncat(imcs_charBuffer, mgconnectionHandle->recv_mbuf.buf, mgconnectionHandle->recv_mbuf.len); } { int intSplit = 0; char charSplit[256][1024] = { }; intSplit += 1; strcpy(charSplit[0], imcs_charBuffer); for (int intFor1 = 1; strstr(charSplit[intFor1 - 1], "\r\n") != NULL; intFor1 += 1) { intSplit += 1; strcpy(charSplit[intFor1], strstr(charSplit[intFor1 - 1], "\r\n") + strlen("\r\n")); strstr(charSplit[intFor1 - 1], "\r\n")[0] = '\0'; } for (int intFor1 = 0; intFor1 < intSplit; intFor1 += 1) { if (strncmp(charSplit[intFor1], "105", strlen("105")) == 0) { chess_reset(); } else if (strncmp(charSplit[intFor1], "106", strlen("106")) == 0) { chess_reset(); } else if (strncmp(charSplit[intFor1], "230", strlen("230")) == 0) { webserver_broadcast("imcs_operation", "competition"); imcs_charBuffer[0] = '\0'; } else if (strncmp(charSplit[intFor1], "231", strlen("231")) == 0) { webserver_broadcast("imcs_operation", "competition"); imcs_charBuffer[0] = '\0'; } else if (strncmp(charSplit[intFor1], "232", strlen("232")) == 0) { webserver_broadcast("imcs_operation", "competition"); imcs_charBuffer[0] = '\0'; } else if (strncmp(charSplit[intFor1], "408", strlen("408")) == 0) { webserver_broadcast("imcs_operation", "competition"); imcs_charBuffer[0] = '\0'; } else if (strncmp(charSplit[intFor1], "?", strlen("?")) == 0) { char charMove[1024] = { }; { char charBuffer[1024] = { }; strcpy(charBuffer, charSplit[intFor1 - 1]); chess_boardSet(charBuffer); webserver_broadcast("imcs_board", charBuffer); } { int intTime = 0; intTime += (charSplit[intFor1][2] - '0') * 600000; intTime += (charSplit[intFor1][3] - '0') * 60000; intTime += (charSplit[intFor1][5] - '0') * 10000; intTime += (charSplit[intFor1][6] - '0') * 1000; intTime += (charSplit[intFor1][8] - '0') * 100; intTime += (charSplit[intFor1][9] - '0') * 10; intTime += (charSplit[intFor1][10] - '0') * 1; chess_moveAlphabeta(charMove, -1, intTime); } { char charBuffer[1024] = { }; sprintf(charBuffer, ">>> move %.5s\n", charMove); webserver_broadcast("imcs_buffer", charBuffer); } { mg_printf(imcs_mgconnectionHandle, "%.5s\r\n", charMove); } { char charBuffer[1024] = { }; chess_boardGet(charBuffer); webserver_broadcast("imcs_board", charBuffer); } { imcs_charBuffer[0] = '\0'; } } } } { if (imcs_charTermination[0] != '\0') { if (strstr(imcs_charBuffer, imcs_charTermination) != NULL) { webserver_broadcast("imcs_operation", imcs_charOperation); imcs_charBuffer[0] = '\0'; imcs_charOperation[0] = '\0'; imcs_charTermination[0] = '\0'; } } } { mbuf_remove(&mgconnectionHandle->recv_mbuf, mgconnectionHandle->recv_mbuf.len); } } }