开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
LinkServer
/
Script.cpp
LinkServer
/
Script.cpp
Script.cpp 5.08 KB
一键复制 编辑 原始数据 按行查看 历史
LinkPi 提交于 2018年11月01日 19:54 +08:00 . 关闭日志
#include "Script.h"
#include <QDebug>
#include <QFile>
#include "Server.h"
#include "Json.h"
#include "unistd.h"
#include <QScriptValueIterator>
#include "GroupRPC.h"
Script::Script(QObject *parent) : QObject(parent)
{
}
void Script::init()
{
QScriptValue self = engine.newQObject(this);
engine.globalObject().setProperty("sys",self);
QScriptValue link = engine.newQObject(server);
engine.globalObject().setProperty("Link",link);
QScriptValue group = engine.newQObject(groupRPC);
engine.globalObject().setProperty("group",group);
//engine.evaluate("function include(path){ sys.include(path); }");
engine.evaluate("function setInterval(func,time){ sys.setInterval(func,time); }");
engine.evaluate("function setTimeout(func,time){ sys.setTimeout(func,time); }");
engine.evaluate("function clearInterval(id){ sys.stopTimer(id); }");
}
QVariant Script::loadConfig(QString path)
{
if(!path.startsWith("/"))
path="/link/config/"+path;
return Json::loadFile(path);
}
bool Script::saveConfig(QVariant data, QString path)
{
if(!path.startsWith("/"))
path="/link/config/"+path;
if(data.toMap().isEmpty())
{
QFile f(path);
f.open(QFile::ReadWrite);
f.resize(0);
f.write(data.toString().toUtf8().data(),data.toString().toUtf8().length());
f.close();
return true;
}
else
return Json::saveFile(data,path);
}
QString Script::readFile(QString path)
{
QFile file(path);
file.open(QFile::ReadOnly);
QString str=file.readAll();
file.close();
return str;
}
bool Script::regist(QString name, QScriptValue func, QScriptValue obj)
{
qDebug()<<"regist"<<name;
methodMap[name]=func;
thisMap[name]=obj;
return true;
}
bool Script::connect(QString name, QScriptValue func, QScriptValue jsobj)
{
LinkObject *obj=Link::find(name);
if(obj==NULL)
return false;
regist(name, func,jsobj);
QObject::connect(obj,SIGNAL(newEvent(QString,QVariant)),this,SLOT(onNewEvent(QString,QVariant)));
return true;
}
void Script::onNewEvent(QString type, QVariant args)
{
LinkObject *obj=(LinkObject *)sender();
QVariantList list;
list<<type;
list<<args;
call(obj->name(),list);
}
QVariant Script::call(QString method, QVariantList args)
{
QScriptValueList list;
foreach(QVariant v,args)
list<<engine.toScriptValue(v);
if(!methodMap.contains(method))
return false;
QScriptValue ret=methodMap[method].call(thisMap[method],list);
if(engine.hasUncaughtException()){
qDebug()<<engine.uncaughtException().toString();
}
// if(ret.isObject())
// {
// QVariantMap map;
// QScriptValueIterator it(ret);
// while (it.hasNext()) {
// it.next();
// qDebug() << it.name() << ": " << it.value().toVariant();
// map[it.name()]=it.value().toVariant();
// }
// return map;
// }
// else
return ret.toVariant();
}
int Script::setTimeout(QString func, int ms)
{
return setTimer(func, ms, true);
}
int Script::setInterval(QString func, int ms)
{
return setTimer(func, ms, false);
}
int Script::setTimer(QString func, int ms, bool singleshot)
{
_timerData tmp;
tmp.func = func;
tmp.singleshot = singleshot;
tmp.ms = ms;
tmp.id = startTimer(ms);
if ( tmp.id == 0 ) {
qDebug() << "can not start timer!";
}
// qDebug("setTimer:%d,%s",tmp.id,tmp.func.toLatin1().data());
timerData.insert(tmp.id, tmp);
return tmp.id;
}
void Script::stopTimer(int id)
{
if(!timerData.contains(id))
return;
// qDebug("stopTimer:%d",id);
killTimer(id);
timerData.remove(id);
}
void Script::sleep(int ms)
{
usleep(ms*1000);
}
void Script::exec(QString cmd)
{
system(cmd.toLatin1().data());
}
void Script::include(QString path)
{
if(!path.startsWith("/"))
path="/link/script/"+path;
QFile file(path);
file.open(QFile::ReadOnly);
QString line;
while(true)
{
line=file.readLine();
if(line.startsWith("include"))
{
// include("func.js");
// qDebug()<<line;
int a=line.indexOf("\"");
int b=line.indexOf("\"",a+1);
QString path=line.mid(a+1,b-a-1);
include(path);
//engine.evaluate(line);
}
else
break;
}
QString js=line+file.readAll();
file.close();
engine.evaluate(js);
if(engine.hasUncaughtException()){
qDebug()<<engine.uncaughtException().toString();
}
}
void Script::timerEvent(QTimerEvent *e)
{
_timerData timer = timerData.value(e->timerId());
QScriptValue res;
if ( timer.id != 0 ) {
// qDebug() << QString("Timeout, evaluating: ") + timer.func;
jsLock.lock();
res = engine.evaluate(timer.func);
jsLock.unlock();
if ( res.isError() ) {
qDebug() << res.toString();
}
if ( timer.singleshot ) {
stopTimer(timer.id);
}
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

该工程基于LinkLib,支持脚本运行,可以独立使用,也是LinkDesign的服务端。
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/LinkPi/LinkServer.git
git@gitee.com:LinkPi/LinkServer.git
LinkPi
LinkServer
LinkServer
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /