Subversion Repositories HomeAutomation

Rev

Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
969 runge 1
/***************************************************************************
2
 *   Copyright (C) December 10, 2008 by Mattias Runge                             *
3
 *   mattias@runge.se                                                      *
4
 *   virtualmachine.h                                            *
5
 *                                                                         *
6
 *   This program is free software; you can redistribute it and/or modify  *
7
 *   it under the terms of the GNU General Public License as published by  *
8
 *   the Free Software Foundation; either version 2 of the License, or     *
9
 *   (at your option) any later version.                                   *
10
 *                                                                         *
11
 *   This program is distributed in the hope that it will be useful,       *
12
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
13
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
14
 *   GNU General Public License for more details.                          *
15
 *                                                                         *
16
 *   You should have received a copy of the GNU General Public License     *
17
 *   along with this program; if not, write to the                         *
18
 *   Free Software Foundation, Inc.,                                       *
19
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
20
 ***************************************************************************/
21
 
22
#ifndef _VIRTUALMACHINE_H
23
#define _VIRTUALMACHINE_H
24
 
25
using namespace std;
26
 
27
#include <map>
28
#include <string>
29
#include <queue>
30
 
31
#include "../v8/include/v8.h"
32
#include "../SyslogStream/syslogstream.h"
33
#include "../Settings/settings.h"
34
#include "../CanNet/cannetmanager.h"
35
#include "../CanNet/canmessage.h"
36
#include "../Threads/semaphore.h"
37
#include "../Threads/threadsafequeue.h"
38
#include "intervalthread.h"
976 runge 39
#include "socketthread.h"
999 runge 40
#include "commandthread.h"
41
#include "expression.h"
969 runge 42
 
43
using namespace v8;
44
 
45
class VirtualMachine : public Thread<VirtualMachine>
46
{
47
public:
48
    static VirtualMachine& getInstance();
49
    static void deleteInstance();
50
 
51
    void run();
52
 
999 runge 53
    void queueExpression(Expression expression);
54
    void queueExpression(string script) { queueExpression(Expression(script)); };
55
 
969 runge 56
    bool loadScript(string scriptName);
1007 runge 57
    bool loadDataStore(string storeName);
976 runge 58
 
971 runge 59
    unsigned int startIntervalThread(unsigned int timeout);
60
    bool stopIntervalThread(unsigned int id);
969 runge 61
 
976 runge 62
    unsigned int startSocketThread(string address, int port, unsigned int reconnectTimeout);
63
    bool stopSocketThread(unsigned int id);
64
    void sendToSocketThread(unsigned int id, string data);
65
 
999 runge 66
    void sendToCommandClient(unsigned int id, string data);
67
    void disconnectCommandClient(unsigned int id);
68
 
69
    void print(unsigned int id, string data);
70
 
71
    static Handle<Value> _quit(const Arguments& args);
72
    static Handle<Value> _print(const Arguments& args);
73
    static Handle<Value> _log(const Arguments& args);
74
    static Handle<Value> _sendCanMessage(const Arguments& args);
75
    static Handle<Value> _sendCanNMTMessage(const Arguments& args);
76
    static Handle<Value> _loadScript(const Arguments& args);
77
    static Handle<Value> _stopIntervalThread(const Arguments& args);
78
    static Handle<Value> _startIntervalThread(const Arguments& args);
79
    static Handle<Value> _stopSocketThread(const Arguments& args);
80
    static Handle<Value> _startSocketThread(const Arguments& args);
81
    static Handle<Value> _sendToSocketThread(const Arguments& args);
82
    static Handle<Value> _uint2hex(const Arguments& args);
1007 runge 83
    static Handle<Value> _loadDataStore(const Arguments& args);
999 runge 84
 
969 runge 85
private:
999 runge 86
    bool runExpression(Expression expression);
87
    string formatException(TryCatch* tryCatch);
969 runge 88
 
89
    VirtualMachine();
90
    ~VirtualMachine();
91
    static VirtualMachine* myInstance;
92
 
93
    Handle<Function> myFunctionStartup;
94
 
95
    Handle<ObjectTemplate> myGlobal;
96
    HandleScope myHandleScope;
97
    Handle<Context> myContext;
98
 
99
    Semaphore mySemaphore;
100
 
999 runge 101
    ThreadSafeQueue<Expression> myExpressions;
969 runge 102
 
999 runge 103
    map<int, IntervalThread*> myIntervalThreads;
983 runge 104
    map<int, SocketThread*> mySocketThreads;
999 runge 105
 
106
    CommandThread myCommandThread;
969 runge 107
};
108
 
109
#endif  /* _VIRTUALMACHINE_H */
110