File: main_app.cpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (75 lines) | stat: -rw-r--r-- 2,172 bytes parent folder | download | duplicates (4)
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
#include "main_app.h"
#include <SocketAPI/clSocketBase.h>
#include <SocketAPI/clSocketServer.h>
#include <clJoinableThread.h>
#include <iostream>
#include <wx/filename.h>

IMPLEMENT_APP_CONSOLE(MainApp)

static const wxCmdLineEntryDesc cmdLineDesc[] = { { wxCMD_LINE_PARAM, NULL, NULL, "Input file", wxCMD_LINE_VAL_STRING,
                                                    wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_PARAM_OPTIONAL },
                                                  { wxCMD_LINE_NONE } };

MainApp::MainApp()
{
    Bind(wxEVT_STDIN_MESSAGE, &MainApp::OnStdin, this);
    Bind(wxEVT_STDIN_EXIT, &MainApp::OnStdinExit, this);
}

MainApp::~MainApp()
{
    Unbind(wxEVT_STDIN_MESSAGE, &MainApp::OnStdin, this);
    Unbind(wxEVT_STDIN_EXIT, &MainApp::OnStdinExit, this);
}

int MainApp::OnExit()
{
    m_process.Stop();

    // Tell the stdin thread to quit by sending it a command ".exit"
    m_stdin->Write(".exit");
    wxDELETE(m_stdin);

    return TRUE;
}

bool MainApp::OnInit()
{
    wxCmdLineParser parser;
    parser.SetDesc(cmdLineDesc);
    parser.SetCmdLine(wxAppConsole::argc, wxAppConsole::argv);
    if(!DoParseCommandLine(parser)) { return false; }

    if(!wxGetEnv("NDB_NODEJS_PATH", &m_nodejs)) {
        std::cerr << "Please set the environment variable NDB_NODEJS_PATH to point to your Nodejs executable"
                  << std::endl;
        return false;
    }
    if(!wxFileName::FileExists(m_nodejs)) {
        std::cerr << "NDB_NODEJS_PATH points to a non existing file" << std::endl;
        return false;
    }

    m_process.Debug(m_nodejs, m_scriptPath);
    m_stdin = new NodeStdinThread(this);
    m_stdin->Start();

    // place your initialization code here
    return true;
}

bool MainApp::DoParseCommandLine(wxCmdLineParser& parser)
{
    wxUnusedVar(parser);
    parser.Parse();
    if(parser.GetParamCount() == 0) {
        std::cerr << "No input script provided" << std::endl;
        return false;
    }
    m_scriptPath = parser.GetParam(0);
    return true;
}

void MainApp::OnStdin(clCommandEvent& event) { m_process.Write(event.GetString()); }
void MainApp::OnStdinExit(clCommandEvent& event) { ExitMainLoop(); }