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);
}
|