/******************************************************************************
 * Copyright (c) 2005 The Regents of the University of California.
 * This material was produced under U.S. Government contract W-7405-ENG-36
 * for Los Alamos National Laboratory, which is operated by the University
 * of California for the U.S. Department of Energy. The U.S. Government has
 * rights to use, reproduce, and distribute this software. NEITHER THE
 * GOVERNMENT NOR THE UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR
 * ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. If software is modified
 * to produce derivative works, such modified software should be clearly
 * marked, so as not to confuse it with the version available from LANL.
 *
 * Additionally, this program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * LA-CC 04-115
 ******************************************************************************/

#ifndef _PROXY_EVENT_H_
#define _PROXY_EVENT_H_

/*
 * Event code definitions.
 *
 * These are the events used by the proxy runtime system.
 *
 * Event codes that are marked 'LOCAL EVENT' are *not* sent across the wire. They
 * are used for internal communication only (mainly on the Java side, but can
 * be used by a C client if desired). All other events are sent across
 * the wire.
 */

#define PROXY_EV_OK				0
#define PROXY_EV_MESSAGE		1
#define PROXY_EV_CONNECTED		2	/* LOCAL EVENT */
#define PROXY_EV_DISCONNECTED	3	/* LOCAL EVENT */
#define PROXY_EV_TIMEOUT		4	/* LOCAL EVENT */
#define PROXY_EV_ERROR			5
#define PROXY_EV_SHUTDOWN		6

/*
 * Codes must EXACTLY match org.eclipse.ptp.rtsystem.proxy.event.IProxyRuntimeEvent
 */
#define PROXY_EV_RT_OFFSET				200
/*
 * Internal state events
 */
#define PROXY_EV_RT_STARTUP_STATE		PROXY_EV_RT_OFFSET + 1	/*LOCAL EVENT */
#define PROXY_EV_RT_CONNECTED_STATE		PROXY_EV_RT_OFFSET + 2	/*LOCAL EVENT */
#define PROXY_EV_RT_RUNNING_STATE		PROXY_EV_RT_OFFSET + 3	/*LOCAL EVENT */
#define PROXY_EV_RT_SHUTDOWN_STATE		PROXY_EV_RT_OFFSET + 4	/*LOCAL EVENT */
#define PROXY_EV_RT_ERROR_STATE			PROXY_EV_RT_OFFSET + 5	/*LOCAL EVENT */
/*
 * Internal error events
 */
#define PROXY_EV_RT_STARTUP_ERROR		PROXY_EV_RT_OFFSET + 10	/*LOCAL EVENT */

/*
 * Command error events
 */
#define PROXY_EV_RT_SUBMITJOB_ERROR		PROXY_EV_RT_OFFSET + 11
#define PROXY_EV_RT_TERMINATEJOB_ERROR	PROXY_EV_RT_OFFSET + 12
/*
 * New model element events
 */
#define PROXY_EV_RT_NEW_JOB				PROXY_EV_RT_OFFSET + 20
#define PROXY_EV_RT_NEW_MACHINE			PROXY_EV_RT_OFFSET + 21
#define PROXY_EV_RT_NEW_NODE			PROXY_EV_RT_OFFSET + 22
#define PROXY_EV_RT_NEW_PROCESS			PROXY_EV_RT_OFFSET + 23
#define PROXY_EV_RT_NEW_QUEUE			PROXY_EV_RT_OFFSET + 24
/*
 * Change model element events
 */
#define PROXY_EV_RT_JOB_CHANGE			PROXY_EV_RT_OFFSET + 30
#define PROXY_EV_RT_MACHINE_CHANGE		PROXY_EV_RT_OFFSET + 31
#define PROXY_EV_RT_NODE_CHANGE			PROXY_EV_RT_OFFSET + 32
#define PROXY_EV_RT_PROCESS_CHANGE		PROXY_EV_RT_OFFSET + 33
#define PROXY_EV_RT_QUEUE_CHANGE		PROXY_EV_RT_OFFSET + 34
/*
 * Remove model element events
 */
#define PROXY_EV_RT_REMOVE_ALL			PROXY_EV_RT_OFFSET + 40
#define PROXY_EV_RT_REMOVE_JOB			PROXY_EV_RT_OFFSET + 41
#define PROXY_EV_RT_REMOVE_MACHINE		PROXY_EV_RT_OFFSET + 42
#define PROXY_EV_RT_REMOVE_NODE			PROXY_EV_RT_OFFSET + 43
#define PROXY_EV_RT_REMOVE_PROCESS		PROXY_EV_RT_OFFSET + 44
#define PROXY_EV_RT_REMOVE_QUEUE		PROXY_EV_RT_OFFSET + 45
/*
 * Miscellaneous events
 */
#define PROXY_EV_RT_MESSAGE				PROXY_EV_RT_OFFSET + 50	/* LOCAL EVENT */
#define PROXY_EV_RT_ATTR_DEF			PROXY_EV_RT_OFFSET + 51

void		proxy_add_string_attribute(proxy_msg *m, char *attr, char *value);
void		proxy_add_int_attribute(proxy_msg *m, char *attr, int value);
proxy_msg *	proxy_ok_event(int trans_id);
proxy_msg *	proxy_shutdown_event(int trans_id);
proxy_msg *	proxy_message_event(int trans_id, char *level, int code, char *fmt, ...);
proxy_msg *	proxy_error_event(int trans_id, int code, char *fmt, ...);
proxy_msg *	proxy_submitjob_error_event(int trans_id, char *jobSubId, int code, char *msg);
proxy_msg *	proxy_terminatejob_error_event(int trans_id, char *job_id, int code, char *msg);
proxy_msg *	proxy_attr_def_int_event(int trans_id, char *id, char *name, char *desc, int disp, int def);
proxy_msg *	proxy_attr_def_string_event(int trans_id, char *id, char *name, char *desc, int disp, char *def);
proxy_msg *	proxy_new_machine_event(int trans_id, char *rm_id, char *machine_id_range, char *name, char *state);
proxy_msg *	proxy_new_job_event(int trans_id, char *queue_id, char *job_id_range, char *name, char *state, char *jobSubId);
proxy_msg *	proxy_new_node_event(int trans_id, char *mach_id, int num_nodes);
void		proxy_add_node(proxy_msg *m, char *node_id, char *name, char *state, int extra_attrs);
proxy_msg *	proxy_new_process_event(int trans_id, char *job_id, int num_procs);
void		proxy_add_process(proxy_msg *m, char *proc_id, char *name, char *state, int extra_attrs);
proxy_msg *	proxy_new_queue_event(int trans_id, char *rm_id, char *queue_id, char *name, char *state);
proxy_msg *	proxy_job_change_event(int trans_id, char *id_range, int num_attrs);
proxy_msg *	proxy_machine_change_event(int trans_id, char *id_range, int num_attrs);
proxy_msg *	proxy_node_change_event(int trans_id, char *id_range, int num_attrs);
proxy_msg *	proxy_process_change_event(int trans_id, char *id_range, int num_attrs);
proxy_msg *	proxy_queue_change_event(int trans_id, char *id_range, int num_attrs);
proxy_msg *	proxy_remove_all_event(int trans_id);
proxy_msg *	proxy_remove_job_event(int trans_id, char *id_range);
proxy_msg *	proxy_remove_machine_event(int trans_id, char *id_range);
proxy_msg *	proxy_remove_node_event(int trans_id, char *id_range);
proxy_msg *	proxy_remove_process_event(int trans_id, char *id_range);
proxy_msg *	proxy_remove_queue_event(int trans_id, char *id_range);
#endif /* !_PROXY_EVENT_H_ */
