summaryrefslogtreecommitdiffstats
path: root/mpeglib/example/yaf/yafcore/yaf_control.cpp
blob: 6e789588110e2b5c3d731bfd10941465508cddb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
  generic interactive controller 
  Copyright (C) 1998  Martin Vogt

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU Library General Public License as published by
  the Free Software Foundation.

  For more information look at the file COPYRIGHT in this package

 */



#include "yaf_control.h"
#include "parser.h"
#include <iostream>

using namespace std;


void yaf_control(InputInterface* input,
		 OutputInterface* output,
		 InputDecoder* decoder) {

  Parser parser;
  CommandLine* commandLine;
  struct timeval timeout;
  const char* retCode;
  int status;
  
  timeout.tv_sec=0;
  timeout.tv_usec=0;

  output->setProtocolSyntax(true);  // we send "raw" protocol data
  input->addFileDescriptor(0);
 
  while(1) {

    status=decoder->getDecoderStatus();

    if (status == _DECODER_STATUS_EXIT) {
      break;
    }
    input->waitForLine();
    
    if (input->hasLine()) {
      parser.setParseString(input->getLine());
      parser.parse();
      
      if (parser.isOK()){

		
	commandLine=parser.getCommandLine();

	decoder->processCommandLine(commandLine);
	retCode=decoder->getReturnCode();

	// now get the part after Msg: (in the inputLine)

	output->lock();
	output->clearBuffer();
	output->appendBuffer(retCode);
	output->flushBuffer();
	output->unlock();
      } else {
	cout << "Error parsing input:"<<input->getLine()<<endl;
      }

      input->clearLine();
    } else {
      cout << "no line"<<endl;
    }
  }
  input->removeFileDescriptor(0);

}