/*****************************************************************************
* 	Project 	: Network Based Message Queue System		    **
*	Course		: CIS 650 - Software Engineering		    **
*	Location 	: /research/paraducks3/courses/cis650/proj/rt	    **
*	File		: rt.h						    **
*	Description 	: The router class declarations. 		    **
*****************************************************************************/

#ifndef RT_H
#define RT_H

class Router {
	public :
	int key; /* key of the message queue. These values are put in by */
	int permissions; /*rtargs.cc process_args() function */

	Router(void);
	~Router(void);
	int	create_message_queue(int key, int perms);
	int	wait_for_messages(void);
	int	process_message(Connection *c, Message *m); 
		/* process request */
	int	process_data_message(Connection *c, Message *m);
		/* process data from the client */
	int	process_request_message(Connection *c, Message *m);
		/* process request for a message of a particular type */
	int	process_control_message(Connection *c, Message *m);
		/* process control of queue message */
	int     process_message_type_query(nmsqid_ds *request);
		/* message type query processing */
	int	answer_query(nmsqid_ds *request);
		/* general purpose query */
	int	do_route(Connection *c, Message *m);
		/* send the message to the destination - and log it too! */
	int	create_and_send_reply(Connection *c, int reply);
		/* create reply message and send it to the destination */
};
	

#endif /* RT_H */

