Esempio n. 1
0
static DC_ClientEvent *handle_special_msg(const char *message)
{
	if (!strncmp(message, DC_MSG_CANCEL, strlen(DC_MSG_CANCEL)) &&
			message[strlen(DC_MSG_CANCEL)] == ':')
	{
		if (strcmp(message + strlen(DC_MSG_CANCEL) + 1, wu_name))
		{
			DC_log(LOG_WARNING, "Received CANCEL message for "
				"unknown WU %s",
				message + strlen(DC_MSG_CANCEL) + 1);
			return NULL;
		}
		DC_log(LOG_NOTICE, "Received cancel request from the master");
		client_state = STATE_FINISH;
		return new_event(DC_CLIENT_FINISH);
	}
	if (!strcmp(message, DC_MSG_SUSPEND))
	{
		DC_log(LOG_NOTICE, "Received suspend request from the master");
		client_state = STATE_SUSPEND;
		return new_event(DC_CLIENT_CHECKPOINT);
	}

	DC_log(LOG_WARNING, "Received unknown control message %s", message);

	return NULL;
}
Esempio n. 2
0
void
fill_ev_table(char *input) {
	char *str1, *str2, *str3, *str4,
		 *token, *subtoken, *kommatoken, *dptoken;
	char *saveptr1=NULL, 
		 *saveptr2=NULL, 
		 *saveptr3=NULL, 
		 *saveptr4=NULL;
	int j, i=0, k=0;
	long eid=0;
	handlerf *ah=0;

	for (j = 1, str1 = input; ; j++, str1 = NULL) {
		token = strtok_r(str1, ";", &saveptr1);
		if (token == NULL)
			break;

		for (str2 = token; ; str2 = NULL) {
			subtoken = strtok_r(str2, "=", &saveptr2);
			if (subtoken == NULL)
				break;
			if( (str2 == token) && ((eid = get_ev_id(subtoken)) != -1))
				;
			else if(eid == -1)
				break;

			for (str3 = subtoken; ; str3 = NULL) {
				kommatoken = strtok_r(str3, ",", &saveptr3);
				if (kommatoken == NULL)
					break;

				for (str4 = kommatoken; ; str4 = NULL) {
					dptoken = strtok_r(str4, ":", &saveptr4);
					if (dptoken == NULL) {
						break;
					}
					if(str4 == kommatoken && str4 != token && eid != -1) {
						if((ah = get_action_handler(dptoken)) != NULL) {
							new_event(eid);
							add_handler(eid, i, ah);
							i++;
						}
					}
					else if(str4 != token && eid != -1 && ah) {
						add_option(eid, i-1, k, dptoken);
						k++;
					}
					else if(!ah)
						break;
				}
				k=0;
			}
			new_event(eid);
			add_handler(eid, i, NULL);
			i=0; 
		}
	}
}
Esempio n. 3
0
int file_change(DIR_NODE *old_dir, DIR_NODE *new_dir)
{
    FILE_NODE *old_file = old_dir->next_file;
    FILE_NODE *new_file;

    int change_flag = UNCHANGED;
    /*get deleted or modified files*/
    while (old_file != NULL)
    {
        new_file = new_dir->next_file;
        while (new_file != NULL)
        {
            if (OK == is_same_file(old_file, new_file))
            {
                /*get modifid files*/
                if (OK == is_file_changed(old_file, new_file))
                {
                    new_event(MOD_FILE, (void *)new_file);
                    change_flag = CHANGED;
                }
                break;
            }
            new_file = new_file->next_file;
        }
        if (NULL == new_file)
        {
            change_flag = CHANGED;
            new_event(DEL_FILE, (void *)old_file);
        }
       old_file = old_file->next_file;
    }

    new_file = new_dir->next_file;
    /*get new files*/
    while (new_file)
    {
        old_file = old_dir->next_file;
        while (old_file != NULL)
        {
            /*don't need get modifid files*/
            if (OK == is_same_file(old_file, new_file))
                break;
            old_file = old_file->next_file;
        }
        if (NULL == old_file)
        {
            change_flag = CHANGED;
            TEST
            new_event(ADD_FILE, (void *)new_file);
        }
        new_file = new_file->next_file;
    }
    return change_flag;
}
Esempio n. 4
0
void GDNetHost::poll_events() {
	ENetEvent event;

	if (enet_host_service(_host, &event, _event_wait) > 0) {
		_event_queue.push(new_event(event));

		while (enet_host_check_events(_host, &event) > 0) {
			_event_queue.push(new_event(event));
		}
	}
}
Esempio n. 5
0
int chl_dir_change(DIR_NODE *old_dir, DIR_NODE *new_dir)
{
    DIR_NODE *old_chl_dir = old_dir->next_chl_dir;
    DIR_NODE *new_chl_dir;

    int change_flag = UNCHANGED;

    while (old_chl_dir != NULL)
    {
        new_chl_dir = new_dir->next_chl_dir;
        while (new_chl_dir != NULL)
        {
            if (OK == is_same_dir(old_chl_dir, new_chl_dir))
            {
                if (CHANGED == dir_changes(old_chl_dir, new_chl_dir))
                {
                    change_flag = CHANGED;
                }
                break;
            }
            new_chl_dir = new_chl_dir->next_bro_dir;
        }
        if (new_chl_dir == NULL)
        {
            change_flag = CHANGED;
            new_event(DEL_DIR, (void*)old_chl_dir);
        }
        old_chl_dir = old_chl_dir->next_bro_dir;
    }

    new_chl_dir = new_dir->next_chl_dir;
    while (new_chl_dir != NULL)
    {
        old_chl_dir = old_dir->next_chl_dir;
        while (old_chl_dir != NULL)
        {
            if (OK == is_same_dir(old_chl_dir, new_chl_dir))
            {
                break;
            }
            old_chl_dir = old_chl_dir->next_bro_dir;
        }
        if (old_chl_dir == NULL)
        {
            change_flag = CHANGED;
            new_event(ADD_DIR, (void *)new_chl_dir);
        }
        new_chl_dir = new_chl_dir->next_bro_dir;
    }
    return change_flag;
}
Esempio n. 6
0
void add_dir_to_task(DIR_NODE *dir)
{
    FILE_NODE *file = dir->next_file;
    DIR_NODE *dir_chl = dir->next_chl_dir;
    while (file)
    {
        new_event(ADD_FILE, (void *)file);
        file = file->next_file;
    }
    while (dir_chl)
    {
        new_event (ADD_DIR, (void *)dir_chl);
        dir_chl = dir_chl->next_bro_dir;
    }
}
Esempio n. 7
0
void SyncEventListener :: newEvent(EventBroadcaster* sender, EventDataPtr data)
{
    if (!m_enabled) return;
    m_lock.lock();
    Event new_event (sender, data);

    bool sender_in_queue = false;
    for (int i = 0; i < m_unprocessed_ordered_events.size(); ++i)
    {
        if (m_unprocessed_ordered_events[i].sender == sender)
        {
            // A event was received some time ago and left unprocessed.
            // Leave it at its place in the queue, but update the data
            // since there is no buffer it does not make sense to discard
            // the new data and process the old one.
            m_unprocessed_ordered_events[i] = new_event;
            sender_in_queue = true;
            break;
        }
    }

    if (!sender_in_queue)
    {
        m_unprocessed_ordered_events.push_back(new_event);
    }

    m_condition.wakeAll();
    m_lock.unlock();
}
Esempio n. 8
0
/**
 * parse_events - parse a perf style string with events
 * @el: List of events allocated earlier
 * @events: Comma separated lists of events. {} style groups are legal.
 *
 * JSON events are supported, if the event lists are downloaded first.
 */
