#include "queue.hpp"

#define MAX_PMT 7
#define MAX_BUF 100

class que_s : public queue
{
public:
	void do_cmd( const char* cmd, const char* inf ){}
};

void help( void )
{
	printf( "quit\n" );
	printf( "exit\n" );
	printf( "help\n" );
}

int main( void )
{
	int ret;
	char pmt_cmd[MAX_PMT];
	char pmt_inf[MAX_PMT];

	memset( pmt_cmd, 0, MAX_PMT );
	memset( pmt_inf, 0, MAX_PMT );
	snprintf( pmt_cmd, MAX_PMT, "cmd > " );
	snprintf( pmt_inf, MAX_PMT, "inf > " );

	char cmdbuf[MAX_BUF];
	char infbuf[MAX_BUF];

	que_s que_snd;

	que_snd.set_mode_send();
	que_snd.set_filename( "./test" );
	que_snd.open();

	while(1)
	{
		memset( cmdbuf, 0, MAX_BUF );
		memset( infbuf, 0, MAX_BUF );

		// cmd input
		write( 1, pmt_cmd, MAX_PMT );
		fsync(1);
		ret  = read( 0, cmdbuf, MAX_BUF );
		if( -1 == ret )
		{
			printf( "cmd read error\n" );
			return -1;
		}
		for( int i = 0; i < MAX_BUF; i++ )
		{
			if( cmdbuf[i] <= 0x1f ) cmdbuf[i] = 0;
		}

		if( strcmp( "exit", cmdbuf ) == 0 ) break;
		if( strcmp( "quit", cmdbuf ) == 0 ) break;
		if( strcmp( "help", cmdbuf ) == 0 )
		{
			help();
			continue;
		}

		// inf input
		write( 1, pmt_inf, MAX_PMT );
		fsync(1);
		ret  = read( 0, infbuf, MAX_BUF );
		if( -1 == ret )
		{
			printf( "inf read error\n" );
			return -1;
		}
		for( int i = 0; i < MAX_BUF; i++ )
		{
			if( infbuf[i] <= 0x1f ) infbuf[i] = 0;
		}

		printf( "----> " );
		printf( "cmd = {%s}, ", cmdbuf );
		printf( "inf = {%s}\n", infbuf );

		que_snd.send( cmdbuf, infbuf );
	}

	que_snd.close();

	return 1;
}