inline error_code async_submit_job(client const &client, char const *rsl, JobSubmitCallback const &job_submit_callback, int state_mask, StateChangeCallback const &state_chage_callback) { typedef listen_state_op<StateChangeCallback, non_blocking> listen_state_op_type; listen_state_op_type *listener_op = new listen_state_op_type(state_chage_callback); char *callback_contact(0); int const callback_allowed( ::globus_gram_client_callback_allow( &listen_state_op<StateChangeCallback, non_blocking>::callback, listener_op, &callback_contact)); if (callback_allowed != GLOBUS_SUCCESS) { delete listener_op; return static_cast<error_code>(callback_allowed); } job_submit_op<JobSubmitCallback> *op = new job_submit_op<JobSubmitCallback>(job_submit_callback); int const job_requested( ::globus_gram_client_register_job_request( client.contact(), rsl, state_mask, callback_contact, 0, &job_submit_op<JobSubmitCallback>::callback, op)); if (job_requested != GLOBUS_SUCCESS) { delete listener_op; delete op; return static_cast<error_code>(job_requested); } return no_error; }
inline error_code submit_job_wait_until(client const &client, char const *rsl, int state_mask, StateChangeListener const &listener) { listen_state_op<StateChangeListener, blocking> listener_op(listener); char *callback_contact(0); int const callback_allowed( ::globus_gram_client_callback_allow( &listen_state_op<StateChangeListener, blocking>::callback, &listener_op, &callback_contact)); if (callback_allowed != GLOBUS_SUCCESS) return static_cast<error_code>(callback_allowed); listener_op.listen(); char *job_contact(0); int const job_requested( ::globus_gram_client_job_request( client.contact(), rsl, state_mask, callback_contact, &job_contact)); if (job_requested != GLOBUS_SUCCESS) { listener_op.cancel(); return static_cast<error_code>(job_requested); } typedef std::pointer_to_unary_function<void *,void> function_type; globus::util::on_exit<function_type> free_contact( std::ptr_fun(::free), job_contact); return no_error; }
inline error_code async_submit_job(client const &client, char const *rsl, Callback const &callback) { job_submit_op<Callback> *op = new job_submit_op<Callback>(callback); int const job_requested( ::globus_gram_client_register_job_request( client.contact(), rsl, 0, 0, 0, &job_submit_op<Callback>::callback, op)); if (job_requested != GLOBUS_SUCCESS) { delete op; return static_cast<error_code>(job_requested); } return no_error; }