int parse_events(struct eventlist *el, char *events)
{
	char *s, *tmp;

	events = strdup(events);
	if (! events) return -1;
	for (s = strtok_r(events, ",", &tmp);
	     s;
	     s = strtok_r(NULL, ",", &tmp)) {
		bool group_leader = false, end_group = false;
		int len;

		if (s[0] == '{') {
			s++;
			group_leader = true;
		} else if (len = strlen(s), len > 0 && s[len - 1] == '}') {
			s[len - 1] = 0;
			end_group = true;
		}

		struct event *e = new_event(el, s);
		e->group_leader = group_leader;
		e->end_group = end_group;
		if (resolve_event(s, &e->attr) < 0) {
			fprintf(stderr, "Cannot resolve %s\n", e->event);
			return -1;
		}
	}
	free(events);
	return 0;
}
Esempio n. 9
0
void SessionAPIInterface::OnAPIUserNameNeeded()
{
    qDebug() << "SessionAPIInterface:OnAPIUserNameNeeded: begin";
    Event myevent(abbsd::sessionbadusername);
    myevent.add_source(Event::ES_INTERNAL);
    emit new_event(myevent);
}
Esempio n. 10
0
void SessionAPIInterface::OnAPISessionOk()
{
    qDebug() << "SessionAPIInterface:OnAPISessionOk: begin";
    Event myevent(abbsd::sessionok);
    myevent.add_source(Event::ES_INTERNAL);
    emit new_event(myevent);
}
Esempio n. 11
0
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    SodaClient::_nb_inst = 1;

// ouverture du fichier de configuration du plugin. ce fichier contient l'IP serveur, le port, le conteneur de donnée auquel l'application doit s'inscrire
    config conf;
    conf.read_config();

// préparation de la connexion au serveur et au conteneur de données
    //instanciation du client Soda et du conteneur de données
    QHostAddress adress1(conf.IP);                                  //adresse du serveur
    SodaClient* sc = new SodaClient( adress1, conf.port.toInt() );  //connexion des client Soda avec le port
    sc->reg_type( conf.data_container );                            //connexion aux conteneurs de données observés


// initialisation du launcher d'application à personnaliser
    Launcher *launcher = new Launcher();
    launcher->sc = sc;

// connexion des signaux et slot, action répondant aux événements
    QObject::connect(sc, SIGNAL(new_event(SodaClient::Event)), launcher, SLOT(launch(SodaClient::Event)));    //inscription d'un événement launch lors d'un signal venant de l'objet
    QObject::connect(sc, SIGNAL(quit()), &app, SLOT(quit()));                                                 //fin du programme lorsqu'un serveur s'éteint

