コード例 #1
0
ファイル: dialog.cpp プロジェクト: AwesomeDoesIt/k3d
	dialog() :
		m_stream(k3d::log())
	{
		Gtk::Label* const label = new Gtk::Label(_("Logging SpaceNavigator events to stderr ...\nClose window to cancel logging."));
		add(*Gtk::manage(label));

		set_border_width(10);

		set_role("space_navigator");
		show_all();

		m_events.connect_button_signal(sigc::mem_fun(*this, &dialog::on_button));
		m_events.connect_motion_signal(sigc::mem_fun(*this, &dialog::on_motion));
	}
コード例 #2
0
ファイル: menu.c プロジェクト: ricardocerq/FEUP-LCOM
int mp_lobby()
{
	int failure = 0;
	if((set_com1_irq_set(generic_ser_subscribe_int_tx_rx(COM1))) < 0)
	{//subscribe interrupts
		printf("mp_lobby(): generic_ser_subscribe_int_tx_rx() failed \n");
		failure = 1;
	}
	if(SET_COMMUNICATION_PARAM())
	{
		printf("ser_set() failed\n");
		return 1;
	}
	initialize_lobby_buttons();
	set_role(SEARCHING);
	lobby_state = NOT_READY;
	enable_per_second_alarm(on_rtc_alarm_int_transmission);
	if(im_message_log != NULL)
		{
			size_t del_i;
			for(del_i = 0 ; del_i < size(im_message_log); del_i++)
			{
				free(*(char**)at(im_message_log, del_i));
			}
			delete_vector_t(im_message_log);
		}
	im_message_log = new_vector_t(sizeof(char*));
	memset(current_im, 0, sizeof(char)*IM_MESSAGE_MAX);
	current_im_index = 0;
	draw_im_index = 0;
	int wait = 0;
	function_to_call = NULL;
	continue_condition = true;
	fade_condition = false;
	darken = FADE_MAX;
	int ipc_status;
	message msg;
	int r;
	set_program_player2name((char*)malloc(sizeof(char)*MAX_PLAYER_NAME_LENGTH+1));
	if(get_program_playername2() == NULL)
		return 1;
	memset(get_program_playername2(),0,sizeof(char)*MAX_PLAYER_NAME_LENGTH+1);
	size_t next_char_index = 0;
	char last_char = 0;
	if(!failure){
		do{
			/* Get a request message. */
			if ( (r = driver_receive(ANY, &msg, &ipc_status)) != 0 ) {
				printf("driver_receive failed with: %d", r);
				continue;
			}
			if (is_ipc_notify(ipc_status)) { /* received notification */
				switch (_ENDPOINT_P(msg.m_source)) {
				case HARDWARE: /* hardware interrupt notification */
					if (msg.NOTIFY_ARG & get_com1_irq_set()) { /* subscribed interrupt */
						if(ser_ih(COM1))
							failure = 1;
					}
					if (msg.NOTIFY_ARG & get_kbd_irq_set()){  /* subscribed kbd interrupt */
						kbd_int_handler();
						if(get_scancode() == ESC_BREAK)
						{
							lobby_state = NOT_READY;
							fade_condition = true;
							transmit_message(MES_BYE);
						}
						if(get_role() == SERVER || get_role() == CLIENT)
						{
							if(get_scancode() == ENTER_MAKE && current_im_index != 0)
							{


								current_im_index = 0;
								transmit_protocol(current_im, TYPE_STRING, strlen(current_im)+1);
								char* temp = (char*) calloc(IM_MESSAGE_MAX + 4,1);
								strcpy(temp, "me: ");
								strcat(temp,current_im);

								push_back(im_message_log, &temp);

								memset(current_im, 0, IM_MESSAGE_MAX);
								memset(transmission_message,0,IM_MESSAGE_MAX+4);

							}
							else
							{
								int action;
								action = process_input(get_scancode(), &last_char);
								if(action == CHAR_RECEIVED)
								{
									if(current_im_index < IM_MESSAGE_MAX -1)
									{
										current_im[current_im_index] = last_char;
										current_im_index++;
									}
								}
								else if(action == BACKSPACE_MAKE)
								{
									if(current_im_index > 0)
									{
										current_im_index--;
										current_im[current_im_index] = '\0';
									}
								}
							}
						}
					}
					if (msg.NOTIFY_ARG & get_rtc_irq_set()) { /* subscribed timer interrupt */
						if(rtc_ih())
							failure = 1;
						getDateString(get_date_str_ptr());
					}
					if(msg.NOTIFY_ARG & get_timer_irq_set()){
						timer_int_handler();
						mp_lobby_render();
						//establish_connection_transmission();
					}
					if (msg.NOTIFY_ARG & get_mouse_irq_set()) { /* subscribed timer interrupt */
						mouse_int_handler();
					}
					break;
				default:
					break; /* no other notifications expected: do nothing */
				}
			} else {
			}
			establish_connection_reception();
			if(mouse_is_updated())
			{
				assign_mouse(get_previous_mouse(), get_mouse());
				assign_mouse(get_mouse(), get_mouse_state());
				if(get_role() == SERVER || get_role() == CLIENT)
					lobby_mouse_event(get_previous_mouse(), get_mouse());
				move_cursor(get_cursor(), get_mouse()->coords);
			}

		} while(continue_condition);
	}
	if(im_message_log != NULL)
	{
		size_t del_i;
		for(del_i = 0 ; del_i < size(im_message_log); del_i++)
		{
			free(*(char**)at(im_message_log, del_i));
		}
		delete_vector_t(im_message_log);
		im_message_log = NULL;
	}
	if(generic_ser_unsubscribe_int_tx_rx(COM1))
	{//unsubscribe interrupts
		printf("ser_int_receive(): generic_ser_unsubscribe_int() failed \n");
		failure = 1;
	}
	disable_per_second_alarm();
	continue_condition = true;
	fade_condition = false;
	darken = FADE_MAX;
	return 0;
}
コード例 #3
0
ファイル: menu.c プロジェクト: ricardocerq/FEUP-LCOM
void establish_connection_reception()
{
	if(get_role() == SEARCHING || get_role() == CONNECTING)
	{
		message_type_t received = 0;
		signal_type_t received_signal_type;
		size_t received_size = 0;
		if(receive_protocol(&received,&received_signal_type, &received_size) == 0)
		{
			if(received == MES_HELLO && get_role()== SEARCHING)
			{
				transmit_message(MES_ACK);
				set_role(CONNECTING);
			}
			else if(received == MES_ACK && (get_role() == CONNECTING||get_role() == SEARCHING))
			{
				transmit_message(MES_ACK);
				set_role(CONNECTED);
				transmit_protocol(get_program_playername(), TYPE_STRING, strlen(get_program_playername()));
				transmit_protocol(get_programinitialtime_ptr(), TYPE_INT, sizeof(int));
			}
		}

	}
	else if(get_role() == CONNECTED)
	{
		message_type_t received = 0;
		signal_type_t received_signal_type;
		size_t received_size = 0;

		if(receive_protocol(get_program_playername2(),&received_signal_type, &received_size) == 0)
		{
			if(received_signal_type == TYPE_STRING)
			{
				strcat(opponentmessage, get_program_playername2());
				if(strcmp(get_program_playername(), get_program_playername2()) == 0)
					set_role(FAILED);
				else if(strcmp(get_program_playername(), get_program_playername2()) < 0)
					{
						set_role(SERVER);
					}
				else set_role(CLIENT);
			}
		}
	}
	else {
		char received[100];
		memset(received, 0, 100);
		signal_type_t received_signal_type;
		size_t received_size = 0;
		if(receive_protocol(received,&received_signal_type, &received_size) == 0)
		{
			if(*(unsigned long*)received == MES_BYE)
			{
				set_role(SEARCHING);
				memset(get_program_playername2(),0,sizeof(char)*MAX_PLAYER_NAME_LENGTH+1);
				if(im_message_log != NULL)
				{

					size_t del_i;
					for(del_i = 0 ; del_i < size(im_message_log); del_i++)
					{
						free(*(char**)at(im_message_log, del_i));
					}

					clear(im_message_log);
				}
			}
			else if(received_signal_type == TYPE_INT)
			{
				set_player2time( *(unsigned long*)received);
				if(get_role() == SERVER)
					srand(*get_programinitialtime_ptr());
				else srand(get_player2time());
			}
			else if(*(unsigned long*)received == MES_READY)
			{
				if(lobby_state == NOT_READY)
					lobby_state = PLAYER2_READY;
				else if(lobby_state == PLAYER1_READY)
				{
					lobby_state = BOTH_READY;
					fade_condition = true;
				}
			}
			else if(*(unsigned long*)received == MES_UNREADY)
			{
				if(lobby_state == PLAYER2_READY)
				{
					lobby_state = NOT_READY;
				}
				else if(lobby_state == BOTH_READY)
				{
					lobby_state = PLAYER1_READY;
					fade_condition = false;
				}
			}
			else if(received_signal_type == TYPE_STRING)
			{
				char* temp = (char*) calloc(IM_MESSAGE_MAX + 5,1);
				strcpy(temp, "you: ");
				strcat(temp,received);
				push_back(im_message_log, &temp);
			}
		}
	}
}