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)); }
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; }
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); } } } }