


#ifndef _CLASS_QUEUE_
#define _CLASS_QUEUE_

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <unistd.h>

#define QUEUE_MODE_SEND	1
#define QUEUE_MODE_RECV	2

#define QUEUE_SUCCESS			1
#define QUEUE_ERR_MSGSND_FAILED		-9000
#define QUEUE_ERR_MSGRCV_FAILED		-9001
#define QUEUE_ERR_MSGGET_FAILED		-9002
#define QUEUE_ERR_MSGCTL_FAILED		-9003

#define QUEUE_ERR_CANNOT_OPEN_FILE	-9010
#define QUEUE_ERR_ID_READ		-9011
#define QUEUE_ERR_ID_BLANK		-9012

#define QUEUE_MAX_CMD	10
#define QUEUE_MAX_INF	20

typedef struct{
	char cmd[ QUEUE_MAX_CMD ];
	char inf[ QUEUE_MAX_INF ];
} msgcmd_t;

typedef struct{
	long mtype;
	msgcmd_t msg;
} msg_t;

class queue
{
private:
	int m_mode;
	char* m_filename;
	int m_mqd;
	msg_t m_msg;

public:
	queue();
	~queue();
	void set_mode_send( void );
	void set_mode_recv( void );
	void set_filename( const char* filename );

	int open( void );
	int close( void );
	int send( const char* cmd, const char* inf );
	int recv( void );

	virtual void do_cmd( const char* cmd, const char* inf ) = 0;

	void print( void );
	int list( void );
	int all_list_clear( void );

private:
	void release_filename( void );

};

#endif


