00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00012
00013 #ifndef SERVERSIDESCRIPTING_H_
00014 #define SERVERSIDESCRIPTING_H_
00015
00016 #include "upnpexp.h"
00017
00018 #include <QString>
00019 #include <QMap>
00020 #include <QDateTime>
00021 #include <QMutex>
00022 #include <QTextStream>
00023 #include <QScriptEngine>
00024 #include <QScriptable>
00025
00026 class ScriptInfo
00027 {
00028 public:
00029 QScriptValue m_oFunc;
00030 QDateTime m_dtTimeStamp;
00031
00032 ScriptInfo() {}
00033
00034 ScriptInfo( QScriptValue func, QDateTime dt )
00035 : m_oFunc( func ), m_dtTimeStamp( dt )
00036 {}
00037 };
00038
00039 class UPNP_PUBLIC ServerSideScripting
00040 {
00041 protected:
00042
00043 QMutex m_mutex;
00044 QMap< QString, ScriptInfo* > m_mapScripts;
00045
00046 void Lock () { m_mutex.lock(); }
00047 void Unlock () { m_mutex.unlock(); }
00048
00049 public:
00050
00051 QScriptEngine m_engine;
00052
00053 public:
00054
00055 ServerSideScripting();
00056 ~ServerSideScripting();
00057
00058 void RegisterMetaObjectType( const QString &sName,
00059 const QMetaObject *pMetaObject,
00060 QScriptEngine::FunctionSignature pFunction);
00061
00062 bool EvaluatePage( QTextStream *pOutStream, const QString &sFileName );
00063
00064 protected:
00065
00066 QString CreateMethodFromFile( const QString &sFileName );
00067
00068 bool ProcessLine ( QTextStream &sCode,
00069 QString &sLine,
00070 bool bInCode,
00071 QString &sTransBuffer );
00072 };
00073
00074
00075 class OutputStream : public QObject, public QScriptable
00076 {
00077 Q_OBJECT
00078
00079 public:
00080
00081 OutputStream( QTextStream *pStream, QObject *parent = 0 )
00082 : QObject( parent ), m_pTextStream( pStream ) {}
00083
00084 ~OutputStream() {}
00085
00086 public slots:
00087
00088 void write( const QString &sValue )
00089 {
00090 *m_pTextStream << sValue;
00091 }
00092
00093 void writeln( const QString &sValue )
00094 {
00095 *m_pTextStream << sValue << "\n";
00096 }
00097
00098 private:
00099 QTextStream *m_pTextStream;
00100 };
00101
00102 #endif