blob: 5dca3739726b7fd47e62bf5f4636adbd86158731 [file] [log] [blame]
#include <cstdlib>
#include <ios>
#include <iostream>
#include <cstdio>
#include <stdexcept>
#include <DrbdResource.h>
#include <StringTokenizer.h>
#include <QTree.h>
#include "comparators.h"
#include "DrbdMon.h"
#include "EventsSourceSpawner.h"
#include "EventsIo.h"
const int BUFSZ = 1000;
int main(int argc, char* argv[])
{
int rc = 0;
EventsSourceSpawner* evsp {nullptr};
EventsIo* evio {nullptr};
char* buffer {nullptr};
try
{
buffer = new char[BUFSZ];
evsp = new EventsSourceSpawner();
int evfd = evsp->spawn_source();
std::cerr << "Source spawned, pid: " << static_cast<unsigned long long> (evsp->get_process_id()) <<
" fd: " << evfd << std::endl;
if (evfd != -1)
{
evio = new EventsIo(evfd);
bool shutdown = false;
while (!shutdown)
{
EventsIo::event event_id = evio->wait_event();
switch (event_id)
{
case EventsIo::event::EVENT_LINE:
{
std::string* event_line = evio->get_event_line();
if (event_line != nullptr)
{
std::cout << "EVENT_LINE ready (" << *event_line << ")" << std::endl;
}
else
{
std::cerr << "EVENT_LINE ready, but get_event_line() == nullptr" << std::endl;
}
}
break;
case EventsIo::event::SIGNAL:
{
int signal_id = evio->get_signal();
switch (signal_id)
{
case SIGHUP:
// fall-through
case SIGINT:
// fall-through
case SIGTERM:
std::cerr << "Received terminate notification" << std::endl;
shutdown = true;
break;
case SIGWINCH:
std::cerr << "Received window size change notification" << std::endl;
break;
default:
std::cerr << "Received unexpected signal #" << signal_id << std::endl;
break;
}
}
break;
case EventsIo::event::STDIN:
{
char c = std::fgetc(stdin);
std::fprintf(stdout, "STDIN ready (%c)\n", c);
}
break;
case EventsIo::event::NONE:
// fall-through, not supposed to happen
default:
// ignore any other events
break;
}
}
}
}
catch (std::bad_alloc& out_of_memory_exc)
{
std::cerr << "Out of memory\n";
rc = 1;
}
catch (EventsSourceException&)
{
std::cerr << "caught EventsSourceException" << std::endl;
}
catch (EventsIoException&)
{
std::cerr << "caught EventsIoException" << std::endl;
}
delete evio;
delete evsp;
delete[] buffer;
std::cout << "test: Finished, rc=" << rc << std::endl;
return rc;
}