Ejemplo n.º 1
0
bool machine_t::dialog_response(cookie_t c, int value)
{
  if (events.count(c)==0)
  {
    log_error("Invalid cookie [%d] in respond", c.value()) ;
    return false ;
  }
  event_t *e = events[c] ;
  if (e->state == state_dlg_requ)
  {
    if (e->request_watcher)
      e->request_watcher->detach(e) ;
  }
  else if (e->state != state_dlg_user)
  {
    log_error("Unexpected response for event [%d] in state '%s'", c.value(), e->state->name()) ;
    return false ;
  }
  if (value < -Maemo::Timed::Number_of_Sys_Buttons)
  {
    log_error("Invalid negative value in respond: event [%d], value=%d", c.value(), value) ;
    return false ;
  }
  int b = e->b_attr.size() ;
  if (value > b)
  {
    log_error("Invalid value in respond: event [%d], value=%d, number of buttons: %d", c.value(), value, b) ;
    return false ;
  }
  log_assert(buttons.count(value)>0, "no button with value=%d present", value) ;
  request_state(e, buttons[value]) ;
  e->flags &= ~ EventFlags::In_Dialog ;
  invoke_process_transition_queue() ;
  return true ;
}
Ejemplo n.º 2
0
void machine_t::request_state(event_t *e, const string &state_name)
{
  state *new_state = NULL ;
  if(not state_name.empty())
  {
    map<string, state*>::iterator it = states.find(state_name) ;
    log_assert(it!=states.end(), "Unknown state: '%s'", state_name.c_str()) ;
    new_state = it->second ;
  }
  request_state(e, new_state) ;
}
Ejemplo n.º 3
0
//-----------------------------------------------------------------------------
int main( int argc, char* argv[] ) {

  if( init( argc, argv ) != 0 )
    //quit.store( 1, std::memory_order_seq_cst );
    quit = true;

  while( !quit ) {
  //while( !quit.load( std::memory_order_seq_cst ) ) {
    request_state();
    compute_command();
    publish_command();
    publish_yield();
  }

  shutdown();

  return 0;
}
Ejemplo n.º 4
0
// internal pwrite, do a write query with offset on a different descriptor, do not change the position of the current one.
ssize_t gridftp_rw_internal_pwrite(GridFTPFactory * factory,
        GridFTPFileDesc* desc, const void* buffer, size_t s_buff, off_t offset)
{ // throw Gfal::CoreException
    gfal_log(GFAL_VERBOSE_TRACE, " -> [GridFTPModule::internal_pwrite]");

    GridFTPSessionHandler handler(factory, desc->url);
    GridFTPRequestState request_state(&handler);
    GridFTPStreamState stream(&handler);

    globus_result_t res = globus_ftp_client_partial_put(
            stream.handler->get_ftp_client_handle(), desc->url.c_str(),
            stream.handler->get_ftp_client_operationattr(),
            NULL, offset, offset + s_buff,
            globus_ftp_client_done_callback, &request_state);
    gfal_globus_check_result(GFAL_GRIDFTP_SCOPE_INTERNAL_PWRITE, res);

    ssize_t r_size = gridftp_write_stream(GFAL_GRIDFTP_SCOPE_INTERNAL_PWRITE,
            &stream, buffer, s_buff, false); // write block

    request_state.wait(GFAL_GRIDFTP_SCOPE_INTERNAL_PWRITE);
    gfal_log(GFAL_VERBOSE_TRACE, "[GridFTPModule::internal_pwrite] <-");
    return r_size;

}
Ejemplo n.º 5
0
// internal pread, do a read query with offset on a different descriptor, do not change the position of the current one.
ssize_t gridftp_rw_internal_pread(GridFTPFactory * factory,
        GridFTPFileDesc* desc, void* buffer, size_t s_buff, off_t offset)
{
    // throw Gfal::CoreException
    gfal_log(GFAL_VERBOSE_TRACE, " -> [GridFTPModule::internal_pread]");

    GridFTPSessionHandler handler(factory, desc->url);
    GridFTPRequestState request_state(&handler);
    GridFTPStreamState stream_state(&handler);

    globus_result_t res = globus_ftp_client_partial_get(
            handler.get_ftp_client_handle(), desc->url.c_str(),
            handler.get_ftp_client_operationattr(),
            NULL, offset, offset + s_buff,
            globus_ftp_client_done_callback, &request_state);
    gfal_globus_check_result(GFAL_GRIDFTP_SCOPE_INTERNAL_PREAD, res);

    ssize_t r_size = gridftp_read_stream(GFAL_GRIDFTP_SCOPE_INTERNAL_PREAD, &stream_state, buffer, s_buff);

    request_state.wait(GFAL_GRIDFTP_SCOPE_INTERNAL_PREAD);
    gfal_log(GFAL_VERBOSE_TRACE, "[GridFTPModule::internal_pread] <-");
    return r_size;

}
Ejemplo n.º 6
0
void machine_t::request_state(event_t *e, const char *state_name)
{
  request_state(e, string(state_name)) ;
}