コード例 #1
0
ファイル: imcs.c プロジェクト: Advael/teaching-minichess
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");
	}
}
コード例 #2
0
ファイル: imcs.c プロジェクト: Advael/teaching-minichess
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");
	}
}
コード例 #3
0
ファイル: imcs.c プロジェクト: Advael/teaching-minichess
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);
	}
}
コード例 #4
0
ファイル: imcs.c プロジェクト: Advael/teaching-minichess
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);
	}
}
コード例 #5
0
ファイル: zeromq.c プロジェクト: hacoo/dougchess-cpp
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);
	}
}
コード例 #6
0
ファイル: imcs.c プロジェクト: Advael/teaching-minichess
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);
		}
		
	}
}