// lancement de la boucle d'événement
    return app.exec();

};
Esempio n. 12
0
void SessionAPIInterface::OnAPILoginErr(AuthAPI::ERRCODE code)
{
    qDebug() << "SessionAPIInterface:OnAPILoginErr: begin";
    Event myevent;
    switch(code){
        case AuthAPI::BAD_USERNAME:
        case AuthAPI::ALREADY_LOGGED:
            break;
        case AuthAPI::BAD_CREDENTIALS:
            myevent = Event(abbsd::sessionbadcredentials);
            myevent.add_source(Event::ES_INTERNAL);
            emit new_event(myevent);
            break;
        case AuthAPI::SERVER_TIMEOUT:
            myevent = Event(abbsd::sessionservererror);
            myevent.add_source(Event::ES_INTERNAL);
            emit new_event(myevent);
            break;
    }
}
Esempio n. 13
0
void netlink_wrapper::link_cache_callback(nl_cache* , nl_object* obj, int)
{
	nl_logfunc( "---> link_cache_callback");
	struct rtnl_link* link = (struct rtnl_link*) obj;
	link_nl_event new_event(g_nl_rcv_arg.msghdr, link, g_nl_rcv_arg.netlink);

	notify_observers(&new_event, nlgrpLINK);

	g_nl_rcv_arg.msghdr = NULL;
	nl_logfunc( "<--- link_cache_callback");
}
Esempio n. 14
0
void netlink_wrapper::neigh_cache_callback(nl_cache* , nl_object* obj, int)
{
	nl_logfunc( "---> neigh_cache_callback");
	struct rtnl_neigh* neigh = (struct rtnl_neigh*)obj;
	neigh_nl_event new_event(g_nl_rcv_arg.msghdr, neigh, g_nl_rcv_arg.netlink);

	notify_observers(&new_event, nlgrpNEIGH);

	g_nl_rcv_arg.msghdr = NULL;
	nl_logfunc( "<--- neigh_cache_callback");

}
Esempio n. 15
0
static void gtk_checklist_toggled(GtkCellRendererToggle * WXUNUSED(renderer),
                                  gchar                 *stringpath,
                                  wxCheckListBox        *listbox)
{
    wxCHECK_RET( listbox->m_treeview != NULL, wxT("invalid listbox") );

    wxGtkTreePath path(stringpath);
    wxCommandEvent new_event( wxEVT_CHECKLISTBOX,
                              listbox->GetId() );
    new_event.SetEventObject( listbox );
    new_event.SetInt( gtk_tree_path_get_indices(path)[0] );
    new_event.SetString( listbox->GetString( new_event.GetInt() ));
    listbox->Check( new_event.GetInt(), !listbox->IsChecked(new_event.GetInt()));
    listbox->HandleWindowEvent( new_event );
}
Esempio n. 16
0
void netlink_wrapper::route_cache_callback(nl_cache* , nl_object* obj, int)
{
	nl_logfunc( "---> route_cache_callback");
	struct rtnl_route* route = (struct rtnl_route*) obj;
	route_nl_event new_event(g_nl_rcv_arg.msghdr, route,g_nl_rcv_arg.netlink);
	// notify only route events of main table
	const netlink_route_info* info =  new_event.get_route_info();
	if (info->table == ROUTE_MAIN_TABLE_ID) {
		notify_observers(&new_event, nlgrpROUTE);
	}
	else {
		nl_logfunc("ROUTE events from non-main route table are filtered: table_id=%d", info->table);
	}
	g_nl_rcv_arg.msghdr = NULL;
	nl_logfunc( "<--- route_cache_callback");
}
Esempio n. 17
0
void retry_outgoing(outgoing_t *outgoing) {
	outgoing->timeout += 5;

	if(outgoing->timeout > maxtimeout)
		outgoing->timeout = maxtimeout;

	if(outgoing->event)
		event_del(outgoing->event);
	outgoing->event = new_event();
	outgoing->event->handler = (event_handler_t) setup_outgoing_connection;
	outgoing->event->time = now + outgoing->timeout;
	outgoing->event->data = outgoing;
	event_add(outgoing->event);

	ifdebug(CONNECTIONS) logger(LOG_NOTICE,
			   "Trying to re-establish outgoing connection in %d seconds",
			   outgoing->timeout);
}
Esempio n. 18
0
int     main_loop(int error, t_servinfo *servinfo)
{
  fd_set		readfds;
  fd_set		writefds;
  t_list		*list;
  int			maxfd;

  list = NULL;
  while (1)
    {
      FD_ZERO(&readfds);
      init_fd(servinfo->sock, list, &readfds);
      maxfd = recup_maxfd(list, servinfo->sock);
      if ((error = select(maxfd + 1, &readfds, &writefds, NULL, NULL)) != -1)
	{
	  new_event(&list, &readfds);
	  if (FD_ISSET(servinfo->sock, &readfds))
	    recup_info_client(&list, servinfo);
	}
    }
  return (0);
}
Esempio n. 19
0
extern void *
evt_deserialize(int type, u_char *event, int size)
{
    return new_event(type);
}
Esempio n. 20
0
void wxListBox::OnChar(wxKeyEvent& event)
{
    if ( event.GetKeyCode() == WXK_RETURN || event.GetKeyCode() == WXK_NUMPAD_ENTER)
    {
        wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
        if ( tlw && tlw->GetDefaultItem() )
        {
            wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
            if ( def && def->IsEnabled() )
            {
                wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
                event.SetEventObject(def);
                def->Command(event);
                return ;
            }
        }
        event.Skip() ;
    }
    /* generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs) */
    else if (event.GetKeyCode() == WXK_ESCAPE || (event.GetKeyCode() == '.' && event.MetaDown() ) )
    {
        // FIXME: look in ancestors, not just parent.
        wxWindow* win = GetParent()->FindWindow( wxID_CANCEL ) ;
        if (win)
        {
            wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
            new_event.SetEventObject( win );
            win->GetEventHandler()->ProcessEvent( new_event );
        }
    }
    else if ( event.GetKeyCode() == WXK_TAB )
    {
        wxNavigationKeyEvent new_event;
        new_event.SetEventObject( this );
        new_event.SetDirection( !event.ShiftDown() );
        /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
        new_event.SetWindowChange( event.ControlDown() );
        new_event.SetCurrentFocus( this );
        if ( !GetEventHandler()->ProcessEvent( new_event ) )
            event.Skip() ;
    }
    else if ( event.GetKeyCode() == WXK_DOWN || event.GetKeyCode() == WXK_UP )
    {
        // perform the default key handling first
        wxControl::OnKeyDown( event ) ;

        wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId);
        event.SetEventObject( this );

        wxArrayInt aSelections;
        int n, count = GetSelections(aSelections);
        if ( count > 0 )
        {
            n = aSelections[0];
            if ( HasClientObjectData() )
                event.SetClientObject( GetClientObject(n) );
            else if ( HasClientUntypedData() )
                event.SetClientData( GetClientData(n) );
            event.SetString(GetString(n));
        }
        else
        {
            n = -1;
        }

        event.SetInt(n);

        GetEventHandler()->ProcessEvent(event);
    }
    else
    {
        if ( event.GetTimestamp() > m_lastTypeIn + 60 )
        {
            m_typeIn = wxEmptyString ;
        }
        m_lastTypeIn = event.GetTimestamp() ;
        m_typeIn += (char) event.GetKeyCode() ;
        int line = FindString(wxT("*")+m_typeIn+wxT("*")) ;
        if ( line >= 0 )
        {
            if ( GetSelection() != line )
            {
                SetSelection(line) ;
                wxCommandEvent event(wxEVT_COMMAND_LISTBOX_SELECTED, m_windowId);
                event.SetEventObject( this );

                if ( HasClientObjectData() )
                    event.SetClientObject( GetClientObject( line ) );
                else if ( HasClientUntypedData() )
                    event.SetClientData( GetClientData(line) );
                event.SetString(GetString(line));

                event.SetInt(line);

                GetEventHandler()->ProcessEvent(event);
            }
        }
    }
}
Esempio n. 21
0
bool wxApp::MacSendCharEvent( wxWindow* focus , long keymessage , long modifiers , long when , wxChar uniChar )
{
    if ( !focus )
        return false ;
    wxKeyEvent event(wxEVT_CHAR) ;
    MacCreateKeyEvent( event, focus , keymessage , modifiers , when , uniChar ) ;

    bool handled = false ;

#if wxOSX_USE_CARBON
    long keyval = event.m_keyCode ;

    {
        wxKeyEvent eventCharHook(wxEVT_CHAR_HOOK, event);
        handled = focus->HandleWindowEvent( eventCharHook );
        if ( handled && eventCharHook.IsNextEventAllowed() )
            handled = false ;
    }

    if ( !handled )
    {
        handled = focus->HandleWindowEvent( event ) ;
    }

    if ( !handled && (keyval == WXK_TAB) )
    {
        wxWindow* iter = focus->GetParent() ;
        while ( iter && !handled )
        {
            if ( iter->HasFlag( wxTAB_TRAVERSAL ) )
            {
                wxNavigationKeyEvent new_event;
                new_event.SetEventObject( focus );
                new_event.SetDirection( !event.ShiftDown() );
                /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
                new_event.SetWindowChange( event.ControlDown() );
                new_event.SetCurrentFocus( focus );
                handled = focus->GetParent()->HandleWindowEvent( new_event );
                if ( handled && new_event.GetSkipped() )
                    handled = false ;
            }

            iter = iter->GetParent() ;
        }
    }

    // backdoor handler for default return and command escape
    if ( !handled && (!focus->IsKindOf(CLASSINFO(wxControl) ) || !focus->AcceptsFocus() ) )
    {
        // if window is not having a focus still testing for default enter or cancel
        // TODO: add the UMA version for ActiveNonFloatingWindow
#ifndef __LP64__
        wxWindow* focus = wxNonOwnedWindow::GetFromWXWindow( (WXWindow) FrontWindow() ) ;
        if ( focus )
        {
            if ( keyval == WXK_RETURN || keyval == WXK_NUMPAD_ENTER )
            {
                wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(focus), wxTopLevelWindow);
                if ( tlw && tlw->GetDefaultItem() )
                {
                    wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
                    if ( def && def->IsEnabled() )
                    {
                        wxCommandEvent event(wxEVT_BUTTON, def->GetId() );
                        event.SetEventObject(def);
                        def->Command(event);

                        return true ;
                    }
                }
            }
            else if (keyval == WXK_ESCAPE || (keyval == '.' && modifiers & cmdKey ) )
            {
                // generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs)
                wxCommandEvent new_event(wxEVT_BUTTON,wxID_CANCEL);
                new_event.SetEventObject( focus );
                handled = focus->HandleWindowEvent( new_event );
            }
        }
#endif
    }
