Changeset 14050 for trunk/FACT++/src


Ignore:
Timestamp:
06/03/12 20:21:39 (12 years ago)
Author:
tbretz
Message:
Added InterpreterV8 as base class to allow running JavaScripts
Location:
trunk/FACT++/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/RemoteControl.cc

    r10493 r14050  
    2323        {
    2424            fCurrentServer = s;
    25             return false;
     25            return true;
    2626        }
    2727        lout << kRed << "Unkown server '" << s << "'" << endl;
    28         return true;
     28        return false;
    2929    }
    3030
     
    3232    {
    3333        fCurrentServer = "";
    34         return false;
     34        return true;
    3535    }
    3636
    37     return !SendDimCommand(lout, fCurrentServer, str);
     37    return SendDimCommand(lout, fCurrentServer, str);
    3838}
    3939
  • trunk/FACT++/src/RemoteControl.h

    r13939 r14050  
    11#ifndef FACT_RemoteControl
    22#define FACT_RemoteControl
     3
     4#include "InterpreterV8.h"
    35
    46// **************************************************************************
     
    5961
    6062template <class T>
    61 class RemoteControl : public T, public RemoteControlImp
     63class RemoteControl : public T, public RemoteControlImp, public InterpreterV8
    6264{
    6365private:
     
    135137        T::UpdatePrompt();
    136138    }
     139
     140    // ===========================================================================
     141
     142    virtual void JsLoad(const std::string &)         { SetSection(-2); }
     143    virtual void JsStart(const std::string &)        { SetSection(-1); }
     144    virtual void JsEnd(const std::string &)          { SetSection(-3); }
     145    virtual bool JsSend(const std::string &str)      { return ProcessCommand(str); }
     146    virtual void JsPrint(const std::string &msg)     { fImp->Comment(msg); }
     147    virtual void JsException(const std::string &str) { fImp->Error(str); }
     148
     149    void JsSleep(uint32_t ms)
     150    {
     151        const Time timeout = ms<=0 ? Time(Time::none) : Time()+boost::posix_time::millisec(ms);
     152
     153        T::GetStreamOut().Display(true);
     154        T::GetStreamOut().SetBacklog(false);
     155        T::GetStreamOut().SetNullOutput(false);
     156        while (timeout>Time() && !T::IsScriptStopped())
     157            usleep(1);
     158        T::GetStreamOut().SetNullOutput(true);
     159        T::GetStreamOut().SetBacklog(true);
     160    }
     161
     162    int JsWait(const string &server, int32_t state, uint32_t ms)
     163    {
     164        const ClientList::const_iterator l = fClientList.find(server);
     165        if (l==fClientList.end())
     166        {
     167            lout << kRed << "Server '" << server << "' not found." << endl;
     168            T::StopScript();
     169            return -1;
     170        }
     171
     172        const Time timeout = ms<=0 ? Time(Time::none) : Time()+boost::posix_time::millisec(ms);
     173
     174        T::GetStreamOut().Display(true);
     175        T::GetStreamOut().SetBacklog(false);
     176        T::GetStreamOut().SetNullOutput(false);
     177        while (l->second->GetState()!=state && timeout>Time() && !T::IsScriptStopped())
     178            usleep(1);
     179        T::GetStreamOut().SetNullOutput(true);
     180        T::GetStreamOut().SetBacklog(true);
     181
     182        return l->second->GetState()==state;
     183    }
     184
     185
     186    // ===========================================================================
     187
    137188
    138189public:
     
    196247        }
    197248
     249        if (str.substr(0, 4)==".js ")
     250        {
     251            JsRun(Tools::Trim(str.substr(3)));
     252            return true;
     253        }
     254
    198255        if (str.substr(0, 3)==".s ")
    199256        {
     
    210267            }
    211268
    212             const ClientList::const_iterator l = fClientList.find(server);
    213             if (l==fClientList.end())
    214             {
    215                 lout << kRed << "Server '" << server << "' not found." << endl;
    216                 return true;
    217             }
    218 
    219             const Time timeout = ms<=0 ? Time(Time::none) : Time()+boost::posix_time::millisec(ms);
    220 
    221             T::GetStreamOut().Display(true);
    222             T::GetStreamOut().SetBacklog(false);
    223             T::GetStreamOut().SetNullOutput(false);
    224             while (l->second->GetState()!=state && timeout>Time() && !T::IsScriptStopped())
    225                 usleep(1);
    226             T::GetStreamOut().SetNullOutput(true);
    227             T::GetStreamOut().SetBacklog(true);
    228 
    229             if (l->second->GetState()==state)
     269            const int rc = JsWait(server, state, ms);
     270
     271            if (rc<0 || rc==1)
    230272                return true;
    231273
     
    267309        }
    268310
    269         return ProcessCommand(str);
     311        return !ProcessCommand(str);
    270312    }
    271313
Note: See TracChangeset for help on using the changeset viewer.