int main(int /*argc*/, char* /*argv*/ []) { rtLogSetLevel(RT_LOG_INFO); rtError e; rtRemoteEnvironment* env = rtEnvironmentGetGlobal(); e = rtRemoteInit(env); if (e != RT_OK) { rtLogError("rtRemoteInit:%s", rtStrError(e)); exit(1); } rtObjectRef obj(new ContinuousVideoRecorder()); e = rtRemoteRegisterObject(env, "some_name", obj); if (e != RT_OK) { rtLogError("rtRemoteRegisterObject:%s", rtStrError(e)); exit(2); } while (true) { // process incoming messages e = rtRemoteRunUntil(env, 1000); rtLogInfo("rtRemoteRunUntil: %s", rtStrError(e)); // ((ContinuousVideoRecorder *)obj.getPtr())->fireOnUploadComplete(); } return 0; }
rtError rtRemoteEndpointHandleStreamServer::open() { if (m_addr == nullptr) { rtLogError("failed to open endpoint socket: endpoint address is null"); return RT_FAIL; } rtError e = rtRemoteEndpointAddressToSocket(m_addr, m_socket); if (e != RT_OK) { rtLogError("failed to convert from endpoint address to sockaddr"); return e; } // open socket m_fd = socket(m_socket.ss_family, SOCK_STREAM, 0); if (m_fd < 0) { rtError e = rtErrorFromErrno(errno); rtLogError("failed to create socket. %s", rtStrError(e)); return e; } return RT_OK; }
rtError rtRemoteEndpointHandleStreamServer::doListen() { int ret; ret = listen(m_fd, 2); if (ret < 0) { rtError e = rtErrorFromErrno(errno); rtLogError("failed to put socket in listen mode. %s", rtStrError(e)); return e; } return RT_OK; }
rtError rtDukContext::runScript(const char* script, rtValue* retVal /*= NULL*/, const char *args /*= NULL*/) { if(script == NULL) { rtLogError(" %s ... no script given.",__PRETTY_FUNCTION__); return RT_FAIL; } // rtLogDebug(" %s ... Running...",__PRETTY_FUNCTION__); return runScript(std::string(script), retVal, args); }
rtError rtDukContext::runFile(const char *file, rtValue* retVal /*= NULL*/, const char* args /*= NULL*/) { if(file == NULL) { rtLogError(" %s ... no script given.",__PRETTY_FUNCTION__); return RT_FAIL; } // Read the script file js_file = file; js_script = readFile(file); if( js_script.empty() ) // load error { rtLogError(" %s ... load error / not found.",__PRETTY_FUNCTION__); return RT_FAIL; } return runScript(js_script.c_str(), retVal, args); }
virtual bool next(uint32_t timeoutMillis) { // reset event state for (poll_list::iterator i = mFds.begin(); i != mFds.end(); ++i) { i->events = POLLIN | POLLERR; i->revents = 0; } int n = poll(&mFds[0], static_cast<int>(mFds.size()), timeoutMillis); if (n < 0) { int err = errno; if (err == EINTR) { rtLogInfo("poll was interrupted by EINTR?"); } else { rtLogError("error processing events: %s", getSystemError(err).c_str()); return false; } } bool deviceListChanged = false; for (poll_list::iterator i = mFds.begin(); i != mFds.end(); ++i) { if (i->fd == -1) { rtLogWarn("invalid file descriptor"); continue; } if (!(i->revents & POLLIN)) continue; if (i->fd == mInotifyFd) deviceListChanged = processChangeNotify(*i); else processDescriptor(*i); } if (deviceListChanged) { rtLogInfo("device list change notify"); close(false); init(); } return true; }
rtDukContextRef rtScriptDuk::createContext(bool ownThread) { UNUSED_PARAM(ownThread); // not implemented yet. rtDukContextRef ctxref; #ifdef USE_CONTEXTIFY_CLONES if(mRefContext.getPtr() == NULL) { mRefContext = new rtDukContext(); ctxref = mRefContext; mRefContext->dukCtx = dukCtx; assert(uvLoops.size() == 1); mRefContext->uvLoop = uvLoops[0]; static std::string sandbox_path = rtGetRootModulePath(SANDBOX_JS); // Populate 'sandbox' vars in JS... if(fileExists(sandbox_path.c_str())) { mRefContext->runFile(sandbox_path.c_str()); } else { rtLogError("## ERROR: Could not find \"%s\" ...", sandbox_path.c_str()); } // !CLF: TODO Why is ctxref being reassigned from the mRefContext already assigned? //ctxref = new rtNodeContext(mIsolate, mRefContext); } else { // rtLogInfo("\n createContext() >> CLONE CREATED !!!!!!"); ctxref = new rtDukContext(mRefContext); // CLONE !!! assert(ctxref->uvLoop != NULL); uvLoops.push_back(mRefContext->uvLoop); } #else ctxref = new rtDukContext(mIsolate,mPlatform); #endif // TODO: Handle refs in map ... don't leak ! // mNodeContexts[ ctxref->getContextId() ] = ctxref; // ADD to map return ctxref; }
//rtError rtDukContext::runScript(const std::string &script, rtValue* retVal /*= NULL*/, const char* /* args = NULL*/) rtError rtDukContext::runScript(const char* szscript, rtValue* retVal /*= NULL*/, const char *args /*= NULL*/) { std::string script = szscript; rtLogInfo(__FUNCTION__); if(script.empty()) { rtLogError(" %s ... no script given.",__PRETTY_FUNCTION__); return RT_FAIL; } if (myload_code(dukCtx, script.c_str())) { return RT_FAIL; } return RT_OK; }
rtError rtRemoteEndpointHandleStreamServer::doBind() { int ret; socklen_t len; rtSocketGetLength(m_socket, &len); ret = bind(m_fd, reinterpret_cast<struct sockaddr*>(&m_socket), len); if (ret < 0) { rtError e = rtErrorFromErrno(errno); rtLogError("failed to bind socket. %s", rtStrError(e)); return e; } rtGetSockName(m_fd, m_socket); rtLogInfo("local rpc listener on: %s", rtSocketToString(m_socket).c_str()); return RT_OK; }
void rtScriptDuk::nodePath() { const char* NODE_PATH = ::getenv("NODE_PATH"); if(NODE_PATH == NULL) { char cwd[1024] = {}; if (getcwd(cwd, sizeof(cwd)) != NULL) { #ifdef WIN32 _putenv_s("NODE_PATH", cwd); #else ::setenv("NODE_PATH", cwd, 1); // last arg is 'overwrite' ... 0 means DON'T ! #endif rtLogInfo("NODE_PATH=%s", cwd); } else { rtLogError(" - failed to set NODE_PATH"); } } }