#endif
    return handled ;
}
Esempio n. 22
0
File: app.cpp Progetto: hgwells/tive
bool wxApp::MacSendCharEvent( wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar )
{
    if ( !focus )
        return false ;

    wxKeyEvent event(wxEVT_CHAR) ;
    MacCreateKeyEvent( event, focus , keymessage , modifiers , when , wherex , wherey , uniChar ) ;
    long keyval = event.m_keyCode ;

    bool handled = false ;

    wxTopLevelWindowMac *tlw = focus->MacGetTopLevelWindow() ;

    if (tlw)
    {
        event.SetEventType( wxEVT_CHAR_HOOK );
        handled = tlw->GetEventHandler()->ProcessEvent( event );
        if ( handled && event.GetSkipped() )
            handled = false ;
    }

    if ( !handled )
    {
        event.SetEventType( wxEVT_CHAR );
        event.Skip( false ) ;
        handled = focus->GetEventHandler()->ProcessEvent( event ) ;
    }

    if ( !handled && (keyval == WXK_TAB) )
    {
        wxWindow* iter = focus->GetParent() ;
        while ( iter && !handled )
        {
            if ( iter->HasFlag( wxTAB_TRAVERSAL ) )
            {
                wxNavigationKeyEvent new_event;
                new_event.SetEventObject( focus );
                new_event.SetDirection( !event.ShiftDown() );
                /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
                new_event.SetWindowChange( event.ControlDown() );
                new_event.SetCurrentFocus( focus );
                handled = focus->GetParent()->GetEventHandler()->ProcessEvent( new_event );
                if ( handled && new_event.GetSkipped() )
                    handled = false ;
            }

            iter = iter->GetParent() ;
        }
    }

    // backdoor handler for default return and command escape
    if ( !handled && (!focus->IsKindOf(CLASSINFO(wxControl) ) || !focus->MacCanFocus() ) )
    {
        // if window is not having a focus still testing for default enter or cancel
        // TODO: add the UMA version for ActiveNonFloatingWindow
        wxWindow* focus = wxFindWinFromMacWindow( FrontWindow() ) ;
        if ( focus )
        {
            if ( keyval == WXK_RETURN || keyval == WXK_NUMPAD_ENTER )
            {
                wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(focus), wxTopLevelWindow);
                if ( tlw && tlw->GetDefaultItem() )
                {
                    wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
                    if ( def && def->IsEnabled() )
                    {
                        wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
                        event.SetEventObject(def);
                        def->Command(event);

                        return true ;
                    }
                }
            }
            else if (keyval == WXK_ESCAPE || (keyval == '.' && modifiers & cmdKey ) )
            {
                // generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs)
                wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
                new_event.SetEventObject( focus );
                handled = focus->GetEventHandler()->ProcessEvent( new_event );
            }
        }
    }
    return handled ;
}
Esempio n. 23
0
static gint
gtk_listbox_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxListBox *listbox )
{
    if (g_isIdle)
        wxapp_install_idle_handler();

    if (g_blockEventsOnDrag)
        return FALSE;

    bool ret = false;

    if ((gdk_event->keyval == GDK_Tab) || (gdk_event->keyval == GDK_ISO_Left_Tab))
    {
        wxNavigationKeyEvent new_event;
        /* GDK reports GDK_ISO_Left_Tab for SHIFT-TAB */
        new_event.SetDirection( (gdk_event->keyval == GDK_Tab) );
        /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
        new_event.SetWindowChange( (gdk_event->state & GDK_CONTROL_MASK) );
        new_event.SetCurrentFocus( listbox );
        ret = listbox->GetEventHandler()->ProcessEvent( new_event );
    }

    if ((gdk_event->keyval == GDK_Return) && (!ret))
    {
        // eat return in all modes
        ret = true;
    }

#if wxUSE_CHECKLISTBOX
    if ((gdk_event->keyval == ' ') && (listbox->m_hasCheckBoxes) && (!ret))
    {
        int sel = listbox->GtkGetIndex( widget );

        wxCheckListBox *clb = (wxCheckListBox *)listbox;

        clb->Check( sel, !clb->IsChecked(sel) );

        wxCommandEvent new_event( wxEVT_COMMAND_CHECKLISTBOX_TOGGLED, listbox->GetId() );
        new_event.SetEventObject( listbox );
        new_event.SetInt( sel );
        ret = listbox->GetEventHandler()->ProcessEvent( new_event );
    }
#endif // wxUSE_CHECKLISTBOX

    // Check or uncheck item with SPACE
    if ((gdk_event->keyval == ' ') && (!ret) &&
         (((listbox->GetWindowStyleFlag() & wxLB_MULTIPLE) != 0) ||
          ((listbox->GetWindowStyleFlag() & wxLB_EXTENDED) != 0)) )
    {
        int sel = listbox->GtkGetIndex( widget );

        if (sel != -1)
        {
            ret = true;

            if (listbox->IsSelected( sel ))
                gtk_list_unselect_item( listbox->m_list, sel );
            else
                gtk_list_select_item( listbox->m_list, sel );

            wxCommandEvent new_event(wxEVT_COMMAND_LISTBOX_SELECTED, listbox->GetId() );
            new_event.SetEventObject( listbox );
            wxArrayInt aSelections;
            int n, count = listbox->GetSelections(aSelections);
            if ( count > 0 )
            {
                n = aSelections[0];
                if ( listbox->HasClientObjectData() )
                    new_event.SetClientObject( listbox->GetClientObject(n) );
                else if ( listbox->HasClientUntypedData() )
                    new_event.SetClientData( listbox->GetClientData(n) );
                new_event.SetString( listbox->GetString(n) );
            }
            else
            {
                n = -1;
            }
            new_event.SetInt(n);
            listbox->GetEventHandler()->ProcessEvent( new_event );
        }
    }

    if (ret)
    {
        gtk_signal_emit_stop_by_name( GTK_OBJECT(widget), "key_press_event" );
        return TRUE;
    }

    return FALSE;
}
Esempio n. 24
0
bool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar  )
{
    if ( !focus )
        return false ;

    short keycode ;
    short keychar ;
    keychar = short(keymessage & charCodeMask);
    keycode = short(keymessage & keyCodeMask) >> 8 ;

    if ( modifiers & ( controlKey|shiftKey|optionKey ) )
    {
        // control interferes with some built-in keys like pgdown, return etc. therefore we remove the controlKey modifier
        // and look at the character after
        UInt32 state = 0;
        UInt32 keyInfo = KeyTranslate((Ptr)GetScriptManagerVariable(smKCHRCache), ( modifiers & (~(controlKey|shiftKey|optionKey))) | keycode, &state);
        keychar = short(keyInfo & charCodeMask);
    }
    long keyval = wxMacTranslateKey(keychar, keycode) ;
    long realkeyval = keyval ;
    if ( keyval == keychar )
    {
        // we are not on a special character combo -> pass the real os event-value to EVT_CHAR, but not to EVT_KEY (make upper first)
        realkeyval = short(keymessage & charCodeMask) ;
        keyval = wxToupper( keyval ) ;
    }

    // Check for NUMPAD keys
    if (keyval >= '0' && keyval <= '9' && keycode >= 82 && keycode <= 92)
    {
        keyval = keyval - '0' + WXK_NUMPAD0;
    }
    else if (keycode >= 67 && keycode <= 81)
    {
        switch (keycode)
        {
        case 76 :
            keyval = WXK_NUMPAD_ENTER;
            break;
        case 81:
            keyval = WXK_NUMPAD_EQUAL;
            break;
        case 67:
            keyval = WXK_NUMPAD_MULTIPLY;
            break;
        case 75:
            keyval = WXK_NUMPAD_DIVIDE;
            break;
        case 78:
            keyval = WXK_NUMPAD_SUBTRACT;
            break;
        case 69:
            keyval = WXK_NUMPAD_ADD;
            break;
        case 65:
            keyval = WXK_NUMPAD_DECIMAL;
            break;
        } // end switch
    }

    wxKeyEvent event(wxEVT_KEY_DOWN);
    bool handled = false ;
    event.m_shiftDown = modifiers & shiftKey;
    event.m_controlDown = modifiers & controlKey;
    event.m_altDown = modifiers & optionKey;
    event.m_metaDown = modifiers & cmdKey;
    event.m_keyCode = keyval ;
#if wxUSE_UNICODE
    event.m_uniChar = uniChar ;
#endif
    event.m_rawCode = keymessage;
    event.m_rawFlags = modifiers;
    event.m_x = wherex;
    event.m_y = wherey;
    event.SetTimestamp(when);
    event.SetEventObject(focus);
    handled = focus->GetEventHandler()->ProcessEvent( event ) ;
    if ( handled && event.GetSkipped() )
        handled = false ;
    if ( !handled )
    {
#if wxUSE_ACCEL
        if (!handled)
        {
            wxWindow *ancestor = focus;
            while (ancestor)
            {
                int command = ancestor->GetAcceleratorTable()->GetCommand( event );
                if (command != -1)
                {
                    wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command );
                    handled = ancestor->GetEventHandler()->ProcessEvent( command_event );
                    break;
                }
                if (ancestor->IsTopLevel())
                    break;
                ancestor = ancestor->GetParent();
            }
        }
#endif // wxUSE_ACCEL
    }
    if (!handled)
    {
        wxTopLevelWindowMac *tlw = focus->MacGetTopLevelWindow() ;

        if (tlw)
        {
            event.Skip( FALSE ) ;
            event.SetEventType( wxEVT_CHAR_HOOK );
            // raw value again
            event.m_keyCode = realkeyval ;

            handled = tlw->GetEventHandler()->ProcessEvent( event );
            if ( handled && event.GetSkipped() )
                handled = false ;
        }
    }
    
    if ( !handled )
    {        
        event.Skip( FALSE ) ;
        event.SetEventType( wxEVT_CHAR ) ;
        // raw value again
        event.m_keyCode = realkeyval ;

        handled = focus->GetEventHandler()->ProcessEvent( event ) ;
        if ( handled && event.GetSkipped() )
            handled = false ;
    }
    if ( !handled && (keyval == WXK_TAB) )
    {
        wxWindow* iter = focus->GetParent() ;
        while( iter && !handled )
        {
            if ( iter->HasFlag( wxTAB_TRAVERSAL ) )
            {
                wxNavigationKeyEvent new_event;
                new_event.SetEventObject( focus );
                new_event.SetDirection( !event.ShiftDown() );
                /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */
                new_event.SetWindowChange( event.ControlDown() );
                new_event.SetCurrentFocus( focus );
                handled = focus->GetParent()->GetEventHandler()->ProcessEvent( new_event );
                if ( handled && new_event.GetSkipped() )
                    handled = false ;
            }
            iter = iter->GetParent() ;
        }
    }
    // backdoor handler for default return and command escape
    if ( !handled && (!focus->IsKindOf(CLASSINFO(wxControl) ) || !focus->MacCanFocus() ) )
    {
          // if window is not having a focus still testing for default enter or cancel
          // TODO add the UMA version for ActiveNonFloatingWindow
          wxWindow* focus = wxFindWinFromMacWindow( FrontWindow() ) ;
          if ( focus )
          {
            if ( keyval == WXK_RETURN )
            {
                 wxButton *def = wxDynamicCast(focus->GetDefaultItem(),
                                                       wxButton);
                 if ( def && def->IsEnabled() )
                 {
                     wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
                     event.SetEventObject(def);
                     def->Command(event);
                     return true ;
                }
            }
            /* generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs) */
            else if (keyval == WXK_ESCAPE || (keyval == '.' && modifiers & cmdKey ) )
            {
                  wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
                  new_event.SetEventObject( focus );
                  handled = focus->GetEventHandler()->ProcessEvent( new_event );
            }
          }
    }
    return handled ;
}
Esempio n. 25
0
void send_mtu_probe(node_t *n) {
	vpn_packet_t packet;
	int len, i;
	int timeout = 1;
	
	n->mtuprobes++;
	n->mtuevent = NULL;

	if(!n->status.reachable || !n->status.validkey) {
		ifdebug(TRAFFIC) logger(LOG_INFO, "Trying to send MTU probe to unreachable or rekeying node %s (%s)", n->name, n->hostname);
		n->mtuprobes = 0;
		return;
	}

	if(n->mtuprobes > 32) {
		if(!n->minmtu) {
			n->mtuprobes = 31;
			timeout = pinginterval;
			goto end;
		}

		ifdebug(TRAFFIC) logger(LOG_INFO, "%s (%s) did not respond to UDP ping, restarting PMTU discovery", n->name, n->hostname);
		n->mtuprobes = 1;
		n->minmtu = 0;
		n->maxmtu = MTU;
	}

	if(n->mtuprobes >= 10 && n->mtuprobes < 32 && !n->minmtu) {
		ifdebug(TRAFFIC) logger(LOG_INFO, "No response to MTU probes from %s (%s)", n->name, n->hostname);
		n->mtuprobes = 31;
	}

	if(n->mtuprobes == 30 || (n->mtuprobes < 30 && n->minmtu >= n->maxmtu)) {
		if(n->minmtu > n->maxmtu)
			n->minmtu = n->maxmtu;
		else
			n->maxmtu = n->minmtu;
		n->mtu = n->minmtu;
		ifdebug(TRAFFIC) logger(LOG_INFO, "Fixing MTU of %s (%s) to %d after %d probes", n->name, n->hostname, n->mtu, n->mtuprobes);
		n->mtuprobes = 31;
	}

	if(n->mtuprobes == 31) {
		timeout = pinginterval;
		goto end;
	} else if(n->mtuprobes == 32) {
		timeout = pingtimeout;
	}

	for(i = 0; i < 4 + localdiscovery; i++) {
		if(i == 0) {
			if(n->mtuprobes < 30 || n->maxmtu + 8 >= MTU)
				continue;
			len = n->maxmtu + 8;
		} else if(n->maxmtu <= n->minmtu) {
			len = n->maxmtu;
		} else {
			len = n->minmtu + 1 + rand() % (n->maxmtu - n->minmtu);
		}

		if(len < 64)
			len = 64;
		
		memset(packet.data, 0, 14);
		RAND_pseudo_bytes(packet.data + 14, len - 14);
		packet.len = len;
		if(i >= 4 && n->mtuprobes <= 10)
			packet.priority = -1;
		else
			packet.priority = 0;

		ifdebug(TRAFFIC) logger(LOG_INFO, "Sending MTU probe length %d to %s (%s)", len, n->name, n->hostname);

		send_udppacket(n, &packet);
	}

end:
	n->mtuevent = new_event();
	n->mtuevent->handler = (event_handler_t)send_mtu_probe;
	n->mtuevent->data = n;
	n->mtuevent->time = now.tv_sec + timeout;
	event_add(n->mtuevent);
}
Esempio n. 26
0
event_ref new_timer_event(uint8_t timer, uint16_t period, uint8_t repeat, uint16_t repeat_count) {
	event_ref e = 0;
	action_ref check_action = 0;

	node_ref period_arg = 0;
	node_ref trigger_arg = 0;

	time_ref time_trigger = 0;
	time_ref time_period = 0;


	for(;;) {

		// Create a new time period
		time_period = new_time();
		if(!time_period) break;
		// Set up the period
		if(timer == CLOCK_TIME) {
			time_period->clock_time = period;
		} else if (timer == MILLISECONDS) {
			time_period->milliseconds = period;
		} else if (timer == SECONDS) {
			time_period->seconds = period;
		} else if (timer == MINUTES) {
			time_period->minutes = period;
		} else if (timer == HOURS) {
			time_period->hours = period;
		} else if (timer == DAYS) {
			time_period->days = period;
		}

		// Create a new time trigger
		time_trigger = new_time();
		if(!time_trigger) break;
		// Set up the trigger = global + period
		add_time_to_time(time_trigger, global_time());
		add_time_to_time(time_trigger, time_period);

		// Create a new event
		e = new_event();
		if(!e) break;

		// Create a new action
		check_action = new_action();
		if(!check_action) break;
		// Set its function
		action_set_func(check_action, &check_time_args);

		// Create a trigger arg
		trigger_arg = new_node(time_trigger, &time_delete);
		if(!trigger_arg) break;

		// Create the period arg
		period_arg = new_node(time_period, &time_delete);
		if(!period_arg) break;
		node_append(period_arg, trigger_arg);

		action_set_args(check_action, period_arg);
		event_set_check(e, check_action);
		event_set_repeat(e, repeat, repeat_count);

		return e;
	}

	event_delete(&e);

	node_delete(&period_arg);
	node_delete(&trigger_arg);

	action_delete(&check_action);

	time_delete(&time_period);
	time_delete(&time_trigger);

	return FAILURE;
}
static bool
read_values(const char *file_path, Context *ctx)
{
    FILE *f;
    int line_num;
    char line[LINE_SIZE];
    Expectation_Block *eblock = NULL;

    f = fopen(file_path, "r");
    if (!f) {
        fprintf(stderr, "Failed to open %s\n", file_path);
        return false;
    }

    if (ctx->debug)
        printf("=== Parsing ===\n");

    line_num = 0;
    // mark all events on values and expectations vectors
    while (fgets(line, LINE_SIZE, f)) {
        Variable *var;
        Event *event;
        Status_Event *status_event;
        Term *term;
        Expectation *expec = NULL;
        int time, ret;
        char sensor[STR_PARSE_LEN], state[STR_PARSE_LEN];
        float value = 0;

        ret = parse_value(ctx, line, &time, sensor, state);
        if (ret == LINE_ERROR) {
            fprintf(stderr, "Failed to read line %d: %s\n", line_num, line);
            goto error;
        }

        line_num++;

        if (ret == LINE_EMPTY)
            continue;

        if (time >= ctx->reads) {
            fprintf(stderr, "Time %d exceeds reads %d on line %d\n",
                time, ctx->reads, line_num - 1);
            goto error;
        }

        if (!strcmp(sensor, BEGIN_EXPECTATIONS)) {
            if (eblock) {
                fprintf(stderr, "BEGIN_EXPECTATIONS block on line %d is inside"
                    " another BEGIN_EXPECTATIONS block\n", line_num - 1);
                goto error;
            }
            eblock = add_expectation_block(&ctx->expectation_blocks, state,
                time, 0);
            continue;
        } else if (!strcmp(sensor, END_EXPECTATIONS)) {
            if (!eblock) {
                fprintf(stderr, "Missing BEGIN_EXPECTATIONS block before "
                    "END_EXPECTATIONS block on line %d\n", line_num - 1);
                goto error;
            }
            eblock->end = time;
            eblock = NULL;
            continue;
        }

        var = parse_sensor(ctx, sensor);
        if (!var) {
            expec = parse_expectation(ctx, sensor);
            if (expec)
                var = expec->output;
            else
                goto error;
        }

        status_event = parse_status_event(time, state);
        if (status_event) {
            if (expec) {
                fprintf(stderr, "Error: EXP_%s is not suppose to have status "
                    "changes\n", var->name);
                free(status_event);
                goto error;
            }
            var->status_events = g_list_append(var->status_events,
                status_event);
        } else {
            term = parse_state(var, state);
            if (!term)
                value = atof(state);

            event = new_event(time, term, value);

            if (expec)
                expec->events = g_list_append(expec->events, event);
            else
                var->events = g_list_append(var->events, event);
        }

    }

    ctx->cur_expectation_block = ctx->expectation_blocks;
    if (ctx->debug)
        printf("=== Parsing concluded ===\n");

    fclose(f);
    return true;

error:
    fclose(f);
    return false;
}
Esempio n. 28
0
void CompaniesFrame::OnTryClose(wxCloseEvent& event) {
  event.Veto();
  wxCloseEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED);
  button_cancel_->ProcessWindowEvent(new_event);
  Hide();
}
int main(void)
{
   ALLEGRO_TIMER *timer;
   ALLEGRO_EVENT_SOURCE user_src;
   ALLEGRO_EVENT_QUEUE *queue;
   ALLEGRO_EVENT user_event;
   ALLEGRO_EVENT event;

   if (!al_init()) {
      abort_example("Could not init Allegro.\n");
      return 1;
   }

   timer = al_create_timer(0.5);
   if (!timer) {
      abort_example("Could not install timer.\n");
      return 1;
   }

   open_log();

   al_init_user_event_source(&user_src);

   queue = al_create_event_queue();
   al_register_event_source(queue, &user_src);
   al_register_event_source(queue, al_get_timer_event_source(timer));

   al_start_timer(timer);

   while (true) {
      al_wait_for_event(queue, &event);

      if (event.type == ALLEGRO_EVENT_TIMER) {
         int n = event.timer.count;

         log_printf("Got timer event %d\n", n);

         user_event.user.type = MY_SIMPLE_EVENT_TYPE;
         user_event.user.data1 = n;
         al_emit_user_event(&user_src, &user_event, NULL);

         user_event.user.type = MY_COMPLEX_EVENT_TYPE;
         user_event.user.data1 = (intptr_t)new_event(n);
         al_emit_user_event(&user_src, &user_event, my_event_dtor);
      }
      else if (event.type == MY_SIMPLE_EVENT_TYPE) {
         int n = (int) event.user.data1;
         ALLEGRO_ASSERT(event.user.source == &user_src);

         al_unref_user_event(&event.user);

         log_printf("Got simple user event %d\n", n);
         if (n == 5) {
            break;
         }
      }
      else if (event.type == MY_COMPLEX_EVENT_TYPE) {
         MY_EVENT *my_event = (void *)event.user.data1;
         ALLEGRO_ASSERT(event.user.source == &user_src);

         log_printf("Got complex user event %d\n", my_event->id);
         al_unref_user_event(&event.user);
      }
   }

   al_destroy_user_event_source(&user_src);
   al_destroy_event_queue(queue);
   al_destroy_timer(timer);

   log_printf("Done.\n");
   close_log(true);

   return 0;
}
Esempio n. 30
0
DC_ClientEvent *DC_checkClientEvent(void)
{
	DC_ClientEvent *event;
	char *buf, *msg;
	int ret;

	/* Check for checkpoint requests */
	if (boinc_time_to_checkpoint())
	{
		DC_log(LOG_DEBUG, "Core client requested checkpoint");
		return new_event(DC_CLIENT_CHECKPOINT);
	}

	/* Check for messages */
	buf = (char *)malloc(MAX_MESSAGE_SIZE);
	if (!buf)
		/* Let's hope the error is transient and we can deliver the
		 * message when DC_checkClientEvent() is called for the next time */
		return NULL;

	/* Check for trickle-down messages and also handle internal
	 * communication */
	ret = boinc_receive_trickle_down(buf, MAX_MESSAGE_SIZE);
	if (ret)
	{
		msg = (char *)malloc(MAX_MESSAGE_SIZE);
		if (!msg)
		{
			free(buf);
			return NULL;
		}
		ret = parse_str(buf, "<message>", msg, MAX_MESSAGE_SIZE);
		if (!ret)
		{
			DC_log(LOG_WARNING, "Failed to parse message %s", buf);
			free(buf);
			free(msg);
			return NULL;
		}

		if (!strncmp(msg, DCAPI_MSG_PFX, strlen(DCAPI_MSG_PFX)) &&
				msg[strlen(DCAPI_MSG_PFX)] == ':')
		{
			event = handle_special_msg(msg +
				strlen(DCAPI_MSG_PFX) + 1);
			free(msg);
			return event;
		}

		DC_log(LOG_DEBUG, "Received trickle message");

		event = new_event(DC_CLIENT_MESSAGE);
		event->message = buf;
		return event;
	}
	free(buf);

	if (client_state == STATE_FINISH)
		return new_event(DC_CLIENT_FINISH);

	return NULL